Matlab Esencial para Ingenieros Ago 2014

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 132

Matlab esencial para ingenieros∗

O.R. FAURE

Segundo Cuatrimestre - 2014

∗ Basado en el libro Essential MATLAB for Engineers and Scientists, por B RIAN D. H AHN & DANIEL T. VALENTINE ,

Elsevier, 2007, ISBN 10: 0-75-068417-8.

1
Contenidos

I Conceptos Básicos 4
1 Introducción 6
1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Utilizando Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 El escritorio de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Ejemplo de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Directorio Actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6 Método recomendado para ejecutar un script desde Browser Current Directory . . . . . . . . 18

2 Fundamentos de Matlab 21
1 Variables y Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2 Arreglos: vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Movimiento vertical por gravedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Operadores, expresiones e instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6 Repeticiones utilizando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7 Decisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8 Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
9 Más sobre entradas y salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10 Misceláneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
11 Estilo de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

3 Diseño de programas y desarrollo de algoritmos 66


1 El proceso de diseño de un programa de computadora . . . . . . . . . . . . . . . . . . . . . 67
2 Otros ejemplos de programación estructurada . . . . . . . . . . . . . . . . . . . . . . . . . 75
3 Programación Estructurada con funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4 Funciones de Matlab y utilidades en importación-exportación de datos 80


1 Algunas funciones comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2 Importación y exportación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

5 Vectores Lógicos 93
1 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
2 Los operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3 Subı́ndices con vectores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4 Funciones Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5 Vectores lógicos en lugar elseif escalonados . . . . . . . . . . . . . . . . . . . . . . . . . 104

2
Matlab ESENCIAL PARA INGENIEROS 1 3

6 Introducción a los gráficos 109


1 Gráficos básicos en 2-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2 Gráficos en 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2014 - O.R. FAURE


Parte I

Conceptos Básicos

4
Matlab ESENCIAL PARA INGENIEROS 5

Fundamentos
Esta primera parte se refiere a aquellos aspectos de Matlab que es necesario conocer con el fin de
familiarizarse con los elementos esenciales de Matlab y de cálculos técnicos. Las secciones 11, 12 y
13 están marcadas con un asterisco, (*). Algunas subsecciones están marcadas de manera similar. Estas
secciones y subsecciones se pueden saltar en su primera lectura.
Ésto pretende ser una guı́a de aprendizaje y, por lo tanto, se espera que se utilice Matlab extensivamente
mientras se va avanzando.

Matlab is an integrated technical computing environment that combines


numeric computation, advanced graphics and visualization, and a high-
level programming language.

http://www.mathworks.com/products/matlab

2014 - O.R. FAURE


Capı́tulo 1

Introducción

1. I NTRODUCCI ÓN

El objetivo principal de esta primera parte es utilizar algunos comandos de Matlab simples desde la
ventana de comandos y examinar diversas funciones de escritorio y edición de Matlab.

Matlab es un sistema informático de gran alcance para el manejo de los cálculos involucrados en prob-
lemas cientı́ficos y de ingenierı́a. El nombre Matlab es sinónimo de MATrix LABoratory, debido a que
fue diseñado para hacer cálculos matriciales de una manera particularmente fácil. No es necesario aún
saber qué es una matriz, eso se verá en detalle más adelante.

Aquı́ se asumirá que nunca ha usado una computadora antes de hacer el tipo de cálculos cientı́ficos que
se encarga de Matlab . Sin embargo, se debe ser capaz de encontrar su camino alrededor de un teclado
de computadora y el sistema operativo que se ejecuta en el equipo (por ejemplo, Windows, Linux, etc).
La única otra habilidad informática que se necesita es un poco de edición de texto muy básico.

Una de las muchas cosas entre tantas que es simple en Matlab (y que lo distingue de muchos otros
sistemas de programación de computadoras, tales como C++ y Java) es que se puede utilizar de forma
interactiva. Esto significa que se pueden tipear comandos en la ventana que aparece el sı́mbolo especial
de Matlab (>>), y obtener las respuestas de inmediato. Los problemas resueltos de esta manera puede
ser muy simples, como encontrar una raı́z cuadrada, o pueden ser mucho más complicados, como encon-
trar la solución a un sistema de ecuaciones diferenciales. Para muchos problemas técnicos es necesario
introducir sólo uno o dos comandos, y obtener las respuestas. Matlab hace casi todo el trabajo por usted.

Hay dos requisitos esenciales para la programación exitosa en Matlab :

+ Es necesario aprender las reglas exactas para escribir declaraciones de Matlab .

+ Usted necesita desarrollar un plan lógico de ataque para resolver problemas particulares.

Esta sección está dedicada principalmente a una introducción a la primera exigencia: aprender algunas
reglas básicas de Matlab . La programación es una ciencia exacta (algunos dirı́an que es también un
arte); tiene que introducir declaraciones precisas de la manera correcta. Si no lo hace, obtendrá basura.
Hay un dicho entre los programadores de computadoras:

Entra Basura, sale basura.

6
Matlab ESENCIAL PARA INGENIEROS 7

Si se le da a Matlab una instrucción basura, obtendrá una respuesta basura. Con la experiencia, se verá
que con Matlab puede diseñar, desarrollar y aplicar herramientas de cálculo y gráficas para resolver
problemas cientı́ficos y de ingenierı́a relativamente complejos. Con Matlab será posible hacer ajustes,
modificar la forma de interactuar, y desarrollar herramientas por su cuenta que ayudarán a resolver los
problemas. En otras palabras, es posible, con algo de experiencia, personalizar el entorno de trabajo de
Matlab .

A medida que se aprenden los conceptos básicos de Matlab y, para el caso, cualquier otra herramienta
informática, recuérdese que las aplicaciones informáticas no hacen nada al azar. Por lo tanto, al uti-
lizar Matlab, obsérvese y estudénse todas las respuestas a las operaciones de lı́nea de comandos que
se implementan. Es necesario aprender lo que esta herramienta hace y lo que no hace. Para comenzar
una investigación sobre las capacidades de Matlab, se atacrán problemas relativamente simples. Ini-
cialmente, se atacarán problemas a los que se les conocen las respuestas, porque se está evaluando la
herramienta y sus capacidades. Éste es el primer paso en el proceso de aprender a usar cualquier herra-
mienta. A medida que aprenda acerca de Matlab, también va a aprender acerca de la programación de
computadoras. Es necesario hacer esto por dos razones:

+ Para crear las propias herramientas computacionales.


+ Para apreciar las dificultades que implica el diseño de herramientas de calculo y gráficas eficientes,
robustas y precisas (es decir, programas informáticos).

En el resto de esta sección se van a ver algunos ejemplos sencillos para poder probar. No es tan im-
portante entender exactamente lo que está sucediendo. El entendimiento vendrá posteriormente, cuando
se estudien los detalles. Es muy importante ejercitarse con Matlab para aprender por la experiencia
práctica de cómo funciona. Una vez que hayan examinado algunas de las reglas básicas de esta sección,
se estará preparado para dominar muchas de las reglas básicas que se presentarán en la siguiente. Esto
ayudará a resolver los problemas más interesantes y sustanciales. Finalmente, en la última subsección
se llevará a un rápido recorrido por el escritorio de Matlab .

2. U TILIZANDO Matlab
Para utilizar Matlab, éste debe estar instalado en su computadora, o bien debe tener acceso a una red en
la que esté disponible. Aquı́ se asume que la última versión de Matlab es la Versión 7.8.0.347 (R2009a).

Para iniciar Matlab desde Windows, haga doble clic en el icono de Matlab en el escritorio de Windows.
Para iniciarlo desde una plataforma UNIX, tipéese matlab en el prompt del sistema. Cuando comienza a
ejecutarse, el escritorio de Matlab se abre como se muestra en la Figura 1.1. La ventana en el escritorio
que nos ocupa aquı́ es la ventana de comandos, en la que aparece el sı́mbolo especial (>>). Este mensaje
significa que Matlab está esperando un comando. Puede salir de Matlab en cualquier momento con
una de las siguientes:

Selecciónese Exit Matlab en el menú de escritorio del archivo.


Tipéese quit o exit en el prompt de la ventana de comandos.

Para salir de Matlab, no debe hacerse cerrando la ventana de Matlab, ésto no permite a Matlab finalizar
correctamente y, en ocasiones, puede causar problemas con el sistema operativo de la computadora.

Una vez que haya iniciado Matlab, pruébese lo siguiente en la ventana de comandos. A fin de activar
la ventana de comandos, solamente hágase clic en cualquier lugar dentro de ella.

1. Ya que se tiene la experiencia de hacer la aritmética, se quiere verificarlo utilizando Matlab. Al utilizar
herramientas informáticas es importante ganar confianza en ellas y ası́ aumentar la capacidad de uso.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 8

Figura 1.1: El escritorio de Matlab .

(a) Tipéese 2 + 3 después de (>>) y a continuación la tecla de <Enter>, es decir:


>> 2 + 3 <Enter>

Cuando se tipean comandos estos se ejecutan sólo después de pulsar <Enter>. La respuesta en
este caso es, por supuesto, 5.
(b) A continuación, pruébese lo siguiente:
>> 3 - 2 <Enter>
>> 2 * 3 <Enter>
>> 1 / 2 <Enter>
>> 2 ˆ 3 <Enter>
>> 2 \ 1 <Enter>
¿Qué ocurre con (1) / (2) y (2) ˆ (3)? Qué significan los sı́mbolos ∗, / y \? Son la multiplicación,
la división y la exponenciación. La barra invertida significa que el denominador es el número a la
izquierda del sı́mbolo y el numerador el de la derecha; el resultado de la última instrucción es de 0.5.
Esta operación es equivalente a 1/2.
(c) Pruebe los siguientes comandos:
>> 2 .* 3 <Enter>
>> 1 ./ 2 <Enter>
>> 2 . ˆ 3 <Enter>
En estos tres ejemplos un punto delante de los sı́mbolos *, / y ˆ respectivamente, no cambia los resul-
tados, porque la multiplicación, división y exponenciación se hace con los escalares (una explicación
única para la necesidad de estos sı́mbolos se proporcionará más tarde, cuando se trate el tema de matri-
ces).

Los siguientes items son consejos sobre cómo crear y editar lı́neas de comandos:
+ La lı́nea con el sı́mbolo >> se llama la lı́nea de comandos.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 9

+ Es posible editar un comando de Matlab antes de pulsar <Enter> usando varias combinaciones de la
tecla de retroceso, flecha izquierda, flecha derecha y Supr. Esta caracterı́stica útil se llama la edición de
lı́nea de comandos.
+ Es posible seleccionar (y editar) los comandos anteriores que ha introducido con flecha arriba y flecha
abajo. Pero recuérdese presionar <Enter> para que el comando surja efecto (es decir, para correr o
ejecutar la comandos).
+ Matlab tiene una función de edición de útil llamada de recordatorio inteligente. Sólo se tienen que
escribir los primeros caracteres del comando que desea recuperar, por ejemplo, escrı́banse los caracteres
de 2 * y púlsese la tecla de flecha arriba (esto recodará el comando más reciente a partir de 2 *).
(d) ¿Cómo maneja Matlab 0 / 1 y 1 \ 0? Inténtese. Matlab es sensible para anticipar algunos errores;
avisa en caso de que uno no se de cuenta de que estaba dividiendo por cero, pero aún ası́ da la respuesta
Inf. Si se insiste en usar ∞ en un cálculo, que puede legı́timamente desearse hacer, escrı́base el sı́mbolo
Inf (para el infinito), por ejemplo, inténtese 13 + Inf y 29/Inf.
(e) Otro valor especial que se puede encontrar es NaN, que significa Not-a-Number. Es la respuesta a
cálculos como 0/0.

2. Ahora se van a asignar valores a las variables para realizar operaciones aritméticas con ellas.

(a) Introdúzcase el comando (en la jerga de programación una instrucción) a = 2, i.e. la lı́nea de comandos
de Matlab deberı́a tener este aspecto:
>> a = 2 <Enter>
El sı́mbolo a se llama una variable. Esta instrucción asigna el valor 2 a a. (Téngase en cuenta que
este valor se muestra inmediatamente después de que la instrucción se ejecuta.) Ahora inténtese la
instrucción a = a + 7 siguiendo en una nueva lı́nea a = a * 10. ¿Se está de acuerdo con el valor
final de a? ¿Está claro que es 90?
(b) A continuación, introdúzcase la instruccción
>> b = 3; <Enter>
El punto y coma (;) evita que el valor de b sea mostrado. Sin embargo, b aún tiene el valor 3 como
puede verse mediante la introducción de su nombre sin un punto y coma, es decir, mediante la ejecución
del siguiente comando:
>> b <Enter>
(c) Ası́gnense los valores que prefiera a dos variables x e y. Ahora véase si es posible en una sola instrucción
asignar la suma de x e y de una tercera variable z. Una forma de hacer esto es:
>> x = 2; y = 3 <Enter>
>> z = x + y <Enter>
Téngase en cuenta que, además de hacer la aritmética con variables con valores asignados, varios co-
mandos separados por punto y coma (o por comas) se pueden poner en una misma lı́nea.

3. Matlab tiene todas las funciones matemáticas habituales que se encuentran en una calculadora cientı́fica
electrónica, como sin, cos, log (es decir, el logaritmo natural), ası́ como muchas otras; véase la ayuda
para más ejemplos:

(a) Encuéntrese π con el comando sqrt(pi). La respuesta debe ser 1.7725. Téngase en cuenta que
Matlab conoce el valor de π, porque es una de sus muchas funciones incorporadas.
(b) Las funciones trigonométricas como sin(x) deben tener el argumento x en radianes. Multiplı́quese
los grados sexagesimales por π/180 para obtener radianes. Por ejemplo, usar Matlab para calcular
sin(90◦ ). La respuesta debe ser 1, es decir, el sin(90 ∗ π/180).
(c) La función exponencial ex se calcula en Matlab como exp(x). Utilı́cese esta información para encon-
trar e y 1/e (2.7183 y 0.3679 respectivamente).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 10

Téngase en cuenta que, debido a las numerosas funciones integradas como pi o sin, se debe tener
cuidado en la denominación de las variables definidas por el usuario. El nombre de las variables
definidas por el usuario no deberı́a duplicar el nombre de una función incorporada, a menos que se
haga premeditadamente por una buena razón. Este problema se puede ilustrar de la siguiente manera.
Pruébese lo siguiente:
>> pi = 4 <Enter>
>> sqrt(pi) <Enter>
>> whos <Enter>
>> clear pi <Enter>
>> whos <Enter>
>> sqrt(pi) <Enter>
>> clear <Enter>
>> whos <Enter>
Nótese que clear por sı́ solo borra todas las variables locales en el área de trabajo. La ejecución del
comando >> clear pi borra la variable pi definida localmente. Por lo tanto, si se decidió redefinir
una función o un comando, se utiliza el valor que acaba de definirse! Cuando se ejecuta el comando
whos se muestra la lista de variables locales o comandos actualmente en el área de trabajo. La primera
ejecución del comando pi = 4 en el ejemplo anterior muestra la redefinición del número pi. Se trata
de una variable de 1 por 1 (o 1 x 1) (se aprenderá más acerca de otros tipos de datos a medida que se
avance en el conocimiento de Matlab).
4. Matlab tiene numerosas funciones generales. Por ejemplo, inténtese date y calendar para empezar.
5. Matlab también tiene numerosos comandos, como clc (para limpiar la ventana). help es otro comando
que se utiliza habitualmente. La diferencia entre las funciones y comandos es que las funciones gen-
eralmente regresan con un valor, por ejemplo, la fecha, mientras que los comandos tienden a cambiar el
ambiente de alguna manera, por ejemplo, en la limpieza de la pantalla, o guardar algunas declaraciones
en el espacio de trabajo (en el disco).
6. Variables como a y b anteriormente utilizadas se llaman escalares, i.e. que toman valores en R. Matlab
también manipula vectores (por lo general se hace referencia en Matlab como matrices), que son la
clave de muchas caracterı́sticas de la gran potencialidad del lenguaje. La forma más sencilla de definir
un vector donde los elementos (componentes) aumentan gradualmente es con una declaración del tipo
>> x = 0 : 10 <Enter>
Esto es dos puntos (:) entre el 0 y el 10. No hay necesidad de dejar un espacio a cada lado, pero lo
hace más legible. Escrı́base x para comprobar que es un vector; es un vector fila, es decir, se trata de un
vector de una sola fila por 11 columnas. Tipeése el siguiente comando para verificarlo:
>> size(x) <Enter>
Como introducción al conocimiento de la utilización de vectores realı́cense los siguientes ejemplos.

(a) Parte de la potencialidad de Matlab puede ilustrarse con el hecho de que otros vectores a partir de ahora
pueden definirse (o crearse) en términos del vector x que acaba de definirse. Inténtese
>> y = 2 .* x <Enter>
>> w = y ./ x <Enter>
y
>> z = sin(x) <Enter>
(sin punto y coma). Obsérvese que la primera lı́nea de comandos crea un vector y multiplicando cada
elemento de x por el factor 2. La segunda lı́nea de comandos es una operación matricial. Se creó un
vector w tomando de cada elemento de y y dividiéndolo por el elemento correspondiente de x. Dado que
cada elemento de y es dos veces que el elemento correspondiente de x, el vector w es un vector fila de
11 elementos todos iguales a 2. Finalmente, z es un vector con el sin(x) en sus elementos.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 11

(b) Para dibujar un razonablemente gráfico de sin(x) solamente se deben introducir los siguientes coman-
dos:
>> x = 0:0.1:10; <Enter>
>> z = sin(x); <Enter>
>> plot(x, z), grid <Enter>
El gráfico aparece en una ventana separada, figure window (véase la Figura 1.2). Es posible selec-
cionar la ventana de comandos o la ventana de gráficos haciendo cliqueando el mouse en cualquier lugar
dentro de ellas. Los menús desplegables pueden ser utilizados en cualquiera de estas ventanas.
Téngase en cuenta que la primera lı́nea de comandos anterior tiene tres números después del signo de
igual. Cuando hay tres números separados por dos puntos dobles de esta manera, el número del medio
es el incremento. El incremento de 0.1 fue seleccionado para dar una gráfica razonablemente suave. El
comando grid siguiente a la coma en la última lı́nea agrega una cuadrı́cula en el gráfico.
(c) Si se quieren ver más ciclos de la gráfica sinusoidal sólo es necesario utilizar la edición de lı́nea de
comandos para cambiar sin(x) por sin(2*x).
(d) Inténtese de dibujar la gráfica de tan(x) en el mismo dominio. Se pueden encontrar aspectos sorpren-
dentes de la gráfica. Una versión más precisa se presentará luego. Una manera alternativa de examinar
las funciones matemáticas de forma gráfica es usar el siguiente comando:
>> ezplot(’tan(x)’); <Enter>

0.8

0.6

0.4

0.2

ï0.2

ï0.4

ï0.6

ï0.8

ï1
0 1 2 3 4 5 6 7 8 9 10

Figura 1.2: La ventana de gráficos.

Los apóstrofes alrededor de la función tan(x) son importantes en el comando ezplot; también téngase
en cuenta que el dominio predeterminado de x en ezplot no es el intervalo (0, 10).
(e) Otra de las caracterı́sticas útiles para la edición en la ventana de comandos es la implementación del
tabulador: escrı́banse las primeras letras del nombre de una instrucción de Matlab y púlsese la tecla
Tab. Si el nombre es único, se completa automáticamente. Si el nombre no es único, púlsese Tab por
segunda vez para ver todas las posibilidades. Pruébese ésto, por ejemplo, escribiendo ta en la lı́nea de
comando seguido de Tab dos veces.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 12

7. Los sistemas de ecuaciones lineales son muy importantes en ingenierı́a y en análisis cientı́fico. Un
ejemplo sencillo es encontrar la solución de dos ecuaciones simultáneas, por ejemplo:

 x + 2y = 4,

2x −y = 3.

Se presentan dos enfoques para la solución de este sistema de ecuaciones. Esto es seguido por una
verificación de los resultados mediante las operaciones aritméticas que se han aprendido a realizar.

(a) Enfoque 1: Este es el enfoque de método matricial. Escrı́banse los siguientes comandos (tal
y como aparecen):
>> a = [1 2; 2 -1]; <Enter>
>> b = [4; 3]; <Enter>
>> x = a\b; <Enter>
que dan lugar a
x =
2
1
es decir, x = 2, y = 1.
(b) Enfoque 2:. Este método utiliza la función interna solve. Tipéense
los siguientes comandos (tal y como aparecen aquı́):
>> [x, y] = solve(’x + 2*y = 4’, ’2*x - y = 3’); <Enter>
>> whos <Enter>
>> x = double(x), y = double(y) <Enter>
>> whos <Enter>
La función de double convierte x e y de objetos simbólicos (otro tipo de datos en Matlab)
a matrices de doble precisión (es decir, el tipo de datos numérico asociada a un número).
(c) Comprobación de los resultados: Después de ejecutar alguno de los dos anteriores escrı́banse
los siguientes comandos (exactamente como aparecen):
>> x + 2 * y % debe dar como respuesta 4; <Enter>
>> 2*x - y % debe dar como respuesta 3; <Enter>
El sı́mbolo % es un indicador de comentarios, es decir que toda la información a su derecha
no es parte del comando, es un comentario para el usuario. (Se examinará la necesidad de
los comentarios cuando se aprenda a desarrollar programas más adelante.)

8. Si se quiere una muestra de lo que Matlab tiene para ofrecer, inténtese demo en la lı́nea de comandos.

Alternativamente, hágase doble clic en Demos en el Launch Pad, que se encuentra en el botón Start en
la esquina inferior izquierda del escritorio de Matlab . (Si no puede ver Demos, haga clic en el signo
de interrogación para abrir el navegador de ayuda, o se puede iniciar el programa de demostraciones
haciendo clic en él en Demos en el menú desplegable en la Ayuda en la parte superior del escritorio de
Matlab.) Para obtener una lista de demostraciones por categorı́a inténtese help demos.
9. Matlab tiene un sistema muy útil de “ayuda”, que se verá con un poco más de detalle luego. Por
el momento tipéese help en la lı́nea de comandos para ver todas las categorı́as en la que se puede
obtener ayuda. Por ejemplo, tipéese elfun para ver todas las funciones matemáticas elementales. Otra
utilidad es lookfor; que permite buscar una cadena de caracteres concreta en el texto de ayuda de
funciones, por ejemplo, lookfor eigenvalue muestra todas las funciones relativas a eigenval. (Hay
un problema con los resultados que se obtienen en la ventana de comandos Los comandos están, para

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 13

poner énfasis, sólo en mayúsculas, pero para utilizarlos deben ser escritos en minúsculas. Esto se debe
a las últimas versiones de Matlab distinguen entre mayúsculas y minúsculas; por lo tanto, a y A se
consideran diferentes nombres. A la luz de este hecho, es más seguro y mejor utilizar los manuales
de ayuda haciendo clic en el signo de interrogación (?) en la barra de tareas en la parte superior de la
ventana del escritorio de Matlab . Los ejemplos se reproducen correctamente en los manuales de ayuda
que se encuentran haciendo clic en el signo ? en una de las barras de herramientas de Matlab cerca de
la parte superior de la ventana del escritorio de Matlab .)
10. Matlab tiene todo tipo de cosas. Por ejemplo, se puede generar un cuadrado mágico de 10 por 10 (o
10 x 10) mediante la ejecución del comando magic(10), donde las filas, las columnas y la diagonal
principal se suman en el mismo valor. Pruébese. En general, un cuadrado mágico de n x n tiene la
suma de filas y de columnas igual a n(n ˆ 2 + 1)/2.
Se puede incluso conseguir una gráfica de las curvas de nivel de los elementos de un cuadrado mágico.
matlab toma los valores de los elementos de la matriz como las alturas sobre el nivel del mar de los
puntos en un mapa, y dibuja las curvas de nivel. contour(magic(22)) se ve bastante bien.
11. Si se quiere ver el famoso sombrero mexicano, éste se muestra en la Figura 1.3, introdúzcase las cuatro
lı́neas siguientes (téngase cuidado de no cometer errores de escritura):
>> [x y ] = meshgrid(-8 : 0.5 : 8); <Enter>
>> r = sqrt(x.2 + y.2) + eps; <Enter>
>> z = sin(r) ./ r; <Enter>
>> mesh(z); <Enter>
Tipéese surf(z) para generar una vista de la superficie. surfc(z) o meshc(z) dibuja las curvas de
nivel en 2-D bajo la superficie. El comando
>> surf(z), shading flat ; <Enter>
produce una imagen quitando las lı́neas de la cuadrı́cula.

12. Si la PC tiene salida de audio puede tipearse


>> load handel; <Enter>
>> sound(y, Fs); <Enter>
de un fragmento del Hallelujah Chorus de Handel. Para algunos sonidos diferentes puede intentarse
chirp, gong, laughter, splat y train. En necesario tipear sound(y, Fs) para cada uno.

13. Puede mostrarse una vista de la Tierra desde el espacio, tipéese:


>> load earth; <Enter>
>> image(X); colormap(map) <Enter>
>> axis image; <Enter>

14. A continuación, pruébese why. ¿Por qué no? Inténtese why(2) por segunda vez. Por último, para ver el
código Matlab que hace esto, escriba el siguiente comando:
>> edit why; <Enter>
El comando de edición será utilizado para ilustrar la creación de un archivo .m como el why.m, que es
el nombre del archivo ejecutado por el comando why. Para crear un archivo .m se repasarán algunas de
las caracterı́sticas básicas de Matlab para la creación de programas en el entorno Matlab y se explicará
cuando se estudie el editor con más detalle.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 14

0.8

0.6

0.4

0.2

ï0.2

ï0.4
35
30
25 35
30
20 25
15 20
10 15
10
5
5
0 0

Figura 1.3: El sombrero mexicano.

3. E L ESCRITORIO DE Matlab
El escritorio por defecto Matlab se muestra en la Figura 1.1. Debe destacarse que Matlab tiene una
ayuda en lı́nea muy útil.

Para entrar en el Navegador de la ayuda (Help browser), haga clic en el botón de ayuda (?) en la barra
de herramientas de escritorio, o seleccione el menú help de cualquier herramienta. Después de haber
abierto el Navegador de ayuda, seleccione Contents en el panel Explorador de la Ayuda a la izquierda.

El escritorio contiene un gran número de herramientas. Ya se ha utilizado la ventana de comandos.


A la izquierda está el directorio actual, que comparte una posición con el navegador del Workspace.
Utilicése la tecla Tab para alternar entre la Directorio actual y el Workspace. Por debajo del directorio
actual se encuentra el historial de comandos.

Se puede cambiar el tamaño de cualquiera de estas ventanas de la forma habitual. Una ventana se puede
mover fuera del escritorio de Matlab por desacoplarla. Para ello deberá hacerse clic en la flecha en
la barra de tı́tulo de la ventana, o haciendo la ventana activa (haga clic en cualquier lugar dentro de la
misma) y luego seleccionando Undock el menú View.

Para acoplar una ventana de herramientas que está fuera del escritorio de Matlab (es decir, para mover
de nuevo en el escritorio), seleccione Dock en el menú View.

Se pueden agrupar ventanas que ocupen el mismo espacio en el escritorio de Matlab . El acceso a las
ventanas individuales es entonces por medio de sus pestañas. Para agrupar ventanas de esta manera
arrastre la barra de tı́tulo de una ventana en la parte superior de la barra de tı́tulo de la otra ventana. El
contorno de la ventana que está arrastrando se superpone a la ventana.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 15

Hay seis configuraciones predefinidas de Matlab de escritorio, que se pueden seleccionar desde el menú
View -> Desktop Layout.

4. E JEMPLO DE UN PROGRAMA
Al comienzo se vieron algunos ejemplos sencillos de cómo utilizar Matlab mediante la introducción de
comandos individuales o declaraciones en la ventana de comandos de Matlab . Sin embargo, es posible
que se desee resolver problemas que Matlab no puede hacer en una sola lı́nea, al igual que la búsqueda
de las raı́ces de una ecuación de segundo grado (teniendo todos los casos especiales en cuenta). Un
conjunto de instrucciones para resolver un problema de este tipo se llama un programa. Aquı́ se verá la
mecánica de la escritura y la ejecución de dos programas cortos, sin tener demasiado en cuenta de qué
manera funcionan.

4.1. C ORTAR Y P EGAR . Suponga que se desea dibujar la gráfica de e−0.2x sin x en el dominio de
0 a 6π, como se muestra en la Figura 1.4. El entorno Windows se presta para editar haciendo cortar
y pegar de manera ingeniosa, cosa que en general se domina. Para ello se procede de la siguiente manera.

Desde el escritorio de Matlab selecciónese File -> New -> M-file, o hágase clic en el botón new
file en la barra de herramientas de escritorio (también se puede escribir de edit en la ventana Co-
mando seguido de Enter). Esta acción abre una ventana sin tı́tulo en el Editor / Debugger. Puede
considerarse esto, por el momento como un “bloc de notas” en el cual es posible escribir programas.
Ahora tipéense las dos lı́neas siguientes en el Editor, exactamente como aparecen aquı́:

x = 0: pi/20: 6 * pi;
plot(x, exp(-0.2*x) .* sin(x), ’r’), grid;

Por cierto, esto es un punto antes del segundo * en la segunda lı́nea (una explicación más detallada se
dará luego). El argumento adicional ’r’ para plot dibuja la gráfica de color rojo, sólo para ser diferente.

A continuación, muévase el puntero del ratón (que ahora se ve como una I mayúscula muy delgada) a la
izquierda de la x en la primera lı́nea. Mantenga el botón izquierdo del ratón mientras mueve el puntero
del ratón hasta el final de la segunda lı́nea. Este proceso se denomina arrastre. Ambas lı́neas deben
destacarse en esta etapa, probablemente en azul, para indicar que se han seleccionado.
Selecciónese el menú Edit en la ventana del editor, y hágase clic en Copy (o simplemente utilı́cese
la combinación de teclas <Ctrl> + C). Esta acción copia el texto seleccionado al portapapeles.

Ahora vuélvase a la ventana de comandos. Asegúrese de que el cursor se coloque en el sı́mbolo >>
(Hágase click allı́ si fuera necesario). Selecciónese el menú Edit y hágase clic en Pegar (o utilı́cese la
combinación de teclas <Ctrl> + V). El contenido del portapapeles se copiará en la ventana de coman-
dos. Para ejecutar las dos lı́neas en el programa, pulse <Enter>. El gráfico debe aparecer en la ventana
gráfica.

Este proceso, a partir del resaltado (selección) del texto en el editor, para copiar en la ventana de co-
mandos, se llama “cortar y pegar”(más correctamente “copiar y pegar”aquı́, ya que el texto original se
copia desde el Editor, en lugar de de ser cortado de él). Vale bien la pena practicarlo.

Si es necesario corregir el programa, entonces se debe volver al Editor, hacer clic en la posición del
error, hacer la corrección, y cortar y pegar nuevamente. Como alternativa, se puede utilizar la edición
de lı́nea de comandos para corregir errores. Otra posibilidad es pegar desde la ventana del historial
de comandos Command History (la cual se remonta a muchas sesiones anteriores). Para seleccionar
varias lı́neas en la ventana del historial de comandos manténgase <Ctrl> mientras se hace clic.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 16

0.8

0.6

0.4

0.2

ï0.2

ï0.4
0 2 4 6 8 10 12 14 16 18 20

Figura 1.4: La función e−0.2 sin x

Si se prefiere, se pueden escribir varias lı́neas directamente en la ventana de comandos. Para evitar que
todo el grupo se ejecute hasta que haya introducido el último comando, utilı́cese <Shift> + <Enter>
o <Ctrl> + <Enter> después de tipear cada lı́nea hasta la última. A continuación, púlsese <Enter>
para ejecutar todas las lı́neas.

Como otro ejemplo, supóngase que se tienen 1.000 dólares guardados en el banco. El interés se capital-
iza a una tasa de 9 por ciento anual. ¿Cuál será el saldo bancario después de un año? Ahora, si se quiere
escribir un programa Matlab para encontrar su nuevo saldo, se debe ser capaz de hacer el problema por
sı́ mismo primero. Incluso con un problema relativamente simple como este, a menudo es útil escribir
primero un bosquejo del plan:

1. Obtener los datos (saldo inicial y tasas de interés) en Matlab .


2. Calcula el interés (9 por ciento de los 1.000 dólares, es decir, $90).

3. Añadir el interés al saldo ($90 + $1.000, es decir, $1.090).


4. Mostrar el nuevo saldo.

Regrésese al Editor. Para limpiar cualquier texto anterior, selecciónese como siempre arrastrando (o
úsese <Ctrl> + A), y pulse la tecla <Supr>. Por cierto, para anular la selección de texto resaltado,
hágase clic en cualquier lugar fuera del área de selección. Escriba el siguiente programa, y luego córtese
y péguese en la ventana de comandos:

saldo = 1000;
tasa = 0.09;
intereses = tasa * saldo;

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 17

saldo = saldo + intereses;


disp(’Nuevo saldo:’);
disp( saldo);

Al pulsar <Enter> para ejecutarlo, se debe obtener el siguiente resultado en la ventana de comandos:

Nuevo saldo:

1090

4.2. G UARDAR UN PROGRAMA : ARCHIVOS SCRIPT. Se ha visto cómo cortar y pegar entre el edi-
tor y la ventana de comandos con el fin de escribir y ejecutar programas de Matlab. Obviamente se
necesita guardar este programa si se desea volver a utilizarlo luego.

Para guardar el contenido del Editor, selecciónese File -> Save desde la barra de menú de Editor.
Aparecerá el cuadro de diálogo: Save file as:. Selecciónese un directorio y escriba un nombre de
archivo, el cual deberá tener la extensión .m, en el nombre de archivo: por ejemplo, junk.m. Hágase
clic en Save. La ventana Editor tiene ahora a junk.m. Si se realizan cambios posteriores a junk.m en
el Editor, aparecerá un asterisco junto a su nombre en la parte superior del Editor hasta que guarden los
cambios.

Un programa Matlab guardado en el Editor (o cualquier editor de texto ascii1 ) con la extensión .m se
llama un archivo script, o simplemente un script, (las funciones de Matlab también tienen la ex-
tensión m; por lo tanto Matlab se refiere tanto a los scripts o a las funciones en general, como archivos
con extensión .m). El significado especial de un archivo de comandos es que, si se introduce su nombre
en la lı́nea de comandos, Matlab lleva a cabo cada instrucción en el archivo script como si se introdujera
en el la ventana de comandos.

Las reglas para nombres de archivos son los mismas que para los nombres de variables.

A modo de ejemplo, guárdese el programa de interés compuesto anterior en un archivo de script con el
nombre compint.m. Entonces sólo tiene que introducir el nombre

compint

en la ventana de comandos (tan pronto como se pulse la tecla <Enter>). Las instrucciones de compint.m
se ejecutarán de la misma manera que si se las hubiera pegado en la ventana de comandos. Se ha creado
efectivamente un nuevo comando de Matlab, a saber, compint.

Un archivo script puede aparecer en la ventana de comandos con el comando type, por ejemplo:

type compint

(la extensión .m puede ser omitida).

Los archivos script proporcionan una forma útil de gestión de grandes programas que no necesariamente
se quieren pegar en la ventana de comandos cada vez que se ejecutan.

1 abreviatura de Código Estándar Americano para el Intercambio de Información (American Standard Code for Information

Interchange)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 18

5. D IRECTORIO ACTUAL
Cuando se ejecuta un script, tiene que asegurarse de que el directorio actual de Matlab (indicado en el
campo Current Directory a la derecha de la barra de herramientas de escritorio) se establece en el
directorio en el que se guarda la secuencia de comandos. Para cambiar el directorio actual, escrı́base la
ruta de acceso para el nuevo directorio en el campo Current Directory, selecciónese un directorio
en la lista desplegable de los directorios de trabajo anteriores, o hágase clic en el botón Browse (...) para
seleccionar un nuevo directorio .

El directorio actual también se puede cambiar de esta manera desde el navegador a partir de Current
Directory en el escritorio.

Se puuede cambiar el directorio actual de la lı́nea de comandos con el comando cd, por ejemplo:

cd /miscosas

El comando sólo devuelve el nombre del directorio actual.

6. M ÉTODO RECOMENDADO PARA EJECUTAR UN SCRIPT DESDE B ROWSER C URRENT D IREC -


TORY
Una manera práctica de ejecutar una secuencia de comandos es la siguiente. Selecciónese el archivo
en el Browser Current Directory. Hágase clic en él. Aparecerá el menú contextual. Selecciónese
Run en el menú contextual. Los resultados aparecerán en la ventana de comandos. Si se desea editar el
script, selecciónese Open en el menú contextual.

Para especificar los tipos de archivos que se muestran en el Browser Current Directory, utilı́cese
View -> Current Directory Filter. Por ejemplo, puede que se desee ver sólo los archivos .m.

Pueden ordenarse los archivos en el Browser Current Directory pulsando en el tı́tulo de la columna
file. Un clic permite el cambio del tipo, es decir, de ascendente a descendente o viceversa.

La sección de ayuda de un archivo .m aparece en el panel en la parte inferior del Browser Current
Directory.

Inténtese esto con un archivo .m en uno de los directorios de Matlab, por ejemplo, /toolbox/matlab/
elmat.

Una breve descripción de una lı́nea aparece en la columna derecha del Browser Current Directory
(puede que tenga que aumentar el tamaño de la ventana para ver todas las columnas).

6.1. C ÓMO UN PROGRAMA DE OBRAS . Ahora se va a discutir en detalle cómo funciona el pro-
grama de interés compuesto.

El sistema de Matlab se conoce técnicamente como un intérprete (en oposición a una compilador). Esto
significa que cada declaración presentada a la lı́nea de comandos se traduce (interpretado) a un lenguaje
de la computadora entienda mejor, y luego los realiza.

Un concepto fundamental en Matlab es cómo se almacenan los números en la memoria RAM de la


computadora (Random Access Memory). Si una instrucción de Matlab necesita almacenar un número,
el espacio en la memoria RAM se ha reservado para él. Se puede pensar en esta parte de la memoria
como un banco de cajas o posiciones de memoria, cada uno de los cuales puede contener sólo un número
a la vez. Estas posiciones de memoria se denominan con nombres simbólicos en los estados de Matlab.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 19

Ası́ que la instrucción:

saldo = 1000

asigna el número 1000 a la posición de memoria llamada saldo. El contenido de saldo se puede
cambiar durante una sesión, por esto es que se llama una variable. Por consiguiente, las declaraciones
contenidas en nuestro programa son interpretados por Matlab de la siguiente manera:
1. Ponga el número 1000 en la variable saldo.
2. Ponga el número 0.09 en la variable tasa.
3. Multiplı́quense los contenidos de tasa por los contenidos de saldo y guárdese la respuesta en intereses.
4. Añádase el contenido de saldo a los contenidos de intereses y guárdese la respuesta en saldo.
5. Muéstrese (en la ventana de comandos) el mensaje dado entre comillas simples.
6. Muéstrese el contenido de saldo.
No parece necesario insistir en esto, pero estas instrucciones interpretadas se llevan a cabo de arriba
hacia abajo. Cuando el programa termine de ejecutarse, las variables utilizadas tienen los siguientes
valores:

saldo: 1090

intereses: 90

tasa: 0.09

Téngase en cuenta que el valor original de saldo (1000) se pierde.

Inténtense lo siguiente:
1. Ejecútese el programa en su forma actual.
2. Cámbiese la primera instrucción del programa por
saldo = 2000;

Asegúrese de que se entiende lo que ocurre ahora, cuando el programa se ejecuta.


3. Déjese de lado la lı́nea
saldo = saldo + intereses;
y vuélvase a ejecutar. ¿Se puede explicar lo que sucede?
4. Inténtese volver a escribir el programa para que no se pierda el valor original de saldo.
Ahora uno puede hacerse una serie de preguntas, como por ejemplo:
+ ¿Qué nombres se pueden usar para las variables?
+ ¿Cómo se pueden representar los números?
+ ¿Qué sucede si una declaración no cabe en una sola lı́nea?
+ ¿Cómo podemos organizar el resultado más claramente?
Estas preguntas serán respondidas luego. Sin embargo, antes de escribir programas más completos hay
algunos conceptos básicos adicionales que deben ser introducidos. Estos conceptos son presentados en
el siguiente capı́tulo.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 20

R ESUMEN

Matlab es un sistema informático basado en manejo de matrices diseñado especialmente para la reso-
lución de problemas cientı́ficos y de ingenierı́a.

Para utilizar Matlab, que introducen las instrucciones y declaraciones en la ventana de comandos. Se
llevan a cabo de inmediato.

quit o exit termina Matlab .

clc limpia la ventana de comandos.

help y lookfor proporcionan ayuda.

plot realiza una gráfica en ejes x-y en una ventana gráfica.

grid dibuja una cuadrı́cula sobre la gráfica.

E JERCICIO
Dénse valores a las variables a y b en la lı́nea de comandos, por ejemplo, a = 3 y b = 5. Escrı́banse
algunas instrucciones para encontrar la suma, diferencia, producto y cociente de a y b.

2014 - O.R. FAURE


Capı́tulo 2

Fundamentos de Matlab

El objetivo de este capı́tulo es presentar algunos de los fundamentos de la programación en Matlab,


incluyendo:

+ variables, operadores y expresiones;


+ arrays (incluyendo vectores y matrices);
+ entrada y salida bsico;
+ repetición (for);
+ decisiones (if).

Las herramientas introducidas son suficientes para empezar a resolver numerosos problemas cientı́-
ficos y de ingenierı́a que pueden encontrarse habitualmente. Por lo tanto, la última parte de este capı́tulo
y en el cominezo del siguiente se describe un enfoque para diseñar razonablemente algunos programas
para desarrollar herramientas propias.

1. VARIABLES Y W ORKSPACE
1.1. VARIABLES . Las variables son fundamentales en la programación. En cierto sentido, el arte de
la programación es:

Obtener los valores correctos en las variables correctas en el momento adecuado.

Un nombre de la variable (como la variable saldo que se ha utilizado en anteriormente) debe cumplir
con las siguientes dos reglas:
1. Debe contener solamente letras a-z, los dı́gitos 0-9 y el guión bajo ( ).
2. Debe comenzar con una letra.
El nombre de una variable puede ser tan largo como se quiera, pero recuérdese que Matlab solamente
ve los primeros 31 caracteres.

Ejemplos de nombres de variables vĺidos: r2d2 dia de pago

Ejemplos de nombres no válidos (¿por qué?): dia de pago 2a nombre$ 2a

21
Matlab ESENCIAL PARA INGENIEROS 22

Una variable se crea de simplemente asignando un valor a la misma en la lı́nea de comandos o en un


programa, por ejemplo,

a = 98

Si se intenta hacer referencia a una variable inexistente se obtendrá el mensaje de error siguiente:

??? Undefined function or variable ...

La documentación oficial de Matlab se refiere a todas las variables como matrices, ya sean de un solo
valor (escalares) o (vectores o matrices) de varios valores. En otras palabras, un escalar es una matriz
de 1 x 1, es decir, una matriz con una sola fila y una sola columna que, por supuesto, es una matriz de
un solo elemento.

1.2. M AY ÚSCULAS Y M IN ÚSCULAS . Matlab distingue entre mayúsculas y minúsculas (case sen-
sitive en inglés). Ası́ que el SALDO, saldo y SaLdO son tres variables diferentes.

Muchos programadores escriben los nombres de variables en minúsculas a excepción de la letra inicial
de la segunda y siguientes palabras, si el nombre se compone de más de una palabra. Este estilo es cono-
cido como jorobas de camellos, las letras mayúsculas sin vistas como jorobas de un camello (con un
poco de imaginación). Por ejemplo, JorobasDeCamellos, MillenniumBug, DiaDeLaSemana. Otros
programadores prefieren separar las palabras con guiones bajos.

Los nombres de comandos y funciones estń también en mayúsculas y minúsculas. Sin embargo, se debe
tener en cuenta que cuando se utiliza la ayuda en lı́nea de Matlab, los nombres de funciones se dan en
mayúsculas, por ejemplo, CLC, únicamente para enfatizarlos. No se deben usar mayúsculas cuando se
ejecutan funciones y comandos!

1.3. E L WORKSPACE . Otro concepto fundamental en Matlab es el workspace (espacio de trabajo).


Tipéese el comando clear y ejecute el programa de interés compuesto nuevamente. Ahora introdúzcase
el comando who. Se verá entonces una lista de las variables de la siguiente manera:

Your variables are:

tasa interes saldo

Todas las variables que se crean durante una sesión permanecen en el workspace hasta que las borre. Se
pueden usar o cambiar sus valores en cualquier etapa durante la sesión. El comando who muestra los
nombres de todas las variables en su workspace. La función ans devuelve el valor de la última expresión
evaluada que no fue asignada a ninguna variable.
El comando whos muestra el tamaño de cada variable, esto es:

Name Size Bytes Class

interes 1x1 8 double array


saldo 1x1 8 double array
tasa 1x1 8 double array

Cada variable aquı́ ocupa ocho bytes de espacio almacenamiento. Un byte es la cantidad de memoria
del equipo requerido para un caracter (un byte es igual que ocho bits).

Estas variables tienen cada uno un tamaño de “1x1”, debido a que son escalares, a diferencia de vectores
o matrices (aunque como se mencionó anteriormente Matlab considera a todos como matrices de 1 x

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 23

1).

double significa que la variable contiene valores numéricos como de punto flotante en doble precisión.
El comando clear elimina todas las variables del workspace. Una variable particular puede ser elimi-
nada del workspace, por ejemplo, clear tasa.

También pueden borrarse varias variables a la vez, por ejemplo clear saldo tasa (separando los
nombres de variables con espacios, no con comas!).

Cuando se ejecuta un programa, las variables creadas por él permanecen en el workspace después de
que se ejecute. Esto significa que las variables existentes con los mismos nombres se sobreescriben.

El navegador del workspace en el escritorio proporciona una representación visual de éste. Puede ver
e incluso cambiar los valores de las variables del worspace con el editor de matrices. Para activar el
Array Editor, hágase clic en una variable en el navegador del workspace, o el botón derecho para
obtener un menú general.

1.4. AGREGAR EN EL WORKSPACE CONSTANTES UTILIZADAS FRECUENTEMENTE . Si se utilizan


a menudo las mismas constantes fı́sicas o matemáticas en las sesiones de Matlab , éstas pueden se
guardadas en un archivo .m y ejecutarse en el inicio de una sesión. Por ejemplo, las siguientes insatruc-
ciones podrı́an ser guardadas en myconst.m:

g = 9.8; % aceleracion de la gravedad


avo = 6.023e23; % numero de Avogadro
e = 2.718281828459045; % base de los logaritmos naturales
pi 4 = pi / 4;
log10e = log10 (e);
bar to kP = 101.325; % atmosferas a kiloPascales

Si se ejecuta myconst al inicio de una sesión estas seis variables serán parte del workspace y estarán
disponibles para el resto de la sesión, o hasta que las borre. Este enfoque para el uso de Matlab es
como un bloc de notas. A medida que crezca la su experiencia con esta, se podrán descubrir muchas
más utilidades y capacidades asociadas a este entorno computacional y analı́tico.

2. A RREGLOS : VECTORES Y MATRICES


Como se mencionó anteriormente, el nombre Matlab significa MATrix LABoratory porqueMatlab ha
sido diseñado para trabajar con matrices. Una matriz es un objeto rectangular (por ejemplo, una mesa)
que consta de filas y columnas. Se van a posponer por el momento la mayorı́a de los detalles con-
cernientes a matrices y de qué manera trabaja Matlab con ellos.

Un vector es un tipo especial de matriz, que tiene solamente una fila o una columna. Los vectores
también se denominan listas o arrays en otros lenguajes de programación. Si no se tiene aún una idea
cabal sobre vectores, sólo piénseselos como listas de números.

Matlab maneja vectores y matrices de la misma manera, pero como es más fácil pensar en vectores
que en matrices, se verá éstos primero. De esta manera mejorará la comprensión de otros aspectos
de Matlab . Como se mencionó anteriormente, Matlab se refiere a escalares, vectores y matrices
generalmente como arrays. También se va a utilizar el término array en general, y cuando se refiera al
vector o a la matriz se pensará en arrays unidimensionales (1-D) y o bidimensionales (2-D).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 24

2.1. I NICIALIZACI ÓN DE VECTORES : LISTAS EXPL ÍCITAS . Para comenzar, pruébese lo siguiente
en la lı́nea de comandos. Recuérdese que ésta es donde aoparece sı́mbolo >> , por lo que ya no será
escrito aquı́ a menos que contexto lo exija.
1. Escrı́base una declaración del tipo:

x = [1 0 -1 3 5]

¿Puede ver que se ha creado un vector (lista) con cinco elementos? (Asegúrese de dejar de lado
el punto y coma de manera que se puede ver la lista. Además, asegúrese de que pulsar <Enter>
para que se ejecute el comando.)
2. Introdúzcase el comando disp(x) para ver de qué manera Matlab muestra un vector.
3. Introdúzcase el comando whos (o búsquese en el navegador del workspace). Bajo el tı́tulo size
se verá que x es de 1 x 5, lo que significa 1 fila y 5 columnas. También se verá que el número
total de elementos es 5.
4. Es posible utilizar comas en lugar de espacios entre los elementos del vector, si se desea. Pruébese
con:

a = [5, 6, 7]

5. Es importante colocar las comas (o espacios) entre los elementos, de lo contrario podrı́a terminar
con algo muy diferente, por ejemplo:

x = [130-15]
¿Qués lo que ocurre?
6. Puede utilizarse un vector en una lista para generar otro, por ejemplo, escrı́base lo siguiente:

a = [1 2 3];
b = [5 4];
c = [a -b];
¿Es posible decir como será c antes de hacer el cálculo?
7. ¿Y qué ocurre con esto?

a = [1 3 7];
a = [a 0 -1];

8. Escrı́base lo siguiente:

x = [ ]
y luego verifı́quese en el navegador del workspace que el tamaño de x se da como resultado 0x0,
pues x está vacı́o. Esto significa x está definida, y puede utilizarse sin causar un error; sin em-
bargo, no tiene tamaño ni valor.

Hacer x vacı́a no es lo mismo que decir que x = 0 (en este último caso x tiene un tamaño de
1x1), o clear x (que elimina a x del workspace, por lo que esta indefinida).

Una matriz vacı́a se puede utilizar para eliminar elementos de otra matriz.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 25

Todos estos son ejemplos de métodos explı́citos para inicializar vectores. Recuérdense las siguientes
reglas importantes:
+ Los elementos de una lista deben encerrarse entre corchetes no paréntesis.
+ Los elementos de una lista deben separarse ya sea por espacios o por comas.
2.2. I NICIALIZACI ÓN DE VECTORES : EL OPERADOR DOS PUNTOS . Un vector también se puede
generar (inicializar) con el operador dos puntos, como ya se ha visto en anteriormente. Introdúzcanse
las siguientes declaraciones:

x = 1:10

(los elementos son los enteros 1, 2, ..., 10);

x = 1: 0.5: 4

(elementos son los valores 1, 1.5, ..., 4 en incrementos de 0.5. Nótese que si los dos puntos sep-
aran tres valores, el valor del medio es el incremento);

x = 10: -1: 1

(los elementos son los enteros 10, 9, ..., 1, ya que el incremento es negativo);

x = 1: 2: 6

(los elementos son 1, 3, 5; nótese que cuando el incremento es positivo, pero no es igual a 1, el último
elemento no excede el valor del número que aparece despu’es de los segundos dos puntos);

x = 0: -2: -5
(los elementos son 0, -2, -4; téngase en en cuenta aquı́ que cuando el incremento es negativo, pero
no es igual a -1, el último elemento no es menor que el valor del número que aparece luego de los
segundos dos puntos);

x = 1: 0

(una manera complicada de generar un vector vacı́o!).

2.3. linspace. La función linspace puede utilizarse para inicializar un vector de valores igual-
mente espaciados, por ejemplo:

linspace (0, pi/2, 10)

crea un vector de 10 puntos equidistantes entre 0 y π/2 (ambos inclusive).

2.4. T RASPUESTA DE VECTORES . Todos los vectores examinados hasta ahora son vectores fila.
Cada uno tiene una fila y varias columnas. Para generar los vectores columna que a menudo son nece-
sarios en matemáticas, es necesario trasponer dichos vectores, es decir, se necesita intercambiar filas por
columnas. Esto se hace con la comilla simple o apóstrofe (’).
Ingrésese x = 1: 5 y luego x’ para mostrar la transpuesta de x. Téngase en cuenta que x en si sigue
siendo un vector de fila.

También se puede crear un vector columna directamente:

y = [1 4 8 0 -1]’.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 26

2.5. S UB ÍNDICES . Es posible referirse a los elementos particulares de un vector por medio de
subı́ndices. Pruébese lo siguiente:
1. Introdúzcase r = rand (1,7).
Esto da un vector fila de siete números al azar.
2. Ahora ingrésese r(3).
Esto mostrará el tercer elemento de r. El número 3 es el subı́ndice.
3. Ahora escrı́base r(2: 4).
Esto debe darle el segundo, tercer y cuarto elementos.
4. ¿Quṕasa con r(1: 2: 7)?
5. ¿Y r([1 7 2 6])?
6. Puede utilizarse un vector vacı́o para eliminar los elementos de otro, por ejemplo:
r ([1 7 2]) = []
eliminarélementos en las posiciones 1, 7 y 2.
Resumiendo:
+ Un subı́ndice se indica entre paréntesis.
+ Los subı́ndices pueden ser escalares o vectores.
+ En Matlab los subı́ndices siempre empiezan en 1.
+ Los subı́ndices fraccionarios se redondean hacia abajo, por ejemplo, x(1.9) se refiere al elemento
x(1).

2.6. M ATRICES . Una matriz puede ser pensada como una tabla que consta de filas y columnas. Se
crea una matriz tal como se hace con un vector, excepto que se utiliza un punto y coma para indicar el
final de una fila, por ejemplo, la instrucción:

a = [1 2 3; 4 5 6]

da como resultado

a =

1 2 3
4 5 6

Una matriz puede ser traspuesta, por ejemplo, para la matriz a inicializada arriba, la instrucción a’ da
como resultado:

a =

1 4
2 5
3 6

Una matriz puede construirse a partir de vectores columna de la misma longitud. Las declaraciones:

x = 0: 30: 180;
tabla = [x’ sin (x * pi / 180)’]

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 27

proporcionan:

tabla =

0 0
30.0000 0.5000
60.0000 0.8660
90.0000 1.0000
120.0000 0.8660
150.0000 0.5000
180.0000 0.0000

2.7. C APTURA DE SALIDAS . Se pueden utilizar las técnicas de cortar y pegar para poner en orden
la salida de Matlab, si esto es necesario para algn tipo de presentación. Para generar la tabla de ángulos
y senos como se muestra arriba, selecciónense las siete filas de salida numérica en la ventana de co-
mandos, cópiese la salida seleccionada en el Editor. A continuación, pueden editarse los resultados, por
ejemplo, mediante la insercióón de encabezados de texto en cada columna (esto es más fcil que tratar de
poner los tt́ulos sobre las columnas con la instrucción disp). La salida editada a su vez puede ser pegada
en un informe, o imprimirse tal como está (en el menú File se tiene una serie de opciones de impresión).

Otra forma de capturar las salidas es mediante el comando diary. El comando

diary NombreDeArchivo

copia en el archivo NombreDeArchivo todo lo que aparece a partir de ese momento en la ventana de co-
mandos. A continuación, puede editarse el archivo resultante con cualquier editor de texto (incluyendo
el Editor de MATLAB). Pra detener la grabación de la sesión se debe tipear:

diario off

Téngase en cuenta que diary añade material a un archivo existente, es decir, añade información nueva
al final de ese archivo.

3. M OVIMIENTO VERTICAL POR GRAVEDAD


Si se lanza una piedra verticalmente hacia arriba con una velocidad inicial u, su desplazamiento vertical
s después de que haya transcurrido un tiempo t está dado por la fórmula s = ut − gt 2 /2, donde g es la
aceleración de la gravedad, donde se ha ignorado la resistencia del aire. Se quiere calcular el valor de
s en un perı́odo de 12.3 segundos en intervalos de 0.1 segundos, y trazar una grf́ica distancia-tiempo
durante este perı́odo, como se muestra en la Figura 2.1.
El plan de estructura para este problema es la siguiente:

1. % Asignenar los datos (g, U y T ) a las variables de Matlab.


2. % Calcular el valor de s de acuerdo con la fórmula.
3. % Trazar la gráfica de s versus t.

4. % Parar.
Este plan puede parecer trivial, y una pérdida de tiempo escribirlo. Sin embargo, es sorprendente
cómo muchos principiantes, van directamente a la computadora, y comienzan con el Paso 2. Vale la

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 28

Movimiento vertical por gravedad


200

desplazamiento vertical 150

100

50

ï50
0 2 4 6 8 10 12 14
tiempo

Figura 2.1: Gráfica distancia-tiempo de una piedra lanzada verticalmente hacia arriba

pena desarrollar la estructura de la planificación de un programa desde el inicio. Incluso se puede


utilizar copiar y pegar para planificar de la siguiente manera:
1. Escrı́base el plan de estructura en el Editor (cada lńea precedida por % como se muestra arriba).
2. Péguese una segunda copia del plan directamente debajo de la primera.
3. Tradúzcase cada lı́nea de la segunda copia en una instrucción de Matlab, o varias intrucciones.
Añádase % y luego los comentarios como en el ejemplo dado a continuación).
4. Por último, péguense todos las instrucciones de Matlab en la Ventana de Comando y ejecútense.
5. Si fuera necesario, vuélvase al Editor para hacer correcciones y péguense éstas en la ventana de
comandos (o guárdese el programa en el Editor como un archivo .m y ejecúteselo).
Puede intentarse esto como un ejercicio, antes de ver el programa final, que es el siguiente:

% Movimiento vertical debido a la gravedad


g = 9.8; % Aceleracion de la gravedad
u = 60; % Velocidad inicial (m / seg)
t = 0: 0.1: 12.3; % Tiempo en segundos
s = u * t - g / 2 * t.ˆ2; % Desplazamiento vertical en metros
plot (t, s), title(’Movimiento vertical por gravedad’), ...
xlabel (’tiempo’), ylabel (’desplazamiento vertical’), grid
disp([t ’s’]) % Muestra la tabla

La salida gráfica se muestra en la Figura 2.1.

Ténganse en cuenta los siguientes puntos:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 29

+ Cualquier cosa en una lńea a la derecha del sḿbolo de porcentaje % es ignorada por Matlab y
puede ser utilizada como un comentario (descripción).
+ La instrucción t = 0: 0.1: 12.3 inicializa un vector.

+ La fórmula para s se evalúa para cada elemento del vector t, por lo que proporciona otro vector.
+ La expresión t. ˆ 2 eleva al cuadrado cada elemento de t. Esto se conoce como una operación
matricial, y es diferente al cuadrado del vector en sı́, que es una operación, como se verá más
adelante.
+ En una misma lı́nea de puede introducir más de una declaración, si éstas se separan por comas.

+ Una instrucción o grupo de instrucciones se pueden continuar en la siguiente lı́nea colocando tres
o más puntos ...
+ El comando disp([t ’s’]) transpone primero los vectores fila t y s en columnas, y construye
una matriz de estas dos columnas, que se visualiza a continuación.

Es posible que se desee guardar el programa con un nombre útil, como caida.m si se piensa que puede
volver a utilizarse. En ese caso, vale la pena mantener el plan como parte del archivo; basta con insertar
sı́mbolos % frente a cada lı́nea del plan. De esta manera, el plan recordará lo que hace el programa
cuando se lo mire otra vez luego de algún tiempo. Recuérdese que es posible utilizar el menú en el
Editor de Comment/Uncomment en un bloque de texto seleccionado.

4. O PERADORES , EXPRESIONES E INSTRUCCIONES


Cualquier programa que se precie realmente de tal hace algo. Lo que hace básicamente es evaluar ex-
presiones, tales como:

u * t - g/2*t. ˆ 2

y ejecutar (llevar a cabo) las instrucciones, tales como

saldo = saldo + interes

Matlab ha sido descrito como “un lenguaje basado en la expresióón. Interpreta y evalúa las expresiones
tipeadas.”Las expresiones se construyen a partir de una variedad de cosas, como números, variables y
operadores. Ahora se verán los números.

4.1. N ÚMEROS . Los números pueden ser representados en Matlab en la forma decimal usual (punto
fijo), con un punto decimal opcional, por ejemplo:

1.2345 -123 .0001


Un número también puede representarse en notación cientı́fica, por ejemplo el número 1.2345 × 109
se puede representar como 1.2345e9. Esto también se llama notación de punto flotante. El número
tiene dos partes: la mantisa, que puede tener un punto decimal opcional (1.2345 en este ejemplo) y
el exponente (9), que debe ser un número entero (con o sin signo). Mantisa y exponente deben estar
separados por la letra e (o E). La mantisa se ??multiplica por la potencia de 10 indicada por el exponente.

Téngase en cuenta que lo siguiente no es la notación cientı́fica: 1.2345*10 ˆ9. En realidad, es una ex-
presión que implica dos operaciones aritméticas (* y ˆ ) y por lo tanto tarda más tiempo.

La utilización la notación cientı́fica es mucho más segura, pues si los números son muy pequeños o muy
grandes, hay menos posibilidades de cometer errores, por ejemplo, representar 0.000000001 como

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 30

1e-9.

En las computadoras que utilizan aritmética estándar de punto flotante, los números se representan
aproximadamente con 16 dı́gitos decimales significativos. La precisión relativa de los números está
dada por la función eps, que se define como la distancia entre el 1.0 y el número de punto flotante
siguiente mayor a éste. Ingrésese eps para ver su valor en su máquina.

El rango de números es aproximadamente ±10308 a ±10308 . Valores precisos para cada máquina son
devueltos por Matlab dediante las funciones realmin y realmax.

E JERCICIOS
Escrı́banse los siguientes números en la lı́nea de comandos en notación cientı́fica:

1. 1.234 × 105 , 3. 10−15 ,


2. −8.765 × 10−4 , 4. −1012 .

4.2. T IPOS DE DATOS . Matlab dispone de 14 tipos de datos fundamentales (o clases). El tipo de
datos numérico predeterminado es de doble precisión; todos los cálculos se hacen en Matlab en doble
precisión. Más información sobre los tipos de datos puede encontrarse en la ayuda (help).

Matlab también soprta y tipo de datos enteros con y sin signo y de punto flotante de simple precisión,
mediante funciones tales como int8, uint8, single, etc.

Sin embargo, antes de que las operaciones matemáticas pueden realizarse, dichos tipos de datos deben
ser convertidos primero de doble precisión utilizando la función double.

O PERACI ÓN F ORMA A LGEBRAICA Matlab


Suma a+b a + b
Resta a−b a - b
Multiplicación a×b a * b
División a Derecha a/b a / b
División a Izquierda b/a a \ b
Potenciación ab aˆb

Tabla 2.1: Operaciones Aritméticas entre dos escalares

4.3. O PERADORES ARITM ÉTICOS . La evaluación de las expresiones se consigue por medio de op-
eradores aritméticos. Las operaciones aritméticas sobre dos constantes o variables escalares se muestran
en la Tabla 2.1.

La división a izquierda parece un poco curiosa: divide el operando de la derecha por el operando de
la izquierda. Para operandos escalares las expresiones 1/3 y 3n1 tienen el mismo valor numérico. Sin
embargo, la división a izquierda de matrices tiene un significado completamente diferente, como se verá
más adelante.

4.4. J ERARQU ÍA DE OPERADORES . Varias operaciones pueden ser combinanadas en una expresión,
por ejemplo, g * t ˆ 2. Matlab tiene reglas estrictas acerca de que operaciones realizan primero en
este tipo de casos; éstos se llaman reglas de jerqrquı́a. Las reglas de jerarquı́a para los operadores de
la Tabla 2.1 se muestran en la Tabla 2.2. Téngase en cuenta que los paréntesis tienen la más alta prio-
ridad. También nótese la diferencia entre paréntesis y corchetes. Los paréntesis se utilizan para alterar

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 31

las prioridades de los operadores, y para denotar subı́ndices, mientras que los corchetes se utilizan para
crear vectores.

Cuando los operadores en una expresión tienen la misma prioridad las operaciones se llevan a cabo de
izquierda a derecha. Ası́ que a / b * c se evalúa como (a / b) * c y no como a / (b * c).

P RIORIDAD O PERADOR
1 Paréntesis
2 Potencia, derecha a izquierda)
3 Multiplicación y división, izquierda a derecha
4 Suma y resta, izquierda a derecha

Tabla 2.2: Prioridades de las operaciones aritméticas

E JERCICIOS
1. Evalúense las siguientes expresiones en Matlab antes de comprobar las respuestas:

(a) 1 + 2 * 3 (e) 2 * 2 ˆ 3
(b) 4 / 2 * 2 (f) 2 * 3 \3
(c) 1 + 2 / 4 (g) 2 ˆ (1 + 2) / 3
(d) 1 + 2 \4 (h) 1 / 2e-1

2. Utı́licese Matlab para evaluar las siguientes expresiones:


1
(a)
2×3
(b) 22×3
(c) 1.5 × 10−4 + 2.5 × 10−2

4.5. E L OPERADOR DOS PUNTOS . El operador dos puntos (:) no tiene una prioridad sobre el ope-
rador + como se puede ver en el siguiente ejemplo:

1 + 1:5

La adición se lleva a cabo en primer lugar, y luego se inicializa el vector con los elementos 2,...,5.

Puede ser llamativo lo siguiente:

1 + [1:5]

¿Lo es? El valor 1 se añade a cada elemento del vector 1:5. En este contexto, la adición se denomina
una operación matricial, porque opera en cada elemento del vector (array). Las operaciones matriciales
se discutirán a continuación.

4.6. EL OPERADOR TRASPUESTA . El operador de transposición tiene la más alta prioridad. Pruébese

1:5’

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 32

O PERADOR D ESCRIPCI ÓN


.* Multiplicación
./ División a derecha
.\ División a izquierda
.ˆ Potenciación

Tabla 2.3: Operadores aritméticos que trabajan elemento a elemento

El 5 se transpone primero (es él mismo, ya que es un escalar!), y luego se forma un vector fila. Utilı́cense
los corchetes si desea transponer todo el vector:

[1:5]’

4.7. O PERACIONES ARITM ÉTICAS CON ARREGLOS . Introdúzcanse las siguientes instrucciones en
la lı́nea de comandos:

a = [2 4 8];
b = [3 2 2];
a .* b
a .\ b

Matlab tiene además cuatro operadores aritméticos, como se muestra en la Tabla 2.3. Estos operadores
trabajan con matrices de las mismas dimensiones ejecutando las operaciones elemento a elemento.
Las operaciones son llamadas operaciones elemento a elemento. Por ejemplo, a.*b da como resultado
el siguiente vector (llamado en algunos textos el producto array):

[a(1)*b(1) a(2)*b(2) a(3)*b(3)]

es decir, [6 8 10].
Es fácil ver que a./b es la división elemento a elemento.

Ahora inténtese [2 3 4].ˆ [4 3 1]. El i-ésimo elemento del primer vector se eleva a la potencia del
elemento de orden i del segundo vector.

El punto es necesario para las operaciones elemento a elemento de multiplicación, división y exponen-
ciación, pues estas operaciones se definen de manera diferente para matrices.

Con a y b definidas anteriormente, pruébese a + b y a - b. Para la suma y resta, operaciones ele-


mento a elemento y las operaciones matriciales usuales son iguales, por lo que no necesitan el punto de
distinguir entre ellas.

Cuando las operaciones elemento a elemento se aplican a dos vectores, éstos deben ser del mismo
tamaño!

Operaciones elemento a elemento también se aplican a las operaciones entre un escalar y un no escalar.
Comprueba esto con 3.* a y a.ˆ2. Esta propiedad es llamada expansión escalar. Operaciones de multi-
plicación y división entre escalares y no escalares se pueden escribir con o sin el punto, es decir, si a es
un vector, 3 .*a es lo mismo que 3 * a.

Una aplicación habitual de la multiplicación elemento a elemento es encontrar el producto escalar

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 33

(también llamado el producto punto) de dos vectores x e y, el cual está definido como

x · y = ∑ x` y`
`

La función de Matlab sum(z) encuentra la suma de los elementos del vector z, por lo que la instrucción
sum(a .* b) encuentra el producto escalar de a y b (igual a 30 para a y b definidos anteriormente).

E JERCICIOS
Utilı́cense las operaciones elemento a elemento de Matlab para hacer lo siguiente:
1. Añadir 1 a cada elemento del vector [2 3 -1].
2. Multiplicar cada elemento del vector [1 4 8] por 3.

3. Encontrar el vector producto de los dos vectores [1 2 3] y [0 -1 1].


4. Encontrar el cuadrado de cada elemento del vector [1 2 3].

4.8. E XPRESIONES . Una expresión es una fórmula que consiste de variables, números, operadores,
y nombres de funciones. Una expresión se evalúa al ingresarla en la ventana de comando de Matlab ,
por ejemplo, evaluar 2π como sigue:

2 * pi

La respuesta de Matlab es:

ans =

6.2832

Téngase en cuenta que Matlab utiliza la función ans (acrónimo de answer) para devolver la última
expresión que ha sido evaluada, pero no asignada a una variable.

Si una expresión termina con un punto y coma (;) su valor no se muestra, a pesar de que es almacenado
en ans.

4.9. I NSTRUCCIONES . Las instrucciones en Matlab son por lo general de la forma:

variable = expresion

por ejemplo,

s = u * t - g / 2 * t.ˆ 2;

Este es un ejemplo de una instrucción de asignación, debido a que el valor de la expresión de la derecha
se asigna a la variable (s) a la izquierda. Las asignaciones siempre trabajan de esta manera (de derecha
a izquierda).

Téngase en cuenta que el objeto en el lado izquierdo de la asignación debe ser un nombre de variable.
Un error habitual es realizar la declaración de al revés, como:

a + b = c

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 34

Básicamente cualquier lı́nea que introduzca en la ventana de comandos o en un programa, que Matlab
acepta, es una instrucción, por lo que ésta podrı́a ser una asignación, un comando, o simplemente una
expresión, por ejemplo:
x = 29; % asignacion
clear % comando
pi/2 % expresion

Esta convención de nomenclatura está en consonancia con la mayorı́a de los lenguajes de programación
y sirve para enfatizar los diferentes tipos de declaraciones que se encuentran en programación. Sin em-
bargo, la documentación de Matlab tiende a referirse a todos ellos como “funciones”.

Como se ha visto, un punto y coma al final de una asignación o expresión suprime cualquier salida.
Esto es útil para suprimir la producción, a veces irritante, de los resultados intermedios (o de matrices
grandes).

Una instrucción que es demasiado larga para caber en una sola lı́nea se puede continuar en la siguiente
colocando puntos suspensivos (al menos tres), por ejemplo

x = 3 * 4 - 8 ...
/ 2 ˆ 2;

Instrucciones en una misma lı́nea pueden separarse por comas (salida no suprimida) o por punto y coma
(salida suprimida), por ejemplo,

a = 2; b = 3, c = 4;

Téngase en cuenta que las comas y puntos y comas no son técnicamente parte de las instrucciones; son
solamente separadores.

Las declaraciones pueden involucrar operaciones elemento a elemento, en cuyo caso la variable en el
lado izquierdo puede convertirse en un vector o matriz.

4.10. I NSTRUCCIONES , COMANDOS Y FUNCIONES . La distinción entre asignaciones, comandos


y funciones puede ser un poco confusa, ya que todos se pueden introducir en la lı́nea de comandos.
Sin embargo, es útil pensar en comandos como el cambio del medio ambiente en general, de alguna
manera, por ejemplo, cargar, guardar y borrar. Las instrucciones son el tipo de cosas que normalmente
asociamos con la programación, tales como la evaluación de las expresiones y la realización de tareas,
la toma de decisiones (if), y la repetición de (for). Las funciones devuelven los valores calculados o
realizan alguna operación en los datos, por ejemplo, sin, plot.

4.11. V ECTORIZACI ÓN DE F ÓRMULAS . Con las operaciones elemento a elemento se puede evaluar
fácilmente una fórmula repetida para un gran conjunto de datos. Ésta es una de las caracterı́sticas más
útiles y potentes de Matlab, y siempre se debe buscar la manera de poder explotarla.

Considérese, como ejemplo, el cálculo del interés compuesto. Una cantidad de dinero invertido A lo
largo de un perı́odo de n años con una tasa de interés anual del r crece a una cantidad A(1 + r)n .
Supóngase que se quiere calcular los saldos finales de las inversiones de $ 750, $ 1000, $ 3000, $ 5000
y $ 11999, a lo largo de 10 aos, con una tasa de interés del 9 por ciento. El siguiente programa (comp.m)
utiliza operaciones elemento a elemento sobre el vector de las inversiones iniciales para hacer eso.

format bank
A = [750 1000 3000 5000 11999];

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 35

r = 0.09;
n = 10;
B = A * (1 + r)ˆ n;
disp ([A’ B’])

Salida:
750.00 1775.52
1000.00 2367.63
3000.00 7102.09
5000.00 11836.82
11999.00 28406.00

C OMETARIOS :
1. En la instrucción B = A * (1 + r) ˆ n, la expresión (1 + r) ˆ n se evalúa primero, porque la
exponenciación tiene una prioridad más alta que la multiplicación.
2. Después cada elemento del vector A se multiplica por el escalar (1 + r) ˆ n.
3. El operador * se puede utilizar en lugar de .*, pues la multiplicación es entre un escalar y un no
escalar (aunque .* no causarı́a un error porque un escalar es un caso especial de una matriz).
4. Se muestra una tabla con columnas dadas por las transpuestas de A y B.
Este proceso se llama vectorización de una fórmula. La operación en la declaración descrita en el punto
1 es tal que cada elemento en el vector B se determina mediante una operación en cada elemento del
vector A todos a la vez mediante la interpretación de una sola lı́nea de comandos.

Véase si es posible ajustar comp.m para encontrar los saldos por un importe único A ($ 1000) en perı́odos
de 1, 5, 10, 15 y 20 añoos. S UGERENCIA: Utilı́cese un vector para n: [1 5 10 15 20].

I MPORTANTE
Se ha visto que muchos cometen el error siguiente. Ejecutan el programa comp.m, y luego tipean la
siguiente instrucción:

A (1 + r) ˆ n

en la ventana de comandos. La salida tiene una advertencia seguida por un escalar:

Warning: Subscript indices must be integer values.

ans =

5.6314e+028

¿Alguna idea? Bueno, el error básico es que falta el sı́mbolo de multiplicación * después de la A. Sin
embargo, Matlab todavı́a da resultado! Esto es porque hay algo entre paréntesis después de A, esto
significa que es el elemento de un vector, en este caso el elemento número (1 + r), que se redondea
a 1, puesto que r tiene el valor 0.09 (los subı́ndices fraccionarios siempre se redondean hacia abajo).
A(1) tiene el valor 750, de modo que Matlab calcula 75010 .

Lo curioso es que la misma respuesta incorrecta se da incluso si A es un escalar, por ejemplo, A = 750,
pues Matlab trata a un escalar como una matriz de uno por uno (como puede verse utilizando whos).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 36

La conclusión es que se debe desarrollar la filosofı́a de Matlab de considerar todas las variables como
matrices.

E JERCICIOS
1. Evalúense las siguientes expresiones de Matlab (a mano y recién después compruébense en la
máquina!).

(a) 2/2 * 3 (d) 2 + 3 * 4 - 4 (g) 2 * 3 + 4


(b) 2/3 ˆ 2 (e) 2 ˆ 2 * 3/4 + 3 (h) 2 ˆ 3 ˆ 2
(c) (2/3) ˆ 2 (f) 2 ˆ (2 * 3)/(4 + 3) (i) -4 ˆ 2

2. Utilı́cese Matlab para evaluar las siguientes expresiones.



(a) 2
3+4
(b)
5+6
(c) Encuéntrese la suma de 5 y 3 dividido su producto
2
(d) 23
(e) Encuéntrese el cuadrado de 2π
(f) 2π 2

(g) 1/ 2π
1
(h) √
2 π
(i) Encuéntrese la raı́z cúbica del producto de 2.3 y 4.5
2
1 − 3+2
(j) 2
1 + 3−2
(k) 1000(1 + 0.15/12)60
(l) (0.0000123 + 5.678 × 10−3 ) × 0.4567 × 10−4

3. Quı́tense los paréntesis innecesarios en la siguiente expresión:

(2 (3 + 4) / (5 * (6 + 1)) ˆ 2

El editor de Matlab tiene dos maneras interesantes de lidiar con el problema de los “delimitadores
desbalanceados”(que sin dudas se conoce si se ha estado trabajando a travs de Help!):
+ Cuando se escribe un delimitador de cierre, es decir, un parétesis derecho ), un corchete
derecho ] ó una llave derecha }, su delimitador de apertura coincidente es brevemente re-
saltado. De esta manera, si no se ve el resaltado al escribir un delimitador derecho inmedi-
atamente se sabe que hay algo que está de más.
+ Al colocar el cursor en cualquier lugar dentro de un par de delimitadores y selecciona Text
-> Balance Delimiters (o presionando <Ctrl> + B) los caracteres dentro del par de
delimitadores son resaltados.
4. Créese un vector n con los elementos 1, 2, 3, 4, 5. Mediante operaciones en Matlab sobre
el vector n genérense los cuatro vectores siguientes, cada uno con cinco elementos:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 37

(a) 2, 4, 6, 8, 10 (c) 1, 1/2, 1/3, 1/4, 1/5


(b) 1/2, 1, 3/2, 2, 5/2 (d) 1, 1/22 , 1/32 , 1/42 , 1/52

5. Supóngase que a y b se definen como sigue:

a = [2 0 -1 5];
b = [2 3 4 -1];

Evalúese a mano el vector c bajo las siguientes declaraciones. Compruénbe las respuestas con
Matlab .

(a) c = a - b; (d) c = b ./ a; (g) c = 2 .ˆ b + a;


(b) c = b + a - 3; (e) c = b .\ a; (h) c = 2 * b/3 .* a;
(c) c = 2 * a + a .ˆ b; (f) c = a .ˆ b; (i) c = b*2 .* a;

6. El agua se congela a 32 ◦ F e hierve a 212 ◦ F (i.e. en la escala Fahrenheit). Si C y F son


temperaturas Celsius y Fahrenheit respectivamente, la fórmula
9
F = C + 32
5
convierte temperaturas Celsius a Fahrenheit.
Utilı́cese la lı́nea de comandos de Matlab para convertir una temperatura de 37 ◦ C (temperatura
normal de un ser humano) a Fahrenheit.
7. Los ingenieros a menudo tienen que convertir magnitudes de una unidad de medida a otra; esto a
veces puede ser dificultoso. Es necesario pensar el proceso cuidadosamente. Por ejemplo, conver-
tir 5 acres a hectáreas, dado que un acre son 4840 metros cuadrados, una yarda son 36 pulgadas,
una pulgada son 2.54 cm, y una hectárea son 10000 m2 . El mejor enfoque consiste en desarrollar
una fórmula para convertir x acres a hectáreas. Se puede hacer esto de la siguiente manera:

una yarda cuadrada = (36 × 2.54)2 cm2


entonces un acre = 4840 × (36 × 2.54)2 cm2
= 0.4047 × 108 cm2
= 0.4047 hectáreas
y por lo tanto x hectáreas = 0.4047x hectáreas
Una vez que se haya encontrado la fórmula (pero no antes de hacerlo), Matlab puede hacer el
resto:

x = 5; % acres
h = 0.4047 * x; % hectareas
disp(h)

8. Desarróllense fórmulas para las siguientes conversiones, y utilı́sense declaraciones en Matlab


para encontrar las respuestas.
(a) Conviértanse 22 yardas (un campo de cricket imperial) a metros.
(b) Una libra (peso) = 454 gramos. Conviértanse 75 kilogramos a libras.
(c) Conviértanse 49 metros / segundo (velocidad terminal de un objeto en forma persona en
caı́da) a km / hora.
(d) Una atmósfera de presión = 14.7 libras por pulgada cuadrada (psi) = 101325 kiloPascales
(kPa). Conviértanse 40 psi a kPa.
(e) Una calorı́a = 4184 joules. Convertir 6.25 kilojoules a calorı́as.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 38

5. S ALIDAS
Hay dos maneras sencillas de obtener la salida de MATLAB:
1. Mediante la introducción de un nombre de variable, asignación o expresión en la lı́nea de coman-
dos, sin un punto y coma;
2. A través de la instrucción disp, por ejemplo, disp(x).

5.1. disp. La forma general de disp para una variable numérica es:

disp(variable)

Cuando se utiliza disp, el nombre de la variable no se visualiza, y no se hace un salto de lı́nea antes de
mostrar el valor, como se hace cuando se introduce un nombre de variable en la lı́nea de comandos sin
utilizar el punto y coma. disp generalmente permite una visualización más clara.

También puede utilizar disp para mostrar un mensaje entre comillas simples (llamado un string). Las
comillas simples que son parte del mensaje se deben repetir, por ejemplo:

disp( ’Pilate said, ’’What is truth?’’’ );

Para mostrar un mensaje y un valor numérico en la misma lı́nea utiliza lo siguiente:

x = 2;
disp( [’La respuesta es ’, num2str(x)] );

La salida deberı́a ser:

La respuesta es 2

Los corchetes crean un vector, como ya se ha visto. Si se quiere mostrar un string, se la crea, es decir, se
escribimos un mensaje entre apóstrofes (o comillas simples). Esto se ha hecho ya en el ejemplo anterior
mediante la definición del string ’La respuesta es ’. Téngase en cuenta que el último espacio antes
del segundo apóstrofe es parte del string. Pero todos los componentes de una matriz Matlab deben ser
números o strings. Ası́ que se convertirá el nḿero x a su representaciń string por medio de la función
num2str; (léase esto como ’number to string’.
Puede mostrarse más de un número en una misma lı́nea de la siguiente manera:

disp ([x y z])

Los corchetes crean un vector con tres elementos, los cuales son mostrados.

El comando more on la paginación de la salida. Esto es muy útil cuando se muestran grandes matrices,
por ejemplo, rand(100000, 7). Ver help more para más detalles. Si se olvida de poner more en on
antes de mostrar una matriz muy grande puede detenerse la pantalla pulsando <Ctrl> + <Break> ó
<Ctrl> + <C>.

5.2. format. La palabra formato se refiere a cómo se presenta algo: en este caso, la salida de
Matlab. Para empezar, Matlab tiene las siguientes dos reglas básicas para las salidas:
1. Siempre se muestra enteros (números enteros) exactamente. Sin embargo, si el nḿero entero es
demasiado grande, se muestra en notación cientı́fica con cinco dı́ı́gitos significativos, por ejem-
plo, 1234567890 se muestra como 1.2346e+009 (es decir, 1.2346 x 109 ). Verifı́quese ésto
introduciendo primero 123456789 en la lı́nea de comandos, y luego 1234567890.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 39

2. Los números con partes decimales se muestran con cuatro dǵitos significativos. Si el valor de
x está en el intervalo de 0.001 < x ≤ 1000, se muestra en forma de punto fijo, se utiliza la no-
tación cientı́fica de lo contrario (punto flotante), en cuyo caso la mantisa está de entre 1 y 9.9999,
por ejemplo, 1000.1 se muestra como 1.0001e+003. Compruébese escribiendo los siguientes
números en la ventana de comandos, (en lı́neas separadas):

0.0011,
0.0009,
1/3,
5/3,
2999/3,
3001/3.

Esto es lo que se llama el formato por defecto, es decir, lo que sucede normalmente. Sin embargo, se
puede cambiar el valor predeterminado con variaciones en el orden de formato, de la siguiente manera:
Si desea que los valores que se muestran en notación cientı́fica (forma de punto flotante) cualquiera que
sea su tamao, tipéese el comando

format short e

Todas las salidas de las declaraciones disp posteriores estarán en notación cientı́fica con cinco cifras
significativas, hasta que se emita un comando siguiente format. Introdúzcase este comando y com-
pruébese con los siguientes valores: 0.0123456, 1.23456, 123.456 (todos en lı́neas separadas).

Si se desea una salida más precisa, puede utilizarse format long e. Ésto también muestra notación
cientı́fica, pero ahora con 15 dı́gitos significativos. Pruébese con 1/7.

Úsese format long para la notación de punto fijo con 15 dı́gitos significativos, por ejemplo, inténtese
con 100/7 y pi.

Si no se está seguro del orden de magnitud de la salida se puede intentar format short g ó format
long g. La g es por ’general’. Matlab decide en cada caso si se debe utilizar el punto fijo o flotante.

Utilı́cese format bank para cĺculos financieros; ésto proporciona un formato de punto fijo con dos
dı́gitos decimales (para los centavos). Pruébese con 10000/7.

Utilı́cese format hex para obtener un display en hexadecimal.

El formato rat muestra un número como una aproximación racional (i.e. cociente de dos nmeros
enteros), por ejemplo pi se muestra como
√ 355/113. Téngase en cuenta que incluso esto es una aproxi-
mación! Pruébese format rat con 2 y e exp(1).

Los sı́mbolos +, - y un espacio muestran los elementos positivos, negativos y cero de un vector o matriz
después de format +. En ciertas aplicaciones esto es una manera conveniente de visualizar matrices.

El comando format en sı́ mismo vuelve al formato predeterminado.

Siempre es posible elegir las diferentes opciones del formato seleccionando: File -> Preferences
en la ventana de comandos. Se abre el cuadro de diálogo de Preferencias de la ventana de comandos.
Se pueden establecer las preferencias de formato en el cuadro de visualización del texto. Téngase en
cuenta que pueden especificarse una serie de preferencias para todas las herramientas de Matlab en
la manera siguiente: Archivo -> Preferencias en la ventana de herramientas. Matlab guardará
automáticamente estas preferencias para su uso en sesiones posteriores.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 40

5.3. FACTORES DE ESCALA . Introdúzcanse los siguientes comandos:

format compact
x = [1e3 1 1e-4]
x =

1.0e+003 *

1.0000 0.0010 0.0000

Con format short (por defecto) y format long un factor común de escala se aplica a todo el vector
si sus elementos son muy grandes, muy pequeños, o muy diferentes en magnitud. En este ejemplo, el
factor de escala es común 1000, por lo que los elementos que se muestran todos deben multiplicarse
por este factor para obtener su valor adecuado, por ejemplo, para el segundo elemento 1.0e+003 *
0.0010 da 1. Tomando un factor de 1000 del tercer elemento (1e-4), éste se transforma en 1e-7, el
cual es representado por 0.0000, ya que solamente se muestran cuatro dı́gitos decimales.

6. R EPETICIONES UTILIZANDO for


Hasta ahora se ha visto de qué manera obtener datos en un programa (es decir, aportar información para
un programa), la forma de hacer la aritmética, y la forma de obtener algunos resultados (es decir, obtener
una salida del programa). Aquı́ se verá otra faceta: la repetición. Esto se implementa mediante la po-
tente instrucción for. Primero se verán a ver algunos ejemplos de uso, seguido por las explicaciones.

Para empezar, introdúzcase el siguiente grupo de instrucciones en la lı́nea de comandos. Tipéese format
compact primero en hacer las salidas más limpias:

for 1 = 1:5, disp(i), end

Ahora cámbiese ligeramente a:

tt for i = 1: 3, disp (i), end

Y por último

for i = 1: 0, disp (i), end

¿Qué es lo que está pasando? La instrucción disp se repite cinco veces, tres veces, y ninguna.

6.1. R A ÍZ CUADRADA UTILIZANDO EL M ÉTODO DE N EWTON . La raı́z cuadrada de x cualquier


número positivo a puede hallarse utilizando únicamente las operaciones aritméticas de suma, resta y
división mediante el Método de Newton. Éste es un procedimiento iterativo (repetitivo) que refina una
estimación inicial.
Para introducir de una manera elemental el concepto de programación estructurada (que se describirá
luego con más detalles), considérese el siguiente plan. A continuación se muestra la estructura del al-
goritmo para encontrar la raı́z cuadrada y un programa para el caso particular a = 2.

E STRUCTURA DEL A LGORITMO


1. Inicializar a.
a
2. Inicializar x con el valor .
2

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 41

3. Repetir 6 veces (por


 ejemplo)
a
Reemplazar x por x + /2.
x
Mostrar x.
4. Parar

P ROGRAMA
a = 2;
x = a / 2;
disp([’La aproximacion a sqrt(a) para a = ’, num2str(a)])
for i = 1: 6
x = (x + a / x) / 2;
disp(x);
end
disp( ’Valor calculado por Matlab: ’)
disp( sqrt(2) )

La salida (luego de seleccionar format long) es la siguiente:

La aproximacion de sqrt(a) para a = 2

1.50000000000000
1.41666666666667
1.41421568627451
1.41421356237469
1.41421356237310
1.41421356237310

Valor calculado por Matlab:

1.41421356237310

El valor de x converge a su lı́mite muy rápido en este caso, que es a. Téngase en cuenta que es
idéntico al valor devuelto por la función sqrt de Matlab. La mayorı́a de las computadoras y calculado-
ras utilizan un método similar internamente para calcular raı́ces cuadradas y otras funciones matemáticas
estándar.

6.2. FACTORIAL !. Ejecútese el siguiente programa para generar una lista de n y n! (léase n facto-
rial), recuérdese que:
n! = 1 × 2 × 3 × . . . × (n − 1) × n.
n = 10
fact = 1;
for k = 1: n
fact = k * fact;
disp( [k fact] )
end

Realı́cese un experimento para encontrar el mayor valor de n para el cual Matlab puede encontrar n!.
(Será mejor dejar de lado la instrucción disp, o bien, puede moverse esta instrucción de arriba del end
a la lı́nea inmediatamente abajo de éste.)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 42

6.3. L ÍMITE DE UNA SUCESI ÓN . Los ciclos for son ideales para el cálculo de los miembros de una
sucesión (como en el Método de Newton mostrado anteriormente). El siguiente ejemplo también pone
de relieve un problema que a veces ocurre cuando se calcula un lı́mite. Considérese la sucesión

an
xn = , n = 1, 2, 3, . . .
n!
donde a es una constrante cualquiera, y n! es la función factorial definida anteriormente. La pregunta es:
¿Cuál es el lı́mite de esta sucesión cuando n se hace indefinidamente grande? Tómese el caso a = 10.
Si se intentase calcular xn directamente podrı́ı́a aparecer un problema, pues n! se hace grande muy
rápidamente a medida que n aumenta, y podrı́a darse el caso de overflow (un número muy grande,
máyor de lo que es capaz de representar la máquina). Sin embargo, la situación se transforma si se
relaciona con xn con xn−1 como sigue:
a · xn−1
xn = .
n
No hay problemas numéricos ahora. (Esta relación entre xn y xn−1 es un descubrimiento ingenioso.
Un ingeniero es lo suficientemente hábil para descubrir estos trucos matemáticos; por supuesto, no se
espera que sea inmediato, pero éste es el tipo de conocimiento que se adquiere a través de la experiencia
de resolver problemas matemáticos que surgen en el trabajo.)

El siguiente programa calcula xn para a = 10, y los valores de n en aumento.

a = 10;
x = 1;
k = 20; % numero de terminos
for n = 1: k
x = a * x / n;
disp( [n x] )
end

6.4. C ONSTRUCCI ÓN B ÁSICA DE for. La forma más común de la utilizacióón del ciclo for (en un
programa, no en la lı́nea de comandos) es:

for indice = j:k


instrucciones
end

for indice = j: m: k
instrucciones
end

Ténganse en cuenta los siguientes puntos:

1. j: k es un vector con elementos j, j + 1, j + 2, ..., k.

2. j: m: k es un vector con elementos j, j + m, j + 2 * m, ..., de tal manera que el


último elemento no exceda de k si m > 0, o no es menor que k si m < 0.

3. indice debe ser una variable. Cada vez que a pase través del ciclo contendrá el siguiente elemen-
to del vector j: k ó j: m: k, y para cada uno de los valores la instrucción (que puede
ser una o más ) se lleva a cabo.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 43

Si la construcción del ciclo for tiene la forma

for k = inicio: incremento: fin

entonces el número de veces que el ciclo se ejecuta puede ser calculado a partir de la siguiente
ecuación:
 
fin - inicio
floor + 1
incremento

donde la función floor(x) redondea x hacia −∞. Este valor se llama número de iteraciones.
Como ejemplo, considérese la instrucción for i = 1: 2: 6. Tiene una cantidad de itera-
ciones de    
6 - 1 5
floor + 1 = floor + 1=3
2 2
Ası́, i toma los valores 1, 3, 5. Téngase en cuenta que si el número de iteraciones es negativo,
el ciclo no se ejecuta.
4. Al término del ciclo for el ı́ndice contiene el último valor utilizado.
5. Si el vector j: k ó j: m: k está vacı́o, las instrucciones no se ejecutan, y el control pasa a
la instrucción que sigue a la última dentro del ciclo.
6. El ı́ndice no es necesario que aparezca de forma explı́cita en las instrucciones. Se trata básicamente
de un contador. De hecho, si el ı́ndice no aparece explı́citamente, el for puede generalmente ser
vectorizado (más detalles en este sentido darán en las secciones siguientes). Un ejemplo sencillo
de un programa más eficiente (más rápido) es el siguiente. Los ejemplos con disp al comienzo
de esta sección eran solamente con fines ilustrativos; estrictamente, serı́a más eficiente que decir
(sin la palabra for)

i = 1: 5; disp (i ’)

¿Puede verse la diferencia? En este caso, i es declarado como un vector (por lo tanto, este cambio
vectoriza el programa original).
7. Es bueno como “estilo de programación” dejar sangrı́as (tabulaciones) en las instrucciones dentro
de un ciclo for. Puede verse que el editor lo hace automáticamente. Esta caracterı́stica se llama
sangrı́a inteligente. esto puede personalizarse desde el editor en Editor/Debugger dentro del
menú Preferences. Para esto, expándase el el menú Preferences del Editor/Debugger
y selecciónese en Keyboard & Indenting Preferences. Téngase en cuenta también que a
un bloque de texto seleccionado puede serle quitado la sangrı́a a partir del menú Text del editor.
También puede notarse que el editor resalta la sintaxis. Las palabras clave son de un color, cadenas
en otro, y ası́ sucesivamente. Puede personalizarse este esquema de resaltado de colores en el
menú Font & Color Preferences del editor. Selecciónese Set Colors en el ı́tem Colors
(marcando en Sintax highlighting).

6.5. for EN UNA SOLA L ÍNEA . Si se insiste en usar en una sola lı́nea, esta es la forma general:

for indice = j: k, instrucciones, end

for index = j: m: k, instrucciones, end

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 44

I MPORTANTE:
1. No olvidar las comas (o punto y comas), de lo contrario aparecerá un mensaje de error.
2. Las instrucciones pueden ser una o mś, separadas por coma o punto y coma.

3. Si no se escribe en end, Matlab esperará a que la introduzca.

6.6. for DE MANERA GENERAL . Una forma más general para el for es:

for indice = v

donde v es un vector cualqueira. indice se mueve a través de cada elemento del vector v. Esto
proporciona una forma clara de procesar cada elemento de una lista. La forma más general del ciclo
for se discutirá luego, cuando se trate el tema de matrices de manera más detallada.

6.7. V ECTORIZACI ÓN DE CICLOS for. Existen situaciones en las que un ciclo for es esencial, al
igual que en muchos de los ejemplos de esta sección hasta el momento. Sin embargo, la forma en que
ha sido diseñado Matlab, los ciclos for tienden a ser ineficientes en términos de tiempo de cálculo. Si
se ha escrito un ciclo que incluye el ı́ndice del ciclo en una expresión, puede ser posible vectorizar la
expresión, haciendo uso de las operaciones matriciales, como muestran los siguientes ejemplos.

Supóngase que se desea evaluar


100000
∑ n
n=1

(y no se recuerda la fórmula para la suma!) Aquı́ se muestra de qué manera hacerlo utilizando un ciclo
for:

t0 = clock;
s = 0;
for n = 1: 100000
s = s + n;
end
etime(clock, t0)

La función clock devuelve un vector de seis elementos con la fecha y la hora actuales en el formato
año, mes, dı́a, hora, minutos, segundos. Ası́ t0 guarda el valor cuando se inicia el cálculo.

La función etime devuelve el tiempo en segundos transcurridos entre sus dos argumentos, el cual es
devuelto en un vector con el formato igual al de clock. En la última década un Pentium II, devolvió
3.35 segundos, que es el tiempo total para este cĺculo. (Si se tiene una PC más rápida, deberı́a tomar
menos tiempo.)

Ahora inténtese vectorizr este cálculo (antes de mirar la solución).


La respuesta podrı́a ser:

t0 = reloj;
n = 1: 100000;
s = suma (n);
etime (reloj, t0)

De esta forma tarda solamente 0.06 segundos en el mismo PC -más de 50 veces más rápido! Hay una
manera más ordenada de controlar el tiempo de cáculo en Matlab, mediante las instrucciones tic y toc.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 45

Ahora supóngase que se desea calcular:


100000
1
∑ n2
n=1

Ésta podrı́a ser una versión utilizando el ciclo for:

tic
s = 0;
for n = 1:100000
s = s + 1/n. ˆ 2;
end
toc
Esto toma unos 6 segundos en la misma PC. Una vez más, inténtese vectorizar esta suma:

tic
n = 1: 100.000;
s = suma(1 / n. ˆ 2);
toc
En la misma PC esto da un tiempo de alrededor de 0.05 segundos para la versión vectorizada - más de
100 veces más rpido! (Por supuesto, el tiempo de cálculo en estos ejemplos es pequeño, independiente-
mente del método aplicado. Sin embargo, aprender a mejorar la eficiencia de los cálculos para resolver
problemas más complejos cientı́ficos o ingenieriles será til a medida que se desarrollen habilidades de
programación -luego se tratarán con más detalle prácticas de resolución de problemas y de diseño.

Tratar con series de signos alternados es un poco más complicado. La suma de esta serie da como
resultado ln(2) (el logaritmo natural de 2):
1 1 1 1
1− + − + −...
2 3 4 5
Aquı́ se muestra de qué manera encontrar la suma de los primeros 9.999 términos con un ciclo for
(véase de que forma se pueden manejar los signos alternados):

sign = -1;
s = 0;

for n = 1: 9999
sign = -sign;
s = s + signo / n;
end

Pruébse. Se debe obtener 0.6932. Con Matlab se tiene que log(2) es 0.6931. No está mal.

La versión vectorizada podrı́a ser:

n = 1: 2: 9999;
s = suma (1 ./ n - 1 ./ (n + 1))

Si se comparan los tiempos de las dos versiones, se verá nuevamente que la forma vectorizada es mucho
más rápida.

Las funciones de Matlab explotan naturalmente la vectorización, siempre que ésta sea posible. Por
ejemplo, prod(1: n) encontrará que n! es mucho más rápido que el código al principio de esta
sección (para valores grandes de n).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 46

6.8. U N ERROR HABITUAL . Un error muy común es omitir la palabra for en un ciclo for. En lugar
de informar de un error, Matlab crea un vector, y ejecuta las sentencias en el “ciclo”solamente una vez.
Por ejemplo, ejecútese el programa para la raı́z cuadrada con el Método de Newton, dejando de lado la
palabra for, es decir:

a = 2;
x = a/2;
i = 1: 6 % sin for ahora
x = (x + a/x) / 2;
disp( x )
end

¿Puede explicarse la salida? Consúltese con whos que se haya creado el vector i. Téngase en cuenta
que la instrucción en es perfectamente legal, aunque no hace absolutamente nada.

E JERCICIOS
Escrı́banse programas en Matlab que en cuentren las siguientes sumas. Primero utilizando el ciclofor
y luego de manera vectorizada. Compárense los tiempos de ambas versiones.
1. 12 + 22 + 32 + . . . 10002 .
1 1 1 1 1
2. 1 − + − + −...− .
3 5 7 9 1003
3. Súmese el lado izquierdo de la serie

1 1 1 π2 − 8
+ + + . . . =
12 · 32 32 · 52 52 · 72 16

7. D ECISIONES
La función rand genera un número aleatorio en el intervalo [0, 1]. Introdúzcanse las dos instrucciones
siguientes en la lı́nea de comandos:

r = rand
if r > 0.5 disp (’mayor de hecho’), end

Matlab sólo debe mostrar el mensaje de mayor de hecho’, si r es de hecho superior a 0.5 (chequéese
mostrando r). Repı́tase unas cuantas veces -cortar y pegar desde la ventana de Command History
(asegúrese de que un nuevo r se genere cada vez).

Como un ejercicio un poco diferente pero relacionado a esto, introdúzcase la siguiente expresión lógica
en la lı́nea de comandos:

2 > 0

Ahora introdúzcase la expresión lógica -1 > 0. Matlab dará un valor de 1 a una expresión lógica
verdadera, y de 0 a una falso.

7.1. L A INSTRUCCI ÓN if EN UNA L ÍNEA . En el ejemplo anterior Matlab tiene que tomar una de-
cisión; debe decidir si r es mayor que 0.5. La construcción if, que es fundamental para todos los
lenguajes de computación, es la base de la toma de decisiones.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 47

La forma más simple del if en una sola lı́nea es:

if condicion instruccion, end

Ténganse en cuenta los siguientes puntos:

1. condicion suele ser una expresión lógica, es decir, una expresión que contenga un operador
relacional, y que sea verdadera o falsa. Los operadores relacionales se muestran en la Tabla 2.4

O PERADOR R ELACIONAL S IGNIFICADO


< menor que
<= menor o igual que
== igual
= no igual
> mayor que
>= mayor o igual que

Tabla 2.4: Operadores relacionales

Matlab permite utilizar una expresión aritmética para la condicion. Si la expresión se evalúa
como 0 se considera como falsa; cualquier otro valor es verdadero. Esto no es recomendable; la in-
strucción if es más fácil (para quien programe o quien lea el código) para entender si condicion
es una expresión lógica.

2. Si condicion es verdadera, se ejecuta la instrucción, pero si condicion es falsa, no pasa nada.


3. condicion puede ser un vector o una matriz, en cuyo caso es cierta solamente si todos sus
elementos son distintos de cero. Un solo elemento igual cero en un vector o matriz hace que sea
falsa.

Aquı́ se dan algunos ejemplos más de expresiones lógicas que involucran operadores relacionales, con
sus significados entre paréntesis:

b ˆ 2 < 4*a*c, (b2 − 4ac).

x > 0, (x > 0).

a ~
= 0, (a 6= 0).

b ˆ 2 == 4*a*c, (b2 = 4ac).

Recuérdese que se debe utilizar el signo doble igual (==) cuando se prueba por la igualdad, por ejemplo,

if x == 0 disp (’x es igual a cero’), end

E JERCICIOS
Las siguientes declaraciones asignan expresiones lógicas a la variable x. Véase si se puede determinar
correctamente el valor de x en cada caso antes de comprobar su respuesta con Matlab.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 48

i. x = 3 > 2 iii. x = -4 < = -3 v. x = 3 == 3


ii. x = 2 > 3 iv. x = 1 < 1 vi. x = 0 < 0.5 < 1

¿Recibió en la penúltima expresión una respuesta correcta? 3 == 3 es una expresión lógica que es
cierta, ya que 3 es, sin duda, igual a 3, por lo tanto el valor 1 (que significa cierto) se asigna a x. ¿Y la
última? Como la desigualdad matemática,

0 < 0.5 < 1

es indudablemente cierta desde un punto de vista no operacional. Sin embargo, como una expresión
operacional de Matlab, la izquierda < se evalúa primero, es decir, 0 < 0.5, dando 1 (verdadero).
Luego se realiza la operación de la derecha, es decir 1 < 1 dando 0 (falso). Atención, esto hace pensar.
¿No es ası́?

7.2. C ONSTRUCCI ÓN DE if-else. Inténtense los siguientes ejercicios:


1. Tipéense las dos lı́neas siguientes:

x = 2;
if x < 0 disp( ’negativo’), else disp( ’no negativo’), end

¿Apareció el mensaje no negativo?


2. Ahora cámbiese el valor de x por -1, y ejecútese nuevamente. ¿Apareció el mensaje negativo
esta vez?
3. Inténtese ahora con

if 79 disp (’ verdadero ’), else disp (’ falso ’), end

¿Apareció verdadero? Pruébese algunos otros valores en lugar de 79, incluyendo el 0 y algunos
valores negativos.
4. La mayorı́a de los bancos ofrecen tasas de interés diferenciales. Supóngase que la tasa es del 9
por ciento si el importe en su cuenta de ahorros es menos de $ 5000, pero el 12 por ciento lo
contrario. El Banco Random va un paso más allá, y ofrece una cantidad al azar en su cuenta para
comenzar! Ejecute el siguiente programa un par de veces:

saldo = 10000 * rand;


if saldo < 5000
tasa = 0.09;
else
tasa = 0.12;
end
nuevosaldo = saldo + tasa * saldo;
disp( ’ El nuevo saldo despues de calcular el interes es ’ )
format bank
disp( nuevosaldo )

Muestra los valores de bal y rate cada vez desde la lı́nea de comandos para comprobar que
Matlab ha elegido el tipo de interés correcto.
La forma básica para utilizar el if-else en un programa es:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 49

if condicion
instruccionesA
else
instruccionesB
end

I MPORTANTE
1. instruccionesA e instruccionesB representan una o mas instrucciones.
2. Si condicion es verdadera, el bloque instruccionesA es ejecutado, pero si condicion es
falsa, entonces se ejecuta el bloque instruccionesB. Ésto es básicamente de qué manera se
puede forzar a Matlab a elegir entre dos alternativas.
3. La parte else es opcional.

7.3. E L if-else EN UNA SOLA L ÍNEA . La manera general más sencilla de utilizar el if-else en
una lı́nea es:

if condicion instruccionA, else instruccionB, end

I MPORTANTE
1. Las comas (o puntos y comas) son esenciales en las diferentes instancias.
2. La parte del else es opcional.
3. No olvidar el end, de lo contrario Matlab se quedará esperando.

7.4. elseif. Supóngase que el Banco Random ofrece ahora un 9 por ciento de interés sobre los
saldos de menos de $ 5000, el 12 por ciento de los saldos de $ 5000 o más, pero menos de $ 10000, y el
15 por ciento de los saldos de $ 10000 o más. El siguiente programa calcula nuevo saldo de un cliente
después de un año de acuerdo con este esquema:

saldo = 15000 * rand;


if saldo < 5000
tasa = 0.09;
elseif saldo < 10000
tasa = 0.12;
else
tasa = 0.15;
end
nuevosaldo = saldo + tasa * saldo;
format bank
disp( ’El nuevo saldo es: ’ )
disp( nuevosaldo )

Ejecútese el programa un par de veces, y nuevamente, muéstrense los valores de saldo y tasa cada
vez para verificar que Matlab elige el tipo de interés correcto.

En general, la instrucción elseif se utiliza como sigue:

if condicion1

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 50

instruccionesA
elseif condicion2
instruccionesB
elseif condicion3
instruccionesC
...
else
instruccionesE
end

Esto usualmente se llama una escalera elseif. Funciona de la siguiente manera:

1. Se evalúa condicion1. Si es cierta, se ejecuta el bloque instruccionesA; luego Matlab va a


la siguiente instrucción después del end.
2. Si condicion1 es falsa, Matlab evalúa condicion2. Si es cierta, se ejecuta el bloque de
instruccionesB, y se sigue a la instrucción debajo del end.

3. De esta manera, todas las condiciones se ponen a prueba hasta que se encuentra una condición
verdadera. Tan pronto como se encuentra esta condición verdadera, no se examinan más elseif
y Matlab salta de la escalera.
4. Si ninguna de las condiciones es verdadera, se ejecuta el bloque instruccionesE.
5. Se debe organizar la lógica de manera que no más de una de las condiciones sea cierta.

6. Puede haber cualquier número de elseif, pero a lo sumo un else.


7. elseif debe escribirse como una sola palabra.
8. Es bueno como estilo de programación dejar una sangrı́a en cada grupo de instrucciones como se
muestra en el ejemplo.

7.5. O PERADORES L ÓGICOS . Expresiones lógicas más complejas pueden construirse utilizando los
tres operadores lógicos & (and), | (or), ˜ (not). Por ejemplo, la ecuación cuadrática

ax2 + bx + c = 0

tiene raı́ces iguales, dados por −b/(2a), si b2 − 4ac = 0 y a 6= 0 (Véase Figura 2.2). Esto se traduce en
las siguientes instrucciones de Matlab:

if (b ˆ 2 - 4 * a * c == 0) & (a ~
= 0)
x = - b / (2 * a);
end

Por supuesto, a, b, y c deben tener valores asignados antes de llegar a este conjunto de instrucciones.
Téngase en cuenta el signo doble igual (==) en la prueba de la igualdad; consutése la ayuda (help) para
mayor información sobre los operadores lógicos.

7.6. M ULTIPLES if VERSUS elseif. Podrı́a haberse escrito el programa del Banco Random de la
siguiente manera:

saldo = 15000 * rand;


if saldo < 5000
tasa = 0.09;
end

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 51

3.5

2.5

1.5

0.5

0
0 0.5 1 1.5 2 2.5 3 3.5 4

Figura 2.2: Una función cuadrática con raı́ces iguales

if saldo >= 5000 & saldo <10000


tasa = 0.12;
end
if saldo >= 10000
tasa = 0.15;
end
nuevosaldo = saldo + tasa * saldo;
format bank
disp ( ’El nuevo saldo es’ )
disp ( nuevosaldo )

Sin embargo, esto es ineficiente puesto que cada una de las tres condiciones se prueba siempre, in-
cluso si la primera es verdadera. En la versión anterior con el elseif, Matlab salta de la escalera
elseif tan pronto como se encuentra una condición verdadera. Esto podrı́a ahorrar mucho tiempo de
cálculo (y resulta más sencillo de leer) si la construcción if está en un ciclo que se repite con frecuencia.

Utilizando esta forma, en lugar de la escalera elseif, es posible cometer el siguiente error:

if saldo < 5000


tasa = 0.09;
end
if saldo < 10000
tasa = 0.12;
end
if saldo >= 10000

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 52

tasa = 0.15;
end

¿Puede verse por qué se obtiene la respuesta equivocada (1120 en lugar de 1090) si saldo tiene el valor
1000? En el diseño lógico es preciso asegurarse de que una y solamente una de las condiciones será
cierto cada vez.

Otro error que habitual es sustituir el segundo if con algo como:

if 5000 < saldo < 10000


tasa = 0.12;
end

lo cual convincente como vimos anteriormente. Sin embargo, cualquiera que sea el valor de saldo es
esta condición será siempre verdadera. ¿Por qué?

7.7. if ANIDADOS . Una construcción if puede contener otros if, y ası́ sucesivamente. A estos se
los llama anidados, y no debe confundirse con la escalera elseif. Se tiene que ser bastante cuidadoso
con la elección de los else. En general, else pertenece al if más reciente que aún no ha terminado.
Por consiguiente, el posicionamiento correcto del end es muy importante, como el siguiente ejemplo lo
muestra.

Supóngase que se desea calcular la solución de una ecuación de segundo grado. Es posible que se quiera
comprobar si a = 0, para evitar una división por cero. El programa podrı́a contener los siguientes if
anidados:

...
d = b2 - 4*a*c;
if a ~ = 0
if d < 0
disp( ’Raices Complejas’ )
else
x1 = (- b + sqrt(d)) / (2 * a);
x2 = (- b - sqrt(d)) / (2 * a);
end % Primer end <<<<<<<<<

end

El otro else pertenece al segundo if por defecto, como se pretende.

Ahora muévase el primer end hacia arriba de la siguiente manera:

d = b2 - 4*a*c;
if a ~ = 0
if d < 0
disp( ’Raices Complejas’ )
end % Primer end subido aqui <<<<<<<<<
else
x1 = (- b + sqrt(d)) / (2 * a);
x2 = (- b - sqrt(d)) / (2 * a);
end

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 53

El end que se ha movido ahora cierra el segundo if. El resultado es que el else pertenece al primer if
en lugar del segundo. Por lo tanto, la división por cero está garantizada, en lugar de prevenida!

7.8. switch. La instrucción switch ejecuta instrucciones basadas en el valor de una variable o ex-
presióón. En este ejemplo se utiliza para decidir si un entero aleatorio es 1, 2 o 3:

d = floor(3*rand) + 1
switch d
case 1
disp( ’Es un 1!’ );
case 2
disp( ’Es un 2!’ );
otherwise
disp( ’Debe ser un 3!’ );
end

Expresiones múltiples pueden ser manejadas en una única instrucción case encerrándola en una matriz.

d = floor(10*rand);
switch d
case {2, 4, 6, 8}
disp( ’Par’ );
case {1, 3, 5, 7, 9}
disp( ’Impar’ );
otherwise
disp( ’Cero’ );
end

8. N ÚMEROS COMPLEJOS
Si no se está familiarizado con los números complejos, se puede omitir sin problemas esta sección. Sin
embargo, es útil saber que existen pues la raı́z cuadrada de un número negativo puede llegar a verse
como un error si se está tratando de trabajar solamente con números reales.

Es muy √
fácil de manejar números complejos en Matlab. Los valores especiales i y jse utilizan para
denotar −1. Tipéese sqrt(-1) para ver de qué manera Matlab representa los números complejos.

El sı́mbolo i se puede utilizar para asignar valores complejos, por ejemplo:

z = 2 + 3 * i

representa el número complejo 2 + 3i (parte real igual a 2, parte imaginaria igual a 3). También puede
introducir un valor complejo como este, por ejemplo, tipéese

2 + 3 * i

en respuesta a lo tipeado (recuérdese, sin punto y coma). La parte imaginaria de un número complejo
también se puede introducir sin un asterisco, por ejemplo, 3i.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 54

Todos los operadores aritméticos (y la mayorı́a de las funciones) trabajan con números complejos, por
ejemplo, sqrt (2 + 3 * i), exp (i * pi).

Hay algunas funciones que son especı́ficas de los números complejos. Si z es un número complejo
real(z), imag(z), conj(z) y abs(z) tienen un significado obvio.

Un número complejo puede ser representado en coordenadas polares, es decir:

z = reiθ .

angle(z) devuelve θ entre −π y π, es decir, se devuelve atan2(imag(z), real(z)) y abs(z) de-


vuelve la magnitud r.

Dado que eiθ da el cı́rculo unidad en polares, los números complejos proporcionan una forma sencilla
de trazar un cı́rculo. Pruébese lo siguiente:

circulo = exp (2 * i * [1: 360] * pi / 360);


plot (circulo)
axis(’equal’)

N OTA :
+ Si y es un complejo, la instrucción plot(y) es equivalente a:

plot(real (y), imag (y))


+ El instrucción axis( ’equal’ ) es necesario para que los cı́rculos se vean redondos; esto cam-
bia lo que se conoce como aspect ratio del monitor. axis( ’normal’ ) da la relación de
aspecto por defecto.
Si se utilizan números complejos,√téngase cuidado de no utilizar i ó j para otras variables; los nuevos
valores reemplazarán el valor de −1 y seguramente causara problemas desagradables.

Para matrices complejas, las operaciones ’ y .’ se comportan de manera diferente. El operador ’ es


la transpuesta conjugada compleja, es decir, filas y columnas son intercambiadas, y los signos de la
parte imaginaria son cambiados. El operador .’, por otro lado, hace una traspuesta pura sin tomar el
conjugado complejo. Para ver esto, créese una matriz compleja de una con la instrucción

a = [1+i 2+2i; 3+3i 4+4i]

lo que resulta
a =

1.0000 + 1.0000i 2.0000 + 2.0000i


3.0000 + 3.0000i 4.0000 + 4.0000i

La instrucción

a’

se traduce en la transpuesta conjugada compleja

ans =

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 55

1.0000 - 1.0000i 3.0000 - 3.0000i


2.0000 - 2.0000i 4.0000 - 4.0000i

mientras que la instrucción

a .’

resulta dar la transpuesta pura, es decir

ans =

1.0000 + 1.0000i 3.0000 + 3.0000i


2.0000 + 2.0000i 4.0000 + 4.0000i

9. M ÁS SOBRE ENTRADAS Y SALIDAS


Esta sección no es estrictamente “esencial”; puede saltearse y volver a ella más adelante en su investi-
gación de Matlab.

9.1. fprintf. Si se está interesado es controlar exactamente lo que muestran las salidas, en esta
sección hay muchas respuestas para ello. Sino, se puede continuar con disp, format y cortar y pegar.

La instrucción fprintf es mucho más flexible (y por lo tanto más complicada!) que disp. Por ejem-
plo, permite mezclar cadenas y números libremente en una misma lı́ı́nea, y controlar el format (por
ejemplo, número de decimales) completamente. A modo de ejemplo, cámbiese el programa de interés
compuesto dado anteriormente de la siguiente manera:

saldo = 12345;
tasa = 0.09;
intereses = tasa * saldo;
saldo = saldo + intereses;
fprintf( ’Tasa de Interes: % 6.3f Nuevo Saldo:
%8.2f\n, ... tasa, saldo );

Cuando se ejecute, la salida deberı́a tener este aspecto:

Tasa de Interes: 0.090 Nuevo Saldo: 13456.05

La forma más común de fprintf es:

fprintf( ’string y formato’, lista de variables )

I MPORTANTE
1. string y formato puede contener un mensaje. También puede contener especificaciones de la
forma %e, %f ó %g, que controlan de qué forma se colocan las variables enumeradas en string
y formato.

2. En el caso de los especificadores e y f, el ancho del campo y el número de cifras decimales


o dı́gitos significativos pueden especificarse inmediatamente después del signo % como los dos
ejemplos siguientes muestran.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 56

+ % 8.3f significa punto fijo sobre 8 columnas en total (incluyendo el punto decimal y un
posible signo menos), con 3 decimales (espacios se llenan la izquierda si fuera necesario).
Utilı́cese 0 si no se desea ninguna cifra decimal, por ejemplo, % 6.0f. Utilı́cese un cero a
la izqeuierda si se desea mostrar ceros a la izquierda en la salida, por ejemplo, % 03.0f.
+ % 12.2e significa notación cientı́fica sobre 12 columnas en total (incluyendo el punto deci-
mal, un posible signo menos, y cinco para el exponente), con 2 dı́gitos en la mantisa después
del punto decimal (la mantisa siempre se ajusta para no ser menor que 1).
3. El especificador g es mixto, y deja que Matlab decida automáticamente que formato utilizar. Esta
es una buena alternativa si no se quiere contar decimales, y/o no se está seguro de la magnitud
aproximada del resultado.
4. En el caso de un vector, la secuencia de los especificadores de formato se repite hasta que se hayan
mostrado todos los elementos.
5. cadena y formato en el fprintf también puede contener códigos como \n (salto de lı́nea), \t
(tabulador horizontal), \b (retroceso) y \f (avance de página).

Un programador de C, sin duda, se sentirı́a como en su casa aquı́! Para más detalles consúltese fprintf
en la ayuda en lı́nea (help fprintf).

9.2. S ALIDAS A UN ARCHIVO EN EL DISCO CON fprintf. Las salidas pueden ser enviadas a un
archivo en el disco con fprintf. La salida se agrega al final del archivo.

La forma general es

fprintf (’nombre de archivo’, ’cadena de formato ", lista de variables)

por ejemplo,

fprintf (’miarchivo’, ’% g’, x)

envı́a el valor de x al archivo miarchivo en el disco.

10. M ISCEL ÁNEAS


10.1. VARIABLES , FUNCIONES Y SCRIPTS CON EL MISMO NOMBRE . Introdúzcase el comando
rand. Esto genera un número aleatorio; de hecho, uno diferente cada vez que se introduce el comando.
A continuación, introduzca la declaración

rand = 13;

El nombre rand ahora representa una variable con el valor 13 (verifı́quese con whos). El generador
de números aleatorios rand ha sido ocultado por la variable del mismo nombre, y no estará disponible
hasta que elimine rand (tipéese clear rand). Un archivo de comandos también puede ocultarse de
esta manera.

Cuando se tipea un nombre en la lı́nea de comandos, por ejemplo goo, el intérprete de Matlab realiza
los siguientes pasos:

1. Busca a goo como una variable.


2. Busca en el directorio actual un archivo script llamado goo.m.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 57

3. Busca goo como una función incorporada, como sin ó pi.


4. Looks (en orden) en los directorios especificados por la ruta de búsqueda de Matlab un script
llamado goo.m. Utilı́cese File -> Set Path para ver y cambiar la ruta de búsqueda de Matlab.
Un error habitual es ocultar accidentalmente scripts de esta manera. Si se no se está seguro que puede
haber una función goo que oculte comandos del mismo nombre, primero tipéese de help goo. Si se
recibe el mensaje goo.m not found, entonces se estará seguro. Para mostrar goo si ésta se encuentra
oculta tipéese clear goo.

10.2. L A INSTRUCCI ÓN input. Reescrı́base el script compint.m para que se vea exactamente ası́,
y recuérdese guardarlo:

saldo = input( ’Ingrese el Saldo Bancario: ’ );


tasa = input( ’Ingrese la Tasa de Interes: ’ );
intereses = tasa * saldo;
saldo = saldo + intereses;
format bank
disp( ’Nuevo Saldo: ’ );
disp( saldo );

Introdúzcase el nombre del script en la lı́nea de comandos, e introdúzcanse los valores 1000 y 0.15
para el saldo y la tasa de interés respectivamente.

>> compint
Ingrese el Saldo Bancario: 1000

Ingrese la Tasa de Interes: 0.15

Nuevo Saldo:

1150.00

La entrada por teclado proporciona la forma más flexible para la obtención de datos en un programa
por instrucciones de asignación que deben ser editada cada vez que los datos se cambian. Se pueden
introducir datos, mientras el script se está ejecutando. La forma general de entrada es:

variable = input( ’mensaje’ );

I MPORTANTE
+ mensaje aparece en la pantalla textual como se escribe (en general pide al usuario el valor, o los
valores, a ingresar). Debe ir entre apóstrofes (comillas simples).
+ Un punto y coma al final de la declaración de entrada evitará que el valor introducido sea mostrado
inmediatamente en la pantalla.
+ No se debe utilizar input habitualmente si no es realmente necesario.
+ Los vectores y matrices también se pueden introducir con input, siempre que se recuerde incluir
los elementos que figuran entre corchetes.
+ Puede introducir una expresión en respuesta a la solicitud, por ejemplo, a + b (siempre y cuando
a y b se hayan definido) ó rand(5). Al introducir una expresión de esta manera no se debe incluir
un punto y coma (éste no será parte de la expresión).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 58

E JERCICIOS
1. Reescrı́banse las soluciones a algunos de los problemas de conversión de unidades realizados
anteriormente utilizando input en los script.
2. Reescrı́base el programa comp.m de vectorización de fórmulas con input para introducir el vector
de la inversión inicial.

11. E STILO DE PROGRAMACI ÓN


Algunos programadores se deleitan con la escritura concisa y código complicado; hay al menos un con-
curso anual para el programa en C más incomprensible. Una gran cantidad de programadores respons-
ables, sin embargo, piensan que es muy importante para desarrollar el arte de la escritura de programas
que éstos estén bien diseñados, con toda la lógica claramente descrita. Por lo tanto, los programadores
serios presntan mucha atención a lo que se llama estilo de programación, con el fin de hacer sus pro-
gramas más claros y más legibles tanto para ellos, como para otros usuarios potenciales. Se puede
encontrar esto irritante, si se está comenzando a programar, ya que, naturalmente, se es impaciente para
seguir adelante con el trabajo. Pero un poco de atención adicional en el programa dará enormes benefi-
cios en el largo plazo, especialmente cuando se trata de la depuración.

Algunos consejos sobre cómo mejorar su estilo de programación se dan a continuación.


+ Se debe hacer uso de los comentarios, tanto al inicio de una secuencia de comandos, para describir
brevemente lo que hace y los métodos especiales que se hayan podido utilizar, como también a lo
largo de la codificación en las diferentes secciones lógicas.
+ El significado de cada variable debe ser descrito brevemente en un comentario cuando se inicial-
iza. Se debe describir las variables de manera sistemática, por ejemplo, en orden alfabético.
+ Las lı́neas en blanco deben ser utilizadas libremente para secciones separadas de codificación (por
ejemplo, antes y después de las estructuras de ciclos).
+ La codificación (es decir, las instrucciones) dentro de las estructuras (for, if, while) deben tener
una sangrı́a (tabulados) algunas columnas para hacer que destaquen.
+ Los espacios en blanco se deben utilizar en las expresiones para que sean más legibles, por ejem-
plo, a cada lado de los operadores y los signos de igual. Sin embargo, los espacios en blanco
pueden ser omitidos en los lugares en expresiones complicadas, en las que esto puede hacer que
la lógica sea más clara.
Los programas de computadora son como cualquier otra forma de arte literario; deben ser diseãdos y
escritos con una cantidad razonable de previsión que lleve a una clara declaración del problema que se
debe solucionar para satisfacer una necesidad reconocida de una solución cientı́fica, técnica, ingenieril
o matemática. La solución podrı́a tener como objetivo mejorar el conocimiento o ayudar al cientı́fico o
ingeniero a tomar una decisión acerca de una propuesta de diseño de equipo de laboratorio o un artefacto
para mejorar nuestro nivel de vida.

El planteamiento del problema es, probablemente, la parte más difı́cil de cualquier proceso de diseño;
no es diferente para el diseño de un programa de computadora. Por lo tanto, aprender a diseñar buenos
programas de computadora (o códigos, como a veces se llaman) proporciona una buena experiencia
en la práctica del diseño creativo. Se requiere un plan estratégico que conduce al desarrollo de un
algoritmo (es decir, la secuencia de operaciones necesarias para resolver un problema en un número
finito de pasos) para ser programado en Matlab y ejecutarse con el fin de proporcionar una respuesta
al problema planteado. El objetivo fundamental es crear un plan de estructura de arriba hacia abajo
detallando todos los pasos del algoritmo que se deben implementar para obtener la solución deseada.
La metodologı́a de desarrollo de un plan de este tipo se describirá detalladamente más adelante.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 59

12. R ESUMEN
+ El escritorio de Matlab se compone de una serie de herramientas: la ventana de comandos
(Command Window), el espacio de trabajo (Workspace), el navegador del directorio actual (Cur-
rent Directory) y la ventana de historial de comandos (Command History).

+ Matlab tiene un sistema completo de ayuda en lı́nea. Se puede acceder a través del botón de
ayuda en la barra de herramientas del escritorio o en el menú Help.
+ Un programa en Matlab se puede escribir en el editor y se corta y se pega en la ventana de
comandos.

+ Un script es un archivo de texto (creado por el editor de Matlab, o cualquier otro editor de texto)
que contiene una colección de declaraciones, es decir, un programa. Las declaraciones se realizan
cuando el nombre del archivo de comandos se introduce en la ventana de comandos. Un script
debe tener la extensión .m. Los archivos de comandos son, por tanto, también llamados m-files.
+ La manera recomendada de ejecutar una secuencia de comandos es desde el Current Directory.
La salida de la secuencia apareceréntonces en la ventana de comandos.
+ Un nombre de variable se compone sólo de letras, dı́gitos y guiones bajos, y debe comenzar
con una letra. Solamente los primeros 31 caracteres son significativos. Matlab distingue en-
tre mayúsculas y minúsculas. Todas las variables creadas durante una sesión permanecen en
el Workspace, hasta que se eliminen con clear. El comando who muestra las variables en el
Workspace y el comando whos además de esto da sus tamaños.

+ Para Matlab todas las variables son matrices, si son escalares (matrices de una sola componente),
vectores (matrices de 1-D) o matrices propiamente ddichas (i.e. matrices de 2-D).
+ Los nombres en Matlab distinguen mayúsculas de minúsculas.
+ El Workspace en el escritorio proporciona una representación visual de las variables en uso. Al
hacer clic en una variable del Workspace, se invoca al Array Editor que puede utilizarse para
ver y cambiar los valores de variables.
+ Los vectores y matrices se introducen entre corchetes. Los elementos están separados por espacios
o comas. Las filas están separadas por punto y coma. El operador : (dos puntos) se utiliza
para generar vectores con elementos de aumento (o disminución) por incrementos regulares (o
decremento). Los vectores son vectores fila por defecto. Utilı́cese el operador de transposición
apóstrofe ( ’) para cambiar un vector fila en un vector columna.
+ Un elemento de un vector es referido por un subı́ndice entre paréntesis. Un subı́ndice puede ser
en sı́ mismo un vector. Los subı́ndices siempre empiezan en 1, y se redondean hacia abajo si no
es un entero.

+ El comando diary copia todo lo que aparece posteriormente en la ventana de comandos en un


archivo de texto especificado hasta que se tipee diary off en la ventana de comandos.
+ Las instrucciones en una misma lı́nea pueden estar separadas por comas o puntos y comas.
+ Una instrucción se puede continuarse en la siguiente lı́nea con puntos suspensivos (al menos tres
puntos).
+ Los números pueden ser representados en notación decimal punto fijo o en notación cientı́fica de
punto flotante.
+ Matlab dispone de 14 tipos de datos. El tipo numérico predeterminado es de doble precisión.
Todas las operaciones matemáticas se llevan a cabo en doble precisión.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 60

+ Los seis operadores aritméticos para los escalares son + - * \ / y ˆ. Operan de acuerdo a las
reglas de jerarquı́as. Los paréntesis tienen la más alta prioridad.
+ Matlab realiza operaciones de matriz elemento a elemento entre los vectores, o entre escalares
y vectores. Las operaciones elemento a elemento de la multiplicación, la división a derecha y a
izquierda y la exponenciación se indican con .*, ./, .\ y .ˆrespectivamente. Para distinguirlas de
las operaciones de la matriz del mismo nombre. Operaciones elemento a elemento se pueden usar
para evaluar una fórmula repetidamente para algunos o todos los elementos de un vector. Esto se
llama vectorización de la fórmula.
+ disp se utiliza para salidas (pantalla) y cadenas de texto. num2str es útil con disp para la visual-
ización de cadenas y números en la misma lı́nea. El comando format controla el formato en que
se visualizan las salidas. format también puede seleccionarse haciendo File -> Preferences
-> Command Window Preferences.
+ Cuando se muestran vectores, si los elementos son muy grandes, muy pequeños o muy diferentes
en magnitud se utiliza un factor comń de escala.
+ La instrucción for se usa para repetir un grupo de instrucciones una cantidad fija de veces. Si
el ı́ndice del for se utiliza en la expresión que se repite, la expresión usualmente puede ser
vectorizada, ahorrando una gran cantidad de tiempo de cálculo.
+ tic y toc se pueden utilizar como un cronómetro.
+ Las expresiones lógicas tienen el valor verdadero (1) o falso (0), y se construyen con los seis
operadores relacionales >, >=, <, <=, == y ~ =. Cualquier expresión que se evalúa como cero
es considerada falsa. Cualquier otro valor es verdadero. Expresiones lógicas más complejas se
pueden formar a partir de otras utilizando los operadores & (and), | (or), ~ (not).
+ if-else ejecuta diversos grupos de sentencias dependiendo si una expresión lógica es verdadera
o falsa. La escalera elseif es una buena manera de elegir entre un número de opciones, de los
cuales solamente uno a la vez debe ser verdadero.
+ switch permite elegir entre diferentes opciones en los casos discretos de una variable o expresión.
+ Una cadena es un conjunto de caracteres entre comillas simples (apóstrofes).
+ Los números complejos se pueden
√ representar mediante las variables especiales i y j, que repre-
sentan el número imaginario −1.
+ fprintf se utiliza para controlar el formato de salida con mayor precisión.
+ save y load se utilizan para exportar e importar datos.
+ La instrucción input, se utiliza para solicitar al usuario la entrada mediante el teclado, mientras
que un script se está ejecutando.
+ Matlab primero comprueba si un nombre es una variable, luego una función incorporada, y fi-
nalmente una secuencia de comandos. Utilı́cese clear para mostrar una función o script si fuera
necesario.
+ Los comandos del sistema operativo se pueden ejecutarse desde la lı́nea de comandos de Matlab
escribiendo un signo de exclamación en frente de ellos, por ejemplo, !copy.
+ Se debe prestar atención al estilo de programación cuando se escriben scripts.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 61

E JERCICIOS
1. Decı́dase cuáles de los siguientes números no son aceptables en Matlab y explı́quese por qué no
lo son:

(a) 9,87 (e) 3.57*e2


(b) .0 (f) 3.57e2.1
(c) 25.82 (g) 3.57e+2
(d) -356231 (h) 3,57e-2

2. Explı́quese y fundaméntese, cuales de los siguientes no son válidos como nombres de variables
en Matlab:

(a) a2 (g) miXedUp


(b) a.2 (h) pay day
(c) 2a (i) inf
(d) ’a’one (j) Pay Day
(e) aone (k) min*2
(f) x 1 (l) what

3. Tradúzcase cada una de las siguientes expresiones a Matlab:


w
(a) p + (d) x1/2
u
w (e) yy+z
(b) p + (f) xy
z
u+v
w
p + u+v (g) (xy )z
(c) w
p + u−v (h) x − x3 /3! + x5 /5!

4. Tradúzcase cada una de las siguientes expresiones a Matlab:


(a) Agregar 1 al valor de i y almacenar el resultado en i.
(b) Elevar al cubo i, agregar j a esto, y almacenar el resultado en i.
(c) Hacer g igual a la mayor de las dos variables e y f.
(d) Si d es mayor que cero, hacer x igual a menos b.
(e) Dividir la suma de a y b por el producto de c y d, y almacenar el resultado en x.

5. ¿Cuál es el error en las siguientes instrucciones de Matlab?


(a) n + 1 = n;
(b) Fahrenheit temp = 9 * C / 5 + 32;
(c) 2 = x;

6. Escrı́base un programa para calcular x, donde



−b + b2 − 4ac
x=
2a
y a = 2, b = −10, c = 12.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 62

7. Hay ocho pintas en un galón, y 1.76 pintas en un litro. El volumen de un tanque es de 2 galones
y 4 pintas. Escrı́base un script en el que se introduce este volumen en galones y pintas y da el
resultado en litros.
8. Escrı́base un programa para calcular el consumo de combustible. Debe asignarse la distancia
recorrida (en kilómetros) y la cantidad de combustible utilizada (en litros) y calcular el con-
sumo en km por litro, ası́ como de litros cada 100 km. Muéstrese una salida de este tipo:

Distancia Litros Consumidos km/L L/100km


528 46.23 11.42 8.76

9. Escrı́base las instrucciones en Matlab que intercambian el contenido de dos variables a y b,


usando solamente una variable adicional t.
10. Inténtese el ejercicio 9 sin usar variables adicionales!
11. Si C y F son temperaturas en grados Celsius y Fahrenheit respectivamente, la fórmula para con-
versión de Celsius a Fahrenheit es:
9C
F= + 32
5
(a) Escrı́base un script en el que se ingrese la temperatura Celsius y muestre el equivalente en
Fahrenheit con algún tipo de comentario, por ejemplo:

La temperatura Fahrenheit es: ...

Inténtese con las siguientes temperaturas Celsius

i. 0 iii. -40
ii. 100 iv. 37

(b) Escrı́base un script para utilizar vectores y operaciones elemento a elemento para calcular y
mostrar el equivalente Fahrenheit de temperaturas en Celsius en el rango desde 20 a 30 en
intervalos de 1, en dos columnas, por ejemplo:

Celsius Fahrenheit
20.00 68.00
21.00 69.80
...
30.00 86.00

12. Genérese una tabla de conversiones de grados sexagesimales (primera columna) a radianes (se-
gunda columna). Grados deben ir de 0 a 360 en pasos de 10. Recúerdese que π radianes son 180
grados.
13. Constrúyase una matriz (tabla) con grados en la primera columna de 0 a 360 en pasos de 30, con
senos en la segunda columna, y cosenos en la tercera columna. Ahora añádanse tangentes en la
cuarta columna. ¿Que está pasando? Pruébense varianteses con el comando format.
14. Escrı́base un script que muestre una lista de enteros de 10 a 20 inclusive, cada uno con su raı́z
cuadrada en la columna de al lado.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 63

15. Escrı́base una sola instrucción que permita encontrar y mostrar la suma de los sucesivos enteros
pares 2, 4, . . . , 200.
16. Diez alumnos de una clase escriben una prueba. Las calificaciones son de 1 a 10. Todas se in-
troducen en un vector en Matlab. Escrı́base un script para encontrar y mostrar la nota promedio.
Pruébese con las siguientes notas:

5 8 0 10 3 8 5 7 9 4

S UGERENCIA: Utilı́cese la función mean.

17. ¿Cuáles son los valores de x y de a luego que las siguientes instrucciones han sido ejecutadas?
a = 0;
i = 1;
x = 0;
a = a + i;
x = x + i / a;
a = a + i;
x = x + i / a;
a = a + i;
x = x + i / a;
a = a + i;
x = x + i / a;

18. Reescrı́banse las declaraciones en ejercicio 17 de manera más concisa mediante el uso de un ciclo
for. ¿Se puede hacer aún mejor y vectorizar el código?
19. Considérese el caso n = 4.

(a) Realı́cese a mano la secuencia de comandos del siguiente script:

n = input (’Numero de terminos?’);


s = 0;
for k = 1: n
s = s + 1 / (k ˆ 2);
end;
disp (sqrt (6 * s))

Si ejecuta esta secuencia de comandos para los valores grandes de n se encuentra que la
salida se acerca a un lı́mite conocido. ¿De qué se trata?
(b) Vuélvase a escribir el script usando vectores y operaciones elemento a elemento.
20. Realı́cense a mano los cálculos de la siguiente secuencia de comandos. Elabórese una tabla de
los valores de i, j y m para mostrar cómo sus valores cambian mientras el script se ejecuta. Com-
pruébense sus respuestas mediante la ejecución del script.

v = [3 1 5];
i = 1;
for j = v
i = i + 1;
if i == 3

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 64

i = i + 2;
m = i + j;
end
end;
21. La corriente de estado estacionario I que fluye en un circuito que contiene una resistencia R = 5,
capacitancia C = 10, e inductancia L = 4 en serie está dada por
E
I=q
1
R2 + (2πωL − 2πωC )2

donde E = 2 y ω = 2 son la tensión de entrada y la frecuencia angular respectivamente. Calcúlese


el valor de I.
22. La cuenta de electricidad para los residentes en un pueblo pequeño se calculan de la siguiente
manera:
- si se consumen 500 kw o menos el costo es de 2 centavos de dólar por unidad;
- si, pero no se utilizan más de 500 a 1000 kw, el costo es de $ 10 para las primeros 500 kw,
y luego 5 centavos por cada kw de más de 500;
- si se utilizan más de 1000 kw, el costo es de $ 35 para los primeras 1000 kw más 10 centavos
por cada kw de más de 1000;
- además, se carga una tarifa de servicio básico de $ 5, sin importar la cantidad de electricidad
consumida.
Escrı́base un programa en el que se ingresan cinco consumiciones en un vector, y utiliza un ciclo
for para calcular y mostrar el costo total para cada uno: 200, 500, 700, 1000, 1500.
23. Supóngase que se depositan $ 50 por mes en una cuenta bancaria todos los meses durante un año.
Cada mes, después de que el depóósito se ha hecho, se agrega el interés a la tasa de 1 por ciento al
saldo, por ejemplo, después de un mes, el saldo es $ 50.50, y después de dos meses es $ 101.51.
Escrı́base un programa para calcular e imprimir el saldo de cada mes durante un año. Organizése
la salida de la siguiente manera:

MES SALDO AL FIN DEL MES


1 50.50
2 101.51
3 453.02
...
12 640.47

24. Si se invierten $ 1000 por un año a una tasa de interés del 12 por ciento, el saldo es $ 1120 al final
del añoo. Pero si el interés se capitaliza a una tasa del 1 por ciento mensual (es decir, 1/12 de la
tasa anual), se obtiene un poco más de interés, ya que se capitaliza. Escrı́base un programa que
utilice un ciclo for para calcular el saldo después de un año de interés compuesto de esta manera.
La respuesta deberı́a ser $ 1126.83.
Evalúese la fórmula para este resultado por separado como: 1000 × 1.0112 .
25. Un empleado abre una caja de ahorros con $ 100000 a principios de enero. A continuación, hace
un depósito de $ 1000 al final de cada mes durante los siguientes 12 meses (de finales de enero
en adelante). El interés se calcula y se agrega a su cuenta al final de cada mes (antes de que el
siguiente depósito de $ 1000 esté hecho).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 65

La tasa de interés mensual depende de la cantidad A en su cuenta en el momento en que se calculan


los intereses, de la siguiente manera:

A ≤ 110000, 1 porciento
110000 < A ≤ 125000, 1.5 porciento
A > 125000, 2 porciento

Escrı́base un programa que muestre, para cada uno de los 12 meses, con los encabezamientos
adecuados, la situación al final del mes de la siguiente manera: el número del mes, la tasa de
interés, el monto de los intereses y el nuevo saldo.
26. Se ha sugerido que la población de los Estados Unidos puede ser modelada por la fórmula
197273000
P(t) =
1 + e−0.03134(t−1913.25
donde t es la fecha en años. Escrı́base un programa para calcular y mostrar la población cada
diez años a partir de 1790 a 2000. Realı́cese un gráfico de población versus tiempo. Utilı́cese
el programa para averiguar si la población llega a un “estado de equilibrio”, es decir, si deja de
cambiar.

27. Se obtiene un préstamo hipotecario por un monto L para comprar una casa. La tasa de interés r
es el 15 porciento. El pago P fijo mensual que pagará por el préstamo exactamente sobre N años
está dado por la fórmula
rL(1 + r/12)12N
P=
12[(1 + r/12)12N − 1]
(a) Escrı́base un programa para calcular e imprimir P si N = 20 años, y el préstamo es por $
50000. Se debe obtener $ 658.39.
(b) Es interesante ver cómo los pagos P cambian con el perı́odo N sobre el cual usted paga el
préstamo. Ejecútese el programa para diferentes valores de N (úsese input). Véase si es
posible encontrar un valor de N para el cual el pago es inferior a $ 625.
(c) Ahora vuélvase a fijar N = 20 años, y examı́nese el efecto de diferentes tasas de interés. Se
debe ver que el aumento de la tasa de interés en un 1 por ciento (0.01) incrementa el pago
mensual en aproximadamente $ 37.

2014 - O.R. FAURE


Capı́tulo 3

Diseño de programas y desarrollo de


algoritmos

Los objetivos de este capı́tulo son introducir al lector a los conceptos de diseño (de un programa) y plan
estructurado (pseudocódigo) como un medio para diseñar la lógica de un programa.

Aquı́ se ofrece una introducción al diseño de programas de computadora. El proceso de diseño secuen-
cial se elabora para ayudar a pensar en el desarrollo de las mejores estrategias de resolución de proble-
mas, las que se relacionan con el diseño de los procedimientos para utilizar un software como Matlab.
Se considerará el diseño de herramientas propias para ser agregadas a las que ya estn disponibles en
Matlab, por ejemplo, Simulink, la Symbolics Toolbos, y la Controls Toolbox. Ésta es una gran
ventaja de Matlab (y herramientas de este tipo); que permiten personalizar el entorno de trabajo para
satisfacer las necesidades propias. No es sólo el “Manual de Matemáticas” del estudiante, ingeniero o
cientı́fico modernos, sino que también es un entorno útil para el desarrollo de herramientas computa-
cionales que van más allá de cualquier manual para ayudar a resolver problemas matemáticos relativa-
mente complicados. La capacidad de utilizar toda la potencialidad de Matlab está limitada solamente
por la experiencia y la formación académica. Cuanto más vasto sea el conocimiento, se va a utilizar de
manera más productiva la imaginación y la capacidad creativa para desarrollar métodos que aprovechan
las capacidades de esta herramienta para ayudar a solucionar problemas técnicos. Éstos podrı́an ser
problemas del trabajo un curso, en proyectos de investigación, ingenierı́a y diseño de grado, ası́ como
en el trabajo profesional.

En la primera parte de este capı́tulo se discute el proceso de diseño. En la segunda se examinarán ejem-
plos adicionales del plan estructurado, que es la descripción detallada del algoritmo a implementar. Se
tendrán en cuenta programas relativamente simples, sin embargo, con el proceso descrito se pretende
dar una idea de lo que se va a enfrentar al tratar con problemas más complejos. Estos son, por supuesto,
la ingenierı́a, la ciencia y los problemas matemáticos que se aprenden durante los últimos años de la
educación formal, actividades de formación permanente (posterior a la graduación) y las responsabili-
dades de educación continua como lo requiere la profesión.

Sin duda, los ejemplos que se han examinado hasta ahora han sido muy simples desde la lógica. Esto
se debe a que se ha puesto énfasis en los aspectos técnicos de la manera de escribir las instrucciones en
Matlab de manera correcta. Es muy importante aprender de qué forma Matlab realiza las operaciones
aritméticas que forman la base de los programas informáticos más complejos diseñados para realizar
cáculos numéricos. Para diseñar un programa de manera exitosa es necesario entender el problema a
fondo, y descomponerlo en sus etapas lógicas fundamentales. En otras palabras, se tiene que desarrollar
un procedimiento sistemático o algoritmo para resolver el problema.

66
Matlab ESENCIAL PARA INGENIEROS 67

Hay una serie de métodos que pueden ayudar en el proceso de desarrollo de algoritmos. Aquı́ se prestará
atención a uno de estos enfoques, el plan estructurado, en el contexto de la resolución de problemas
técnicos con la ayuda de una computadora. Ya se ha mencionado brevemente el concepto de plan
estructurado. El desarrollo de este plan es la parte principal del proceso de diseño de software (o código
de computadora) porque son los pasos, de este plan, que se traducen en un lenguaje que la computadora
puede entender, por ejemplo, en los comandos de Matlab, algunos de los cuales ya se han introducido
con anterioridad.

1. E L PROCESO DE DISE ÑO DE UN PROGRAMA DE COMPUTADORA


El diseño de herramientas traducidas a Matlab (ya sean secuencias en la lı́nea de comandos o funciones,
que se describirán luego aquı́) y se guardan como archivos .m en el directorio Work son los objetivos
principales y de mayor utilidad para los usuarios de herramientas como Matlab. Hay numerosas tool-
boxes disponibles en la página de MathWorks (entre otras) en una variedad de temas de ingenierı́a y
ciencia para la industria y la investigación que pueden ser muy útiles. Un ejemplo es la Aerospace
Toolbox, que ofrece estándares de referencia, modelos ambientales y coeficientes aerodinámicos para
realizar el análisis en problemas de la industria aeroespacial avanzada y desarrollar y evaluar proyectos
en estos temas. Puede ser útil también realizar búsquedas en el sitio web de MathWorks para conocer
la variedad de productos disponibles para ayudar al ingeniero, cientı́fico y profesional. El sitio web es:
http://www.mathworks.com/.

En el directorio de trabajo por defecto, es \work, o en su propio directorio de trabajo, por ejemplo,
\mytools, que sin duda comenzará a acumular una gran cantidad de archivos .m que se van creando a
medida que se va utilizando MAtlab. Una forma de crear y llegar a su propio directorio de trabajo es
ejecutar los siguientes comandos:

>> mkdir mytools <Enter>


>> de mytools <Enter>

Ciertamente, es deseable asegurarse de que las herramientas desarrolladas estén razonablemente bien
escritas (es decir bien diseñadas). ¿Qué significa crear programas bien escritos?

Se pretende que las herramientas de diseñadas además de funcionar correctamente, puedan ser fácilmente
leı́das y entendidas, y por lo tanto, puedan ser modificadas sistemáticamente cuando se requiera. Los
programas deben satisfacer los requisitos relacionados con el problema o la clase de problemas que se
pretende resolver. Las especificaciones, es decir, la descripción detallada de la finalidad (o la función del
programa), sus datos de entrada, procesos, salidas y cualquier otro requisito especial, deben ser cono-
cidos para diseñar un algoritmo y un programa computacional eficiente. Se debe trabajar de manera
integral, es decir, todas las opciones deben ser consideradas sin errores dentro de las limitaciones de
las especificaciones. El programa debe ser legible y, por lo tanto, claramente comprensible. Por estas
razones, es útil descomponer las tareas principales (o el programa principal) en subtareas (o subprogra-
mas) que hacen las partes especı́ficas del plan principal. Es mucho más fácil de leer subprogramas que
tienen un menor número de lı́neas, que un programa principal de gran tamaño que no se desagregan
las subtareas de manera eficaz, sobre todo si el problema a resolver es relativamente complicado. Cada
subtarea debe ser diseñada de modo que pueda ser evaluada independientemente antes de su aplicación
en el esquema general (es decir, en el plan principal del programa). Un código bien escrito, cuando
funciona, es evaluado con mucha más facilidad en la fase de pruebas del proceso de diseño. Si fuera
necesario realizar cambios para corregir errores de signos o similares, éstos se pueden implementar
fácilmente. Una cosa a tener en cuenta a la hora de agregar comentarios para describir el proceso pro-
gramado es añadir los comentarios y las referencias de modo que pasado el tiempo del momento que
fue escrito el programa se sea capaz de saber exactamente lo que se hizo y con qué propósito. Téngase

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 68

en cuenta que las primeras lı́neas de comentarios en un archivo se muestran en la ventana de comandos
cuando escriba help seguido del nombre de su archivo (nombrar los archivos es también una parte im-
portante).

El proceso de diseño1 se describe a continuación. Los pasos se pueden enumerar de la siguiente manera:

Paso 1 Análisis del problema. Debe establecerse el contexto de la investigación propuesta con el fin de
proporcionar la motivación adecuada para el diseño de un programa de computador. El diseñador
debe reconocer plenamente la necesidad y debe desarrollar una comprensiń de la naturaleza del
problema a resolver.
Paso 2 Definición del problema. Se desarrolla una declaración detallada del problema matemt́ico a re-
solver por medio de un programa de computadora.
Paso 3 Esquema del proceso. Se definen los datos de entrada (inputs) necesarios y las salidas (outputs)
que debe producir el programa.
Paso 4 Algoritmo. Se diseã el procedimiento paso a paso utilizando el proceso secuencial (de arriba
hacia abajo) que descompone el problema general en problemas subproblemas. Las subtareas para
resolver este último se refinan mediante el diseño de una lista detallada de los pasos a programar.
Esta lista de tareas es el plan de la estructura; usualmente está escrito en pseudocódigo, es decir,
una combinación de lenguaje escrito, matemáticas y comandos de Matlab. El objetivo es diseñar
un plan que sea comprensible y fácil de traducir a un lenguaje de computadora.
Paso 5 Programa. Se traduce o convierte el algoritmo a un lenguaje de programación (por ejemplo,
Matlab) y se depuran los errores de sintaxis hasta que la herramienta se ejecuta de manera exitosa.
Paso 6 Evaluación. Se prueban todas las opciones y se lleva a cabo un estudio de validación del pro-
grama de computadora, por ejemplo, se comparan los resultados con otros programas que hagan
tareas similares, se comparan con los datos experimentales en su caso, y se comparar con las
predicciones teóricas basadas en una metodologı́a relacionada con los problemas a resolver por el
programa informático. El objetivo es determinar que las subtareas y el programa en general son
correctos y exactos. La depuración adicional en este paso es encontrar y corregir errores lógicos
(por ejemplo, errores de escritura de expresiones, poniendo un signo + donde se suponı́a debı́a
colocarse un signo -, y errores que pueden ocurrir después de ejecutar el programa con éxito (por
ejemplo, los casos en que se produce involuntariamente una división por cero).
Paso 7 Aplicación. Se resuelven los problemas para los que el programa fue diseñado. Si el programa
está bien diseñado y es útil podrı́a guardarse en su directorio de trabajo (es decir, entre las toolboxs
desarrolladas por el usuario) para su uso futuro.

1.1. E JEMPLO DEL P ROBLEMA DEL P ROYECTIL .


Paso 1 Considérese el problema proyectil examinado en un primer curso de fı́sica. Se supone que los
estudiantes de ingenierı́a y ciencias entenderán este problema (puede buscarse un texto de fı́sica
elemental que lo describa, las fórmulas que se aplican a este problema serán provistas en el sigu-
iente paso). En este ejemplo se quiere calcular la trayectoria de un proyectil (por ejemplo, una
pelota de golf), lanzado con una velocidad y con un ángulo de lanzamiento prescritos. Se quiere
determinar la trayectoria y la distancia horizontal del proyectil (u objeto) antes de que toque el
suelo. Supóngase que la resistencia del aire es nula y una fuerza gravitacional que actúa sobre el
objeto en la dirección opuesta de la distancia vertical desde el suelo es nula. El ángulo de lanza-
miento, θ 0 , se define como el ángulo medido desde la horizontal (plano de tierra) hacia arriba, en
la dirección vertical, es decir, 0 < θ 0 π/2, donde θ 0 = 0 implica un lanzamiento en la dirección
horizontal y θ 0 = π/2 implica un lanzamiento en la dirección vertical (es decir, en la dirección
1 Para una descripción más detallada sobre la tecnologı́a de diseño de software véase, por ejemplo, el libro de N ELL DALE ,

“C++ Data Structures”, Jones and Bartlett Series in Computer Science (1998).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 69

opuesta de la gravedad). Si g = 9.81 m/(s2 ) se utiliza como la aceleración de la gravedad, entonces


la velocidad de lanzamiento, V0 , se debe ingresar en unidades de m / s. Por lo tanto, si t > 0, es el
tiempo en segundos (s) desde el momento del lanzamiento de t = 0, las distancias recorridas en x
(dirección horizontal) e y (la direcciı́on vertical) están dadas en metros (m). Se quiere determinar
el tiempo que transcurre desde el inicio del movimiento hasta el instante que toca el suelo, la
distancia horizontal recorrida y la forma de la trayectoria. Además, representar gráficamente la
velocidad del proyectil versus la dirección de este vector. Es necesaria, por supuesto, la teorı́a
(es decir, las expresiones matemáticas) que describe la solución de este problema con el fin de
desarrollar un algoritmo para obtener las respuestas al problema proyectil con resistencia cero.
Paso 2 Las fórmulas matemáticas que describen la solución al problema proyectil descrito en el Paso 1
son proporcionados ahora. Dados el ángulo y la velocidad de lanzamiento, la distancia horizontal
recorrida desde x = y = 0, que es la ubicación de coordenadas del lanzador, es

V02
xmax = 2 sin(θ 0 ) cos(θ 0 ).
g
El tiempo desde t = 0 (lanzamiento del proyectil) hasta alcanzar xmax (es decir, su alcance) es
V0
txmax = 2 sin(θ 0 ).
g
El objeto alcanza su altura máxima

V02 2
ymax = sin (θ 0 ),
2g
en el instante
V0
tymax = sin θ 0 .
g
Para este problema la distancia horizontal recorrida cuando el objeto alcanza la altitud máxima es
xymax = xmax /2.0. La trayectoria (o recorrido) se describe mediante el siguiente par de coordenadas
en un instante de tiempo dado entre t = 0 y txmax :

x = V0 t cos(θ 0 ),
g
y = V0 t sin(θ 0 ) − t 2 .
2
Es necesario resolver estas ecuaciones en el rango de tiempo 0 < t ≤ txmax prescritos para condi-
ciones de lanzamiento V0 > 0 y 0 < θ ≤ π/2. Entonces, el valor máximo de la altitud y el
alcancese calculan junto con sus respectivos tiempos de llegada. Por último, se desea trazar una
gráfica de V versus θ , donde
q
V = (V0 cos(θ 0 ))2 + (V0 sin(θ 0 ) − gr)2 ,

y  
−1 Vy
θ = tan
Vx
Se debe tener en cuenta cuando se estudian las soluciones basadas en estas fórmulas que la re-
sistencia del aire se supone despreciable y la aceleración de la gravedad se supone constante.
Paso 3 Los datos de entrada requeridos son g, V0 y θ además de un número finito de pasos de tiempo entre
t = 0 y el tiempo que el objeto toca el suelo. Las salidas son el alcance y el tiempo transcurrido
desde el lanzamiento hasta que toca el suelo, la altitud máxima y el instante en que se alcanza, y
la forma de la trayectoria en una gráfica.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 70

Pasos 4 y 5 A continuación se da como un programa en Matlab la estructura del algoritmo para resolver este
problema; esto se debe a que es un problema relativamente sencillo, la traducción a Matlab está
bien comentada con los detalles del enfoque aplicado para resolver el problema, es decir, son
enumerados los pasos del algoritmo. Este plan y el archivo .m, por supuesto, son el resumen de
los resultados desarrollados por probar una serie de enfoques durante el proceso de diseño y, por
lo tanto, descartando numerosas hojas de papel antes de resumir los resultados. Hay que tener
en cuenta que no es difı́cil enumerar la lista de pasos asociados con el diseño general de proceso,
es decir, la metodologı́a de resolución del problema técnico. Sin embargo, ciertamente no es tan
sencillo de poner en práctica los pasos porque éstos se basan en gran medida de la experiencia
en el diseño de soluciones técnicas. Por lo tanto, se debe comenzar por el estudio del diseño de
programas relativamente simples, como el que se describe en esta sección. El código evaluado y
probado se muestra a continuación.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Problema del proyectil con resistencia cero en un campo gravitacional
% constante g
% Escrito por D.T. Valentine - Septiembre de 2006
% Plan de ocho pasos en Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 1. Definicion de las variable de entrada
%
g = 9.81; % Gravedad en m/(s ˆ 2)
vo = input( ’Velocidad de lanzamientoen m/s’)
tho = input( ’Angulo de lanzamiento en grados’)
tho = pi*tho/180; % Conversion de grados a radianes
%
% 2. Calculo del alcance y el tiempo del lanzamiento
%
txmax = (2*vo/g) * sin(tho);
xmax = txmax * vo * cos(tho);
%
% 3. Definicion de los pasos de tiempo para calcular la trayectoria
%
dt = tmax/100;
t = 0:dt:txmax;
%
% 4. Calculo de la trayectoria
%
x = (vo * cos(tho)) .* t;
y = (vo * sin(tho)) .* t - (g/2) .* t.2;
%
% 5. Calculo de la velocidad y la direccion angular del proyectil

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 71

% Notese que vx = dx/dt, vy = dy/dt.


%
vx = vo * cos(tho);
vy = vo * sin(tho) - g .* t;
v = sqrt(vx.*vx + vy.*vy);
th = (180/pi) .* atan2(vy,vx);
%
% 6. Calculo del tiempo, distancia horizontal y altitud maxima alcanzada
%
tymax = (vo/g) * sin(tho);
xymax = xmax/2; ymax = (vo/2) * tymax * sin(tho);
%
% 7. Visualizacion de salidas
%
disp([’Alcance en m = ’, num2str(xmax), ’ Duracion en s = ’, ...
num2str(txmax)])
disp(’ ’)
disp([’Altitud maxima en m = ’,num2str(ymax), ...
’Tiempo transcurrido en s = ’, num2str(tymax)])
plot(x, y, ’k’, xmax,y(size(t)), ’o’, xmax/2, ymax, ’o’)
title([Trayectoria del proyectil , vo =, num2str(vo), th =, ...
num2str(180*th/pi)])
xlabel(x), ylabel(y) % Grafica en Figure 1.
figure % Creacion de una nueva figura
plot(v,th,r)
title(Velocidad del proyectil vs angulo)
xlabel(V), ylabel(theta) % Grafica en Figure 2.
%
% 8. Stop.
%
Pasos 6 y 7 El programa fue evaluado mediante la ejecución de un gran número de valores diferentes para el
ángulo y velocidad de lanzamiento dentro de las especificaciones requeridas. El ángulo de 45 gra-
dos se comprueba para determinar el rango máximo que se produjo en este ángulo para todas las
velocidades de lanzamiento especificadas. Esto es bien conocido para el caso de la resistencia del
aire cero en un campo de fuerza constante g. Se ejecutó este código para V0 = 10m/s y θ 0 = 45
grados, y se graficó la trayectoria y el ángulo versus la velocidad en las figuras.

¿Cómo se pueden encontrar ejemplos de programas de Matlab (buenos o no tanto) para ayudar a desa-
rrollar herramientas que resuelvan los problemas propios? Es claro que el aprendizaje con el ejemplo
no es una mala manera de aprender. Los usuarios de Matlab desarrollan continuamente nuevas her-
ramientas. Si una nueva herramienta resulta ser de uso generalizado, MathWorks puede incluirla en su
lista de productos (si es que el autor de esta nueva herramienta desea hacerlo). También hay muchos
ejemplos de scripts útiles que son colocados en la world wide web (www) para que cualquier persona

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 72

Trayectoria del proyectil , V0 =10 y e0 =45


3

2.5

1.5
y

0.5

0
0 2 4 6 8 10 12
x

Figura 3.1: Trayectoria del proyectil

interesada en ellos pueda acceder. Éstos, por supuesto, deben ser evaluados cuidadosamente, ya que es
responsabilidad de los usuarios y no de los creadores la exactitud de los resultados de la herramienta.
Esta responsabilidad es válida para todas las herramientas aplicadas por el ingeniero y el cientı́fico. Por
lo tanto, es muy importante que (al igual que en el uso de un aparato de laboratorio) el ingeniero o el
cientı́fico verifiquen por sı́ mismos que la herramienta que están utilizando es realmente válida para el
problema que se intenta resolver.

Para ilustrar lo fácil que es encontrar ejemplos de secuencias de comandos se tipeó Matlab examples
en un de los motores de búsqueda disponibles y encontró lo siguiente (entre otros):

>> t = [0: .1: 2*pi]’;


>> subplot(2, 2, 1)
>> plot(t, sin(t))
>> subplot(2, 2, 2)
>> plot(t, cos(t))
>> subplot(2, 2, 3)
>> plot(t, exp(t))
>> subplot(2, 2, 4)
>> plot(t, 1./(1 + t.ˆ 2))

Este script muestra de qué manera poner cuatro gráficas en una misma ventana. Para comprobar que
funciona, escrı́base cada una de estas lı́neas en la ventana de comandos seguido de <Enter>. Ténganse
en cuenta las posiciones de cada gráfica; su ubicación está determinada por los tres enteros en la lista
de argumentos de la función subplot. Puede buscarse más información buscando subplot en el menú
help.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 73

Velocidad del proyectil vs angulo


50

40

30

20

10

0
e

ï10

ï20

ï30

ï40

ï50
7 7.5 8 8.5 9 9.5 10
V

Figura 3.2: Ángulo vs velocidad

El siguiente ejemplo se proporciona para ilustrar cómo encontrar las herramientas más avanzadas de
fuentes apropiadas disponibles en la world wide web (www). No es obviamente tan fácil de leer si
no se estf́amiliarizado con el sistema dinámico considerado por el autor. Por lo tanto, también se pro-
porcionan un par de comentarios sobre la búsqueda de informacióón relacionada con este problema
(como un ejemplo de hacer la investigación) para que el lector tenga en cuenta. Desde el sitio web
https://www.mathworks.com/matlabcentral/fileexchange/, que está en la página de Matlab
Central, se puede realizar un intercambio de contenidos para la comunidad de usuarios de Matlab
(se ha descargado el siguiente M-file mandelbrot14.m. El autor de éste y otras notas se encuentra
en la parte superior del archivo. Puede escribir este archivo en el editor y guardarlo con su nombre o
descargarlo directamente del sitio web en su directorio de trabajo. Se puede ejecutar y ver lo que hace;
para esto se tiene que escribir el siguiente comando:

>> mandelbrot14(1)

No olvide pulsar <Enter>. Toma un par de minutos para ejecutarlo en un equipo relativamente rápido;
por lo tanto, se debe tener un poco de paciencia para esperar de la gráfica del conjunto de Mandelbrot.

function mandelbrot14(any)
% Mandelbrot set v0.14
% Sai Wing Man 05/09/2006
% RUN: mandelbrot14(1) first to get the axes, ...
% then mandelbrot14 (no argin) after..
% .. but first zooming in using the zoom tool.
% I dont ever intend to update this file.
%{ Copyright (C) 2006 Sai Wing Man

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 74

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but


WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.


You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tic
if nargin == 1
% default axes
x0 = -2;
x1 = 0.5;
y0 = -1;
y1 = 1;
axis([x0 x1 y0 y1])
end
k = axis;
x0 = k(1);
x1 = k(2);
y0 = k(3);
y1 = k(4);
clc
clf
num = 440;
[x, y] = meshgrid(x0:(x1 - x0)/(num - 1):x1, (y0:(y1 - y0)/(num - 1):y1)*i);
c = x + y;
z = zeros(num,num);
jvec = 5: 30: 500;
jindex = 1;
cmap = colormap(hsv(length(jvec)));
hold on
for j = 1: max(jvec)
z = z .ˆ 2 + c;
if (jvec(jindex) == j)
if (jindex < length(jvec))
plot(real(~isnan(z).*c), imag(~isnan(z).* c),’.’, ...
’Markersize’, 0.5, ’Color’, cmap(jindex, :))
end
clc
jindex = jindex + 1;
perc = j/max(jvec)*100/2 + (jindex-2)/length(jvec) * 100/2;
disp([int2str(perc)’% done’])
end
end

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 75

plot(real(~isnan(z).*c), imag(~isnan(z).*c), ’.’, ...


’Markersize’, 0.5, ’Color’,[0 0 0])
axis([x0 x1 y0 y1])
clc
toc

Este ejemplo ha sido descargado de la www para ilustrar el hecho de que los problemas relativamente
complejos ya han sido programados por otros. Si se tipea el nombre de este archivo, se obtendrá una
gráfica del Conjunto de Mandelbrot. Ésto ilustra los resultados de la siguiente búsqueda de información:
Si se está interesado en algunas de las contribuciones matemáticas de Benoit Mandelbrot, entonces es
posible encontrar ejemplos de problemas resueltos relacionados con su trabajo en la web. Tales ejemplos
pueden ayudarle en su investigación de las consecuencias de sus contribuciones especialmente cuando
se necesitan generar programas para examinar sus ideas matemáticas. El M-file madelbrot14.m es un
ejemplo de la forma de presentar las soluciones de un problema no lineal desarrollado por S AI W ING
M AN, Versión 14 (2006). Hay un par de lı́neas de comandos de teclado en el código. Una de ellas
es c = x + y;, donde x e y son las coordenadas de puntos en una cuadrı́cula en el plano complejo
generada por la función meshgrid. El otro comando de teclado es z = z.ˆ 2 + c;. En función del
valor de z cada vez que pasa por el ciclo for se crea un mapa de color. Este mapa es una ilustración
del conjunto de Mandelbrot, como se describe en el libro de M ANDELBROT titulado “The Fractal Ge-
ometry of Nature”, publicado por el W.H. Freeman & Co., New York (1983). Las implicaciones de la
ilustración generada por esta herramienta están más allá del alcance de esta presentación; sin embargo,
es una ilustración interesante para ver de qué manera se puede generar una imagen con las matemáticas.
También, se puede buscar en la biblioteca para obtener más información sobre este tema fascinante. Este
y otros temas en los fenómenos no lineales se están volviendo cada vez más importantes en la ingenierı́a
y en las ciencias. Las herramientas como Matlab pueden ayudar a aprender más acerca de estos temas
cuando se enfrenta a ellos.

Este tipo de búsqueda puede realizarse sobre cualquier tema de interés actual para el ámbito académico,
la investigación, el desarrollo y el diseño. Si se realiza la búsqueda en la world wide web, que sin duda
puede beneficiar de la información disponible sobre el mismo; la habilidad de la bsqueda es algo que se
aprende con la práctica y se refuerza por necesidad. La habilidad de encontrar información útil sobre
cuestiones técnicas y la habilidad asociada con el uso de herramientas como Matlab requiere práctica!
Hay numerosas contribuciones a la “literatura de programación informática” como ésta para probar.

2. OTROS EJEMPLOS DE PROGRAMACI ÓN ESTRUCTURADA


Un plan estructurado normalmente se escribe en lo que se llama pseudocódigo, es decir, declaraciones
generales, fórmulas matemáticas y Matlab, que describen en detalle la forma de resolver un problema.
No es necesario ser un experto en algún lenguaje de programación especial para entender pseudocódigo.
Un plan estructurado puede ser escrito en un número de niveles, cada uno de complejidad creciente,
como se desarrolla la estructura lógica de un programa.

Supóngase que se quiere escribir un script para convertir una temperatura en la escala Fahrenheit (donde
el agua se congela y hierve a 32◦ F y 212◦ F, respectivamente) a la escala de grados Celsius más familiar.
Un plan de primer nivel podrı́a ser una simple declaración del problema:

1. Inicializar la temperatura en Fahrenheit.

2. Calcular y visualizar la temperatura en Celsius.


3. Parar.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 76

El Paso 1 es bastante sencillo, pero Paso 2 necesita ser elaborado, por lo que será necesario un plan de
segundo nivel. Éste podrı́a ser algo ası́:
1. Inicializar la temperatura en Fahrenheit (F).
2. Calcular la temperatura en Celsius (C) de la siguiente manera:
2.1.Restar 32 a F y se multiplicar por 5/9.
3. Display el valor de C.
4. Parar
No existen reglas estrictas y rápidas sobre cómo escribir planes. El punto esencial es cultivar la disci-
plina mental de tener la lógica clara antes de intentar escribir el programa. El enfoque “de arriba abajo”
de los planes significa que la estructura general de un programa está claramente pensada antes de tener
que preocuparse por los detalles de la sintaxis (codificación), y esto reduce el número de errores de
manera considerable.

Figura 3.3: Estructura de un algoritmo para la ecuación cuadrática

Una secuencia de comandos para implementar plan podrı́a ser la siguiente:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Script para convertir temperaturas de F a C
% Escrito por Daniel T. Valentine - Octubre de 2006
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

F = input (’Temperatura en grados F: ’)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 77

C = (F - 32) * 5/9;
disp ([’Temperatura en grados C = ’, num2str(C)])
% Parar

Se realizaron a mano dos controles. Eran para F = 32, que dio C = 0, y F = 212, lo que dio C = 100. Se
encontró que los resultados eran correctos y, por lo tanto, esta secuencia de comandos simple es, como
tal, validada.

2.1. L A ECUACI ÓN CUADR ÁTICA . En la escuela probablemente se han resuelto cientos de ecua-
ciones de segundo grado de la forma siguiente:

ax2 + bx + c = 0.

En la Figura 3.3 se muestra un plan estructurado completo para encontrar la(s) solución(es) x, dados
cualesquiera valores de a, b y c. La Figura 3.4 muestra la gráfica de una ecuación de segundo grado con
raı́ces reales distintas.

Figura 3.4: Gráfica de una función cuadrática con raı́ces reales distintas indicadas por o.

Para el momento de escribir el programa, se puede escribir la estructura en el Editor de Matlab, como
se describe en el Capı́tulo 2 y luego utilizando cortar y pegar, se hace otra copia de la estructura debajo
de la primera, y luego se traduce ésta en instrucciones de Matlab. Si se trata de un buen bosquejo, se
traduce lı́nea por lı́nea. Luego se comenta el plan original con Text -> Comment, y se puede grabar.

3. P ROGRAMACI ÓN E STRUCTURADA CON FUNCIONES


De aquı́ en adelante se realizarán algunos ejemplos. Los programas más avanzados deben ser estructura-
dos por medio de funciones creadas por el usuario (m-files). Estos serán tratdos en detalle más adelante.
Una función m-file es un tipo de archivo de comandos (es decir, un archivo con una extensión .m) que
se puede “llamar” de forma interactiva, o desde otros scripts, de manera especı́fica.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 78

El script “principal” en sı́ entonces se parece mucho al plan de estructura de primer nivel del problema.

Por ejemplo, el problema de la ecuación cuadrática puede ser planificado como estructura de primer
nivel de la siguiente manera:

1. Ingresar los datos.

2. Encontrar y mostrar la(s) soluciń(es)


3. Parar.

Utilizando la función quad.m para hacer el trabajo sucio, podrı́a traducirse directamente en la siguiente
secuencia de comandos de Matlab:

a = input(’Introduzca los coeficientes:’);


x = quad(a);

(Los detalles de cómo codificar este problema en particular se dejan como ejercicio en un capı́tulo
posterior)

4. R ESUMEN
+ Un algoritmo es un procedimiento lógico sistemático para resolver un problema.
+ Un algoritmo debe ser desarrollado para un problema antes de que éste sea codificado.
+ Un plan de estructura es una representación de un algoritmo en pseudocódigo.

+ Un m-file de una función es un tipo de archivo script diseñado para realizar una tarea en particular,
y que puede ser activado (invocado) cuando sea necesario.

E JERCICIOS
Los problemas en estos ejercicios deben tener un plan de estructura planificada, antes de ser escritos
como programas de Matlab (cuando sea necesario).
1. El plan de estructura en este ejemplo define una construcción geomtrica. Llévese a cabo el plan
esbozando la construcción:

(a) Dibujar dos ejes perpendiculares, x e y


(b) Dibujar los puntos A = (10, 0) y B = (0, 1)
(c) Mientras A no coincide con el origen reı́tase
. Dibujar una recta que una A y B
. Mover A una unidad a la izqueirda sobre el eje x
. Mover B una unidad hacia arriba sobre el eje y
(d) Detener

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 79

2. Considérese el siguiente plan de estructura, donde M y N representan variables de Matlab :

Hacer M = 44 y N = 28
Mientras M no es igual a N de repetir:
Mientras que M > N repetir:
Reemplazar valor de M por M - N
Mientras N > M repetir:
Reemplazar valor de N por N - M
par Visualizar M
Detener

(a) Recórrase el plan de estructura, esbozando el contenido de M y N durante la ejecución.


Dénse las salidas.
(b) Repı́tase para M = 14 y N = 24.
3. Escrı́base un programa para convertir una temperatura Fahrenheit a Celsius. Póngase a prueba
con los datos en el ejercicio donde se realiza la conversión inversa.
4. Escrı́base un script en el que se introduzcan dos números (que pueden ser iguales) y muestre el
más grande con un mensaje adecuado, o si son iguales, muestra un mensaje en este sentido.
5. Escrı́base un script para la solución general de la ecuación cuadrática ax2 + bx + c = 0. Utilı́cese
el plan de estructura de ecuación cuadrtica de la Figura 3.3. El script debe ser capaz de manejar
todos las posibles valores de los datos a, b y c. Inténtese con los siguientes valores de a, b y c:
(a) 1, 1, 1 (raı́ces complejas);
(b) 2, 4, 2 (raı́ces iguales −1.0);
(c) 2, 2, −12 (raı́ces 2.0 y −3.0).
El plan de la estructura en la Figura 3.3 es para los lenguajes de programación que no pueden
manejar números complejos. Sin embargo Matlab puede hacerlo. Ajústese la secuencia de co-
mandos de modo que también se puedan encontrar raı́ces complejas. Póngase a prueba en el
primer caso; cuando las raı́ces son −0.5 ± 0.866i.
6. Desarróllese un plan de estructura para la solución de dos ecuaciones lineales simultáneas (es
decir, las ecuaciones de dos rectas). El algoritmo debe ser capaz de manejar todas las situaciones
posibles, a saber: rectas que se intersectan, paralelas o coincidentes.
Escrı́base un programa para implementar el algoritmo, y prúebese en algunas ecuaciones de las
cuales conoce las soluciones, por ejemplo,

 x + y = 3,

2x − y = 3.

(x = 2, y = 1). Sugerencia: Comiéncese derivando una fórmula algebraica para la solución del
sistema: 
 ax + by = c,

dx − ey = f.

El programa debe ingresar los coeficientes a, b, c, d, e y f . Se verá en los capı́tulos finales


que Matlab tiene una manera muy elegante de resolver sistemas de ecuaciones directamente,
utilizando técnicas de álgebra matricial. Pero es bueno para el desarrollo de las habilidades de
programación hacerlo de la manera clásica, como en este ejercicio.

2014 - O.R. FAURE


Capı́tulo 4

Funciones de Matlab y utilidades en


importación-exportación de datos

Los objetivos de este capı́tulo son:


1. Familiarizarse con algunas de las funciones de Matlab más comunes.
2. Introducir brevemente a las formas de importación y exportación de datos dentro y fuera del área
de trabajo de Matlab utilizando:
(a) Los comandos load y save.
(b) El asistente de importación.
(c) Las funciones debajo nivel de input/output (I/O).

Hasta el momento uno deberı́a ser capaz de escribir un programa en Matlab que introduciendo los
datos, realize operaciones aritméticas simples sobre éstos, tal vez con bucles y decisiones, y muestre los
resultados de los cálculos en una forma comprensible. Sin embargo, los problemas más interesantes en
la ciencia y la ingenierı́a son propensos a involucrar a funciones matemáticas especiales como senos,
cosenos logaritmos, etc. Matlab posee una gran colección de estas funciones; se ha visto ya. En
este capı́tulo se da una introducción a las funciones más comunes disponibles en Matlab. Además, es
posible que se desee importar datos que serán graficados u operados matemáticamente, y exportarlos
para su uso futuro. Por lo tanto, aquı́ también setrata el tema de la importación de datos en el workspace
de Matlab de diversas fuentes. También se analiza la exportación de datos a los archivos en el directorio
de trabajo para su uso posterior con Matlab u otras herramientas de software.

1. A LGUNAS FUNCIONES COMUNES


En un apéndice aparecen tablas de funciones y comandos de Matlab. A continuación se proporciona una
lista corta de algunos de los más comunes. Utilı́cese helpwin en la lı́nea de comandos para ver una lista
de categorı́as de funciones, con enlaces a las descripciones de éstas. Otra opción es ir a Contents en el
Help Navigator (el panel izquierdo de Ayuda), y expandir de manera sucesiva Matlab, Reference,
Matlab Function Reference donde pueden elegirse cualesquiera de las funciones en Functions
by Category, o en Alfabetical List of Funcions.

Téngase en cuenta que si el argumento de una función es una matriz, esta función se aplica elemento
por elemento para todos los valores de la matriz, por ejemplo:

80
Matlab ESENCIAL PARA INGENIEROS 81

sqrt([1 2 3 4])

devuelve

1.0000 1.4142 1.7321 2.0000

Dado que este texto está escrito en un estilo tutorial, se espera que el lector examine la siguiente lista
de funciones comunes de Matlab. También, en cierta medida, se supone que se tiene, a partir de los
primeros cursos en matemáticas y ciencia, algún conocimiento acerca de estas funciones. Una forma
de examinarlas es graficándolas. Un ejercicio interesante serı́a tomar un tiempo experimentando con
Matlab y conocer el comportamiento de las siguientes funciones!

Por ejemplo, hágase lo siguiente con todas las funciones de la variable x:

x = -1:.1:1; <Enter>
plot(x, abs(x), ’o’) <Enter>

Se debe obtener una ilustración que parece una letra V.

abs(x)
valor absoluto de x.

acos(x)
arco coseno (arcocoseno) de x entre 0 y π.

acosh(x)

coseno hiperbólico inverso de x, es decir, ln(x + x2 − 1).

asin(x)
arco seno (seno inverso) de x entre −π/2 y π/2.

asinh(x)

seno hiperbólico inverso de x, es decir, ln(x + x2 + 1).

atan(x)
arco tangente de x entre −π/2 y π/2.

atan2(y, x)
arco tangente de y/x entre −π y π.

atanh(x)
 
1 1+x
tangente hiperbólica inversa de x, es decir, ln .
2 1−x

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 82

ceil(x)
número entero más pequeño que excede x, es decir, se redondea hacia arriba al número entero
más próximo, por ejemplo, ceil(-3.9) devuelve -3, y ceil(3.9) devuelve 4.

clock
fecha y hora en un vector de seis elementos, por ejemplo, los comandos:

t = clock;
fprintf(’% 02.0f:% 02.0f:% 02.0f n’, t(4), t(5), t(6));

dan como resultado 14:09:03.


Obsérvese cómo horas, minutos y segundos son completados con ceros a la izquierda si esto fuera
necesario.

cos(x)
coseno de x.

cosh(x)
ex + e−x
coseno hiperbólico de x, es decir, . (Véase la Figura 4.1).
2

cot(x)
cotangente de x.

csc(x)
cosecante de x.

cumsum(x)
suma acumulada de los elementos de x, por ejemplo, cumsum(1: 4) devuelve [1 3 6 10].

date
fecha en una cadena en formato dd-mmm-aaaa, por ejemplo, 02-Feb-2001.

exp(x)
valor de la función exponencial ex (Véase Figura 4.1).

fix(x)
redondea hacia entero más cercano a cero, por ejemplo, fix(-3.9) devuelve -3 y fix(3.9)
devuelve 3.

floor(x)
mayor entero que no exceda de x, es decir, se redondea hacia abajo al entero más cercano, por
ejemplo, floor(-3.9) devuelve -4, floor(3.9) devuelve 3.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 83

ï2

ï4
ï2 ï1.5 ï1 ï0.5 0 0.5 1 1.5 2

Figura 4.1: La función exponencial, el seno hiperbólico y el coseno hiperbólico.

length(x)
el número de elementos del vector x.

log(x)
logaritmo natural de x.

log10(x)
logaritmo en base 10 de x.

max(x)
elemento máximo del vector x.

mean(x)
valor medio de los elementos de vector x.

min(x)
elemento mı́nimo del vector x.

pow2(x)
2x .

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 84

prod(x)
producto de los elementos de x.

rand
número pseudo-aleatorio en el intervalo [0, 1). El valor devuelto es pseudo-aleatorio en lugar
de verdaderamente aleatorio en el sentido de que hay un algoritmo que determina rand de la
“semilla” inicial. La misma semilla va a generar la misma secuencia “aleatoria”.

realmax
mayor número positivo de punto flotante en el equipo.

realmin
número positivo más pequeño de punto flotante en el equipo.

rem(x, y)
resto cuando se divide x por y, por ejemplo, rem(19, 5) devuelve 4 (5 entra 3 veces en 19, y
sonbran 4).

Estrictamente, rem(x, y) devuelve x - y * n, donde n = fix (x / y) es el entero más


próximo a x/y. Esto demuestra cómo se manejan argumentos negativos y/o argumentos no en-
teros.

fix y rem son útiles para convertir unidades más pequeñas a unidades más grandes, por ejemplo,
pulgadas a pies y pulgadas (un pie = 12 pulgadas). Las siguientes instrucciones convierten 40
pulgadas de esta manera:

pies = fix (40/12)


pulgadas = rem (40, 12)

A continuación se analizará un ejemplo que se espera pueda servir de modelo para examinar todas las
funciones enumeradas, ası́ como cualquier otra función de Matlab que pueda aparecer. Considérense
la funciones arcocoseno, arcoseno y arco tangente, es decir, acos(x), asin(x) y atan(x), respectiva-
mente. Si se especifica x, es decir, el coseno, el seno y la tangente, respectivamente, entre -1 y 1, ¿qué
cuadrante del cı́rculo es seleccionado para especificar los ángulos de salida?
Para proporcionar una respuesta, fue creado y ejecutado un m-file con la siguiente sucesión de coman-
dos. La comparación gráfica de los resultados calculados se ilustra en la Figura 4.2. Las instrucciones
en el final de la secuencia de comandos proporciona una interpretación de los resultados gráficos y, por
lo tanto, una respuesta a la pregunta planteada.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 85

1
asin(x)
acos(x)
atan(x)
0.8

0.6

x, the argument of the function 0.4

0.2

ï0.2

ï0.4

ï0.6

ï0.8

ï1
ï100 ï50 0 50 100 150 200
e in degrees

Figura 4.2: Una comparación de resultados de las funciones acos, asin y atan.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Script to compare the acos(x), asin(x), and atan(x) functions
% over the range -1 < x < 1.
% The values are converted to angles in degrees.
% The results are compared graphically.
%
% Script prepared by D. T. Valentine - September 2006.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The question raised is: What range of angles, i.e.
% which of the four quadrants of the circle from 0 to
% 2*pi are the angular outputs of each of the functions?
%
% Determine the values of x to be examined:
% x = -1:0.001:1; %
% Compute the arc-functions:
%
y1 = acos(x);
y2 = asin(x);
y3 = atan(x); %
% Convert the angles from radians to degrees:
%
y1 = 180*y1/pi;
y2 = 180*y2/pi;
y3 = 180*y3/pi;
%

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 86

% Plot the results:


%
plot(y1, x, y2, x, y3, x), grid, legend(’asin(x)’, ’acos(x)’, ’atan(x)’)
xlabel(’\theta in degrees’),
ylabel(’x, the argument of the function’)
%
% REMARKS: Note the following:
% (1) The acos(x) varies from 0 to 90 to 180 degrees.
% (2) The asin(x) varies from -90 to 0 to 90 degrees.
% (3) The atan(x) varies from -45 to 0 to 45 degrees.
% % Stop

2. I MPORTACI ÓN Y EXPORTACI ÓN DE DATOS


Cuando se comienza con la programación es frecuente la necesidad de almacenar datos en un disco.
El proceso de mover datos entre Matlab y archivos en el disco se llama importación (de archivos de
disco) y exportación (hacia archivos de disco). Los datos se guardan en archivos de disco en uno de
estos dos formatos: texto o binario. En formato de texto, los valores de datos son los códigos ascii, y
se pueden ver en cualquier editor de texto. En formato binario, los valores de datos no son los códigos
ascii y no se puede ver en un editor. El formato binario es más eficiente en términos de espacio de
almacenamiento requerido. En este capı́tulo se ofrece un breve resumen de las principales formas en
que las importaciones y exportaciones de datos de Matlab.

2.1. L OS COMANDOS load Y save. Si desea guardar datos entre sesiones de Matlab los comandos
save y load son seguramente los mejores a utilizar.

2.2. E XPORTACI ÓN DE DATOS EN FORMATO TEXTO (ascii). Para exportar (guardar) la matriz

A =

1 2 3
4 5 6

en formato ascii “delimitado” en el archivo MisDatos.txt utı́licese el comando

save MisDatos.txt A -ascii

Si ve MisDatos.txt en un editor de texto (o la escribe en la ventana de comandos) se verá de la siguiente


manera:

1.0000000e+000 2.0000000e+000 3.0000000e+000


4.0000000e+000 5.0000000e+000 6.0000000e+000

Los delimitadores son los caracteres utilizados para separar los valores de los datos en los archivos
(por defecto son utilizados los espacios). Se pueden usar las tabs en lugar de espacios al especificar
el calificador -tabs lugar de -ascii. Si guardan matrices de caracteres (strings) de esta manera, los
códigos ascii de los caracteres se escriben en el archivo.

2.3. E XPORTACI ÓN DE DATOS BINARIOS . El comando

save NombreDelArchivo x y z

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 87

guarda las variables x, y y z en el archivo NombreDelArchivo.mat en formato binario de Matlab


formato binario, es decir, un archivo .mat, que solamente puede ser utilizado por Matlab.

N OTA :
+ Si no se especifican las variables se guarda todo el workspace.
+ Por defecto se utiliza la extensión .mat. Si se desea se puede especificar una extensión diferente.
+ En la ayuda se pueden encontrar todas las opciones de almacenamiento.

2.4. I MPORTACI ÓN DE DATOS BINARIOS . El comando

load NombreDelArchivo

cargas todas las variables de NombreDelArchivo.mat en el workspace. Se puede consultar la ayuda


(help) para todas las opciones de load.

2.5. E L A SISTENTE DE I MPORTACI ÓN . El Asistente de Importación (Import Wizard) de Matlab


es la manera más sencilla de importar datos en el workspace durante una sesión interactiva.

I MPORTACI ÓN DE DATOS ascii. Utilı́cese el Asistente de importación para importar datos ascii
de la siguiente manera:
+ Inı́ciese el Asistente de importación, selecciónese Import Data en el menú File de Matlab .
También puede utilizarse uiimport en la lı́nea de comando para iniciarlo. Una lista de archivos
aparece en un cuadro de diálogo. Ábrase el archivo que se desea importar.
+ Selecciónese el delimitador utilizado en el archivo de texto (si esto fuera necesario). Hágase clic en
Next.
+ Selecciónense las variables que se desean importar. Por defecto, el Asistente de importación pone
todos los datos numéricos en una variable y todos los datos de texto en otras variables, pero
pueden elegirse otras opciones.
+ Hágase clic en Finish para importar los datos en las variables seleccionadas.
I MPORTACI ÓN DE DATOS BINARIOS . Para importar datos binarios con el Asistente de importación,
éste se debe iniciar de la misma forma que al importar datos de texto. Cuando el archivo se abre el
Asistente de importación procesa su contenido y crea las variables en función del tipo de datos en el
archivo. Compruébense las variables que se desean importar y hágase clic en Finish para crear las
variables seleccionadas. Es posible, por ejemplo, importar datos de una hoja de cálculo Excel de
c esta
manera. Si los datos son numéricos con los encabezados de fila y columna, el Asistente de importación
importará estos datos en una matriz numrica y los encabezados en un vector.

2.6. F UNCIONES DE E NTRADA /S ALIDA (I/O) DE BAJO NIVEL . Matlab tiene un conjunto de fun-
ciones para el manejo de archivos de Entrada/Salida de bajo nivel basadas en las funciones de En-
trada/salida de las Librerı́as Estándar ANSI C. Se pueden utilizar estas funciones para acceder a los
datos binarios escritos por programas en C o Java, por ejemplo, o para acceder bases de datos demasi-
ado grandes que no puedan ser cargadas completamente en el workspace.

Los programadores de C deben tener en cuenta que los comandos Entrada/Salida de Matlab no son
todos idénticos a sus contrapartes en C. Por ejemplo, fread “vectorizado”, es decir, se lee hasta que
encuentra una cadena de texto o al final del archivo.

Los archivos pueden ser accedidos mediante estas funciones en modo texto o modo binario. En modo
binario se puede pensar en el archivo como un flujo continuo de bytes. Los archivos abiertos en modo

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 88

binario puede tener acceso “random”, es decir, que se puede especificar en que byte se desea empezar a
leer o escribir.

Los programas cortos que siguen muestran de qué manera se crea un archivo en modo binario, cómo
se lee y cómo se lo modifca. Luego de cada programa se dan algunas explicaciones de nuevas carac-
terı́sticas. Se deberá que consultar la documentación en lı́nea y la ayuda (help) para ver las diferentes
opciones disponibles para estas funciones de Entrada/Salida.

E SCRITURA DE DATOS BINARIOS . El ejemplo que se va a utilizar tiene una amplia variedad de apli-
caciones. Se desea crear una base de datos de registros, cada registro consta de información sobre los
individuos (clientes, estudiantes). En este ejemplo, cada registro tendrá el nombre del estudiante y una
marca. (El término “registro” no tiene ningún significado especial en Matlab , como lo tiene, por ejem-
plo, en Pascal. Se utiliza aquı́ como una manera conveniente de pensar de la unidad básica en una base
de datos.)

El siguiente programa (writer.m) invita a introducir cualquier número de nombres y marcas en la lı́nea
de comandos, y las escribe como datos binarios en un archivo. Para terminar el proceso simplemente se
pulse <Enter> para el próximo nombre.

namelen = 10; % 10 bytes for name


fid = fopen(’marks.bin’, ’w’); % open for write only
str = ’?’; % not empty to start
while ~isempty(str)
str = input( ’Enter name: ’, ’s’ );
if ~isempty(str)
if length(str) > namelen
name = str(1: namelen); % only first ten chars allowed
else
name = str;
name(length(str) + 1: namelen) = ’ ’; % pad with blanks if too short
end
fwrite(fid, name);
mark = input( ’Enter mark: ’ );
fwrite(fid, mark, ’float’); % 4 bytes for mark
end
end
fclose(fid);

N OTA :
+ La instrucción:
fid = fopen(marks.bin, w);
crea el archivo marks.bin para escritura solamente. Si el archivo se abre correctamente fopen
devuelve un número entero no negativo llamado “identificador de archivo” (fid), que se puede
pasar a otras funciones de Entrada/Salida para acceder a este archivo abierto. Si fopen falla (por
ejemplo, si se intenta abrir un archivo no existente para la lectura) devuelve el valor -1 y asigna a
fid un mensaje de error a un segundo argumento de salida opcional.
El segundo argumento ’w’ de fopen es la cadena de permiso y especifica el tipo de acceso al
archivo que necesita, por ejemplo, ’r’ para sólo lectura, ’w’ para sólo escritura, ’r +’ tanto para
lectura como para escritura, etc. Consúltese la ayuda de fopen para ver todas las posibilidades
cadenas de permisos.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 89

+ El ciclo while continúa pidiendo nombres hasta que se introduzca una cadena vacı́a (por lo tanto,
str debe ser no vacı́a inicialmente).
+ Cada nombre escrito en el archivo debe tener la misma longitud (de lo contrario no se sabe donde
se inicia y donde termina cada registro). La instrucción if se asegura de que cada nombre tenga
exactamente 10 caracteres (namelen) no importa cuántos caracteres se ingresaron (el número 10
es arbitrario, por supuesto).
+ La primera instrucción fwrite
fwrite (fid, name);
escribe todos los caracteres en el nombre para el archivo (un byte cada uno).
+ La segunda instrucción fwrite
fwrite (fid, marca, ’float’);
escribe marca en el fichero. El tercer argumento (opcional, precisión) especifica tanto el número
de bits escritos por marca y de qué manera estos bits serán interpretados en una instrucción fread
equivalente. ’float’ significa numérico de simple precisión(por lo general de 32 bits -4 bytes,
aunque este valor es dependiente del hardware). El valor predeterminado para este argumento es
’uchar’.
+ La instrucción
fclose (fid);
cierra el archivo (volviendo 0 si la operación fue exitosa). Aunque Matlab cierra de manera
automática todos los archivos al salir, es una buena práctica cerrar los archivos de forma explı́cita
con fclose cuando haya terminado de usarlos. Téngase en cuenta que se pueden cerrar todos los
archivos con fclose(’all’).
L ECTURA DE DATOS BINARIOS . El siguiente programa (reader.m) lee el archivo escrito con
writer.m arriba y muestra cada registro:

namelen = 10; % 10 bytes for name


fid = fopen(marks.bin, r);
while ~feof(fid)
str = fread(fid, namelen);
name = char(str’);
mark = fread(fid, 1, float);
fprintf(%s %4.0f n, name, mark)
end
fclose(fid);

N OTA :

+ El archivo se abre para sólo lectura (’r’).


+ La función feof(fid) devuelve 1 si se ha alcanzado el final del archivo especificado, y 0 en caso
contrario.
+ La primera instrucción fread lee los próximos namelen (10) bytes desde el archivo en la vari-
able str. Cuando el nombre fue escrito por fwrite los códigos ascii de los caracteres fueron
escritos en el archivo. Por lo tanto es necesaria la función char para convertir los códigos de
nuevo a los caracteres. Además, los bytes que se leen son interpretados como entradas en una
matriz columna; str debe transponerse si desea mostrar el nombre es el formato horizontal como
de costumbre.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 90

+ La segunda instrucción fread especifica que valor uno (el nmero de valores está dado por el
segundo argumento) será leı́do en la precisión de punto flotante (cuatro bytes). Se podrı́a, por
ejemplo, leer todo un vector de 78 números con punto flotante
a = fread (fid, 78, ’float’);
M ODIFICACI ÓN DE DATOS BINARIOS . Para mostrar de qué forma se cambian los registros en un
archivo se supone por simplicidad que solamente se tendrá que cambiar la marca de un estudiante,
y no el nombre. El programa siguiente (changer.m) pide que registran al cambio, muestra el nombre
y la marca actual en ese registro, pide la marca corregida, y sobrescribe la marca original en ese registro.

namelen = 10; % 10 bytes for name


reclen = namelen + 4;
fid = fopen(marks.bin, ’r +’); % open for read and write
rec = input(Which record do you want to change?);
fpos = (rec - 1) * reclen; % file position indicator
fseek(fid, fpos, bof); % move file position indicator
str = fread(fid,namelen); % read the name
name = char(str);
mark = fread(fid, 1, ’float’); % read the mark
fprintf(’%s %4.0f n’, name, mark)
mark = input(’Enter corrected mark: ’); % new mark
fseek(fid, -4, cof); % go back 4 bytes to start of mark
fwrite(fid, mark, ’float’); % overwrite mark
fprintf(’Mark updated’);
fclose(fid);

N OTA :
+ El archivo se abre para la lectura y la escritura (’r +’).
+ Cuando se abre un archivo con fopen Matlab mantiene un indicador de posición de archivo. La
posición en el archivo donde Matlab comenzará la siguiente operación en el archivo (lectura o
escritura) es un byte más allá del indicador de posición de archivo.
fpos calcula el valor del indicador de posición del archivo a fin de comenzar a leer el número de
registro de grabación rec.
+ La función fseek mueve el indicador de posición del archivo. El segundo argumento especifica
a qué parte del archivo mover el indicador de posición, con respecto a un origen determinado por
el tercer argumento. Los orı́genes posibles son ’bof’ (principio del archivo), ’cof’ (posición
actual en el archivo) o ’eof’ (fin de archivo).
En este ejemplo, los registros son de 14 bytes de longitud (10 para el nombre, cuatro para la
marca). Si se quisiera actualizar el segundo registro, se usarı́a
fseek (fid, 14, ’bof’);
que mueve el indicador de posición de archivo al byte 14 desde el comienzo del archivo, listo
para empezar a acceder en el byte 15, que es el comienzo del segundo registro. La función fseek
devuelve 0 (éxito) o -1 (error). Por cierto, si uno se pierde en un archivo siempre se puede utilizar
ftell para averiguar en qué lugar de éste se encuentra!
+ La instrucción fread, que dice que la marca se cambió, avanza el indicador de posición del
fichero cuatro bytes (el número de bytes necesarios para precisión de punto flotante) de forma
automática. Para sobrescribir la marca, por lo tanto, se tiene que mover el indicador de posición
de archivo de nuevo cuatro bytes de su posición actual. La instrucción
fseek (fid, -4, ’cof’);

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 91

logra esto.
+ La instrucción fwrite a continuacioón sobrescribe la marca.

Téngase en cuenta que los programas anteriores no tienen ningún dispositivo de captura de error, por
ejemplo, prevenir la lectura de un archivo inexistente, o que le impide sobrescribir un disco que no está.
Se deja al lector indagar sobre este tipo de detalles.

2.7. OTRAS FUNCIONES IMPORTANTES DE I MPORTACI ÓN /E XPORTACI ÓN . Otras funciones de im-
portación / exportación, con diferentes grados de flexibilidad y facilidad de uso, incluyen csvread,
csvwrite, dlmread, dlmwrite, fgets, fprintf (que tiene un argumento opcional para especificar
un archivo), fscanf, textread, xlsread.
Por último, recúerdese que el comando diary también se puede utilizar para exportar arreglos pequeños
como datos de texto, aunque se tendrá que editar el texto luego.

3. R ESUMEN
+ Pueden utilizarse funciones de Matlab para realizar una variedad de operaciones matemáticas,
trigonométricas entre otras.
+ Los datos se pueden guardar en archivos de disco en formato de texto (ascii) o en formato
binario.
+ load y save pueden utilizarse para Importar/Exportar texto y datos binarios (este último en la
forma de archivos .mat).
+ El Asistente de Importación proporciona una manera fácil de importar texto y datos binarios.
+ Funcione sde Entrada/Salida de bajo nivel de Matlab como fread y fwrite proporcionan acceso
random a los archivos binarios.

E JERCICIOS
1. Escrı́banse algunas instrucciones en Matlab que:
(a) Encuentren la longitud C de la hipotenusa de un triángulo rectángulo en términos de las
longitudes A y B de los otros dos lados.
(b) Encuentren la longitud C de un lado de un triángulo dadas las longitudes A y B de los otros
dos lados y el tamaño en grados del ángulo incluido θ , utilizando la regla de los cosenos:

C2 = A2 + B2 − 2AB cos(θ ).

2. Tradúzcanse las siguientes fórmulas a expresiones de Matlab:


(a) ln(x + x2 + a2 )
(b) [e3t + t 2 sin(4t)] cos2 (3t)
(c) 4 tan−1 (1) (tangente inversa)
(d) sec2 (x) + cot(y)
(e) cot−1 (|x/a|) (utilı́cese la cotangente inversa de Matlab )
3. Hay 39.37 pulgadas en un metro, 12 pulgadas en un pie, y tres pies en una yarda. Escrı́base un
script para introducir una longitud en metros (que puede tener una parte decimal) y convertirla a
yardas, pies y pulgadas. (Chequéese con 3.51 metros igual a 3 yardas 2 pies 6.19 pulgadas.)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 92

4. Una esfera de masa m1 incide oblicuamente sobre una esfera estacionaria de masa m2 , la dirección
del golpe hacer un ángulo α con la lı́nea de movimiento de la esfera incidente. Si el coeficiente de
restitución es e se puede demostrar que la esfera incidente se desvı́a en un ángulo β de tal manera
que:
m2 (1 + e) tan(α)
tan(β ) = .
m1 − em2 + (m1 + m2 ) tan2 (α)
Escrı́base un script el que a partir de introducir valores de m1 , m2 , e, y α (en grados) calcule el
ángulo β en grados.
5. En el Capı́tulo 2 hay un programa para el cálculo de los miembros de la sucesión xn = an /n!. El
programa muestra cada miembro xn. Modifı́quese para mostrar solamente los términos múltiplos
de 10 de xn .
S UGERENCIA: La expresión rem(n, 10) será cero solamente cuando n es un múltiplo exacto de
10. Utilı́cese esto en una sentencia if para mostrar cada término múltiplo de 10 de xn .
6. Para convertir la variable mins en minutos a horas y minutos se utiliza fix(mins/60) para
encontrar el número total de horas, y rem(mins, 60) para encontrar el número de minutos que
quedan.
Escrı́base un scrit que introduciendo un número de minutos lo convierta a horas y minutos.
Luego escrı́base un script para convertir segundos en horas, minutos y segundos. Pruebe este
script en 10000 segundos, lo que deberı́a dar 2 horas 46 minutos y 40 segundos.

7. Diséñese un algoritmo (es decir, escribir el plan estructurado) para una máquina que debe dar la
cantidad correcta de cambio de un billete de $ 100 para cualquier compra que cueste menos de $
100. El plan debe especificar la cantidad y el tipo de los billetes y monedas en el cambio, y en
todos los casos debe dar el menor número de billetes y monedas como sea posible.
8. Una viga uniforme está articulada libremente en sus extremos x = 0 y x = L, de modo que los
extremos se encuentran al mismo nivel. Se somete a una carga uniformemente distribuida de W
por unidad de longitud, una tensión T a lo largo del eje x. La deflexión de la viga y a una distancia
x desde un extremo está dada por
 
W EI cosh [a(L/2 − x)] W x(L − x)
y= 2 −1 + ,
T cosh(aL/2) 2T

donde a2 = T /EI, E es el módulo de Young de la viga, e I es el momento de inercia de una


sección transversal de esta viga. La viga es de 10 m de largo, la tensión es de 1000 N, la carga de
100 N / m, y la IE es 104 .
Escrı́base un script para calcular y realizar un gráfico de la deflexión y contra x (Matlab tiene una
función cosh).
Para hacer que la gráfica se vea realista tendrá que anularse la escala de ejes automática de Matlab
con la instrucción

axis([xmin xmax ymin ymax])

después de la instrucción de plot, donde xmin, xmax, etc, tengan los valores adecuados.

2014 - O.R. FAURE


Capı́tulo 5

Vectores Lógicos

Los objetivos de este capı́tulo son para le permitirá:


+ Comprender los operadores lógicos más plenamente.
Y para presentarles a:
+ Vectores lógicos y cómo usarlos con eficacia en una serie de aplicaciones.
+ Funciones lógicas.

Este capı́tulo presenta una caracterı́stica más potente y elegante de Matlab, a saber, los vectores lógicos.
El tema es tan útil y, por lo tanto, importante que merece un capı́tulo aparte.

Pruébense estos ejercicios en la lı́nea de comandos:


1. Introduzca las siguientes declaraciones:
r = 1;
r <= 0,5 % sin punto y coma

Si se ha obviado el punto y coma después de la segunda instrucción se podráapreciar que devuelve


el valor 0.
2. Ahora escrı́base la expresión
r > = 0.5
(nuevamente, sin colocar el punto y coma). Ésto debe devolver el valor 1. Téngase en cuenta
que ya se ha visto en el Capı́tulo 2 que una expresión lógica en Matlab que involucra solamente
escalares devuelve un valor 0 si es falsa, y 1 si es verdadera.
3. Escrı́banse las siguientes instrucciones:
r = 1: 5;
r <= 3

Ahora la expresión lógica r <= 3 (donde r es un vector) devuelve el vector:

1 1 1 0 0
¿De qué manera se interpretar este resultado? Por cada elemento de r, para el cual la condición

93
Matlab ESENCIAL PARA INGENIEROS 94

r <= 3 es cierta, se devuelve 1; de lo contrario se devuelve 0. A continuación, introdúzcase la


instrucción r == 4. ¿Por qué devuelve 0 0 0 1 0 ?
Cuando un vector está forma parte una expresión lógica, la comparación se lleva a cabo “elemento a ele-
mento” (como en una operación aritmética). Si la comparación es verdadera para un elemento particular
del vector, el vector resultante, que se llama un vector lógico, tiene un 1 en la posición correspondiente;
de lo contrario, tiene un 0. Lo mismo se aplica a las expresiones lógicas que implican matrices. (Los
vectores lógicos fueron llamados “vectores 0-1” en la Versión 4. El código de la Versión 4 que involucra
vectores 0-1 no se ejecuta en la Versión 6 y posteriores bajo ciertas circunstancias (véase luego en la
Sección 5.3).

También pueden comparar vectores con vectores en expresiones lógicas. Introdúzcanse las siguientes
instrucciones:

a = 1: 5;
b = [0 2 3 5 6];
a == b % sin punto y coma!

La expresión lógica a == b devuelve el vector lógico

0 1 1 0 0

porque se evalúa elemento por elemento, es decir, a(1) se compara con b(1), a(2) con b(2), etc.

1. E JEMPLOS
Una aplicación muy útil de vectores lógicos se encuentra en el gráfico que involucra funciones con
discontinuidades. La siguiente sucesión de comandos realiza el gráfico, que se muestra en la Figura 5.1,
definido por 
 sin(x) si sin(x) > 0,
y(x) =
0 si sin(x) ≤ 0

en el rango de 0 a 3π:

x = 0 : pi/20 : 3 * pi;
y = sin(x);
y = y .* (y > 0); % hace cero donde hay valores negativos de sin(x)
plot(x, y)

La expresión y > 0 devuelve un vector lógico de 1 cuando sin(x) es positivo, y 0 de lo contrario. La


multiplicación elemento a elemento de y con .* escoge los elementos positivos de y.

1.1. ¿C ÓMO EVITAR LA DIVISI ÓN POR CERO ?. Supóngase que se desea trazar la gráfica de sin(x)/x
en el rango de −4π a 4π. La forma más conveniente para establecer un vector en el eje de las x es

x = -4 * pi: pi / 20: 4 * pi;

Pero luego cuando se intenta

y = sin (x) ./ x;

se obtiene la advertencia Divide by zero, pues uno de los elementos de x es exactamente cero. Una
manera ordenada de resolvereste problema es utilizar un vector lógico para reemplazar el cero con eps.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 95

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 1 2 3 4 5 6 7 8 9 10

Figura 5.1: Gráfico discontinuo utilizando vectores lógicos

Esta función de Matlab devuelve la diferencia entre el 1.0 y el número inmediato siguiente más grande
que puede representarse en Matlab, es decir, aproximadamente 2.2e-16. Aquı́ se da un ejemplo de
cómo podrı́a hacerse:

x = x + (x == 0) * eps;

La expresión x == 0 devuelve un vector lógico con un 1 para el elemento de x que es nulo (igual a
cero), y de esta manera eps es añadido solamente a ese elemento. La siguiente sucesión de comandos
realiza el gráfico correctamente, sin un segmento faltante en x = 0 (véase la Figura 5.2).

x = -4 * pi: pi / 20: 4 * pi;


x = x + (x == 0) * eps; % Cambiar x = 0 por x = eps
y = sin(x) ./ x;
plot (x, y)

Cuando x toma el valor eps, el valor de sin(eps)/eps toma el valor lı́mite correcto de 1 (com-
pruébese), en lugar de NaN (Not-a-Number) como resultado de una división por cero.

1.2. E VITAR EL INFINITO . La siguiente sucesión de comandos intenta graficar tan(x) en el rango
de −3π/2 a 3π/2. Si no se está familiarizado con los gráficos de las funciones trigonométricas, una
buena gimnasia serı́a trazar una gráfica más o menos aproximada con lápiz y papel antes de ejecutar la
sucesión de comandos!

x = -3 / 2 * pi: pi / 100: 3/2 * pi;


y = tan (x);
plot (x, y)

La gráfica de la Figura 5.3 de la izqueirda deberı́a verse nada más que como un boceto. El problema

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 96

0.8

0.6

0.4

0.2

ï0.2

ï0.4
ï15 ï10 ï5 0 5 10 15

Figura 5.2: Gráfico la función sin(x)/x.

es que tan(x) se aproxima a ±∞ en los múltiplos impares de π/2. Por lo tanto, al tomar valores muy
grandes (alrededor de 1015 ) se hace imposible ver la forma de la gráfica en cualquier otro lugar.

Si se agrega el comando

y = y .* (abs (y) <1e10); % Remueve los valores grandes

justo antes de la instrucción plot, se obtendrá un gráfico mucho más agradable, como se puede ver en
la gáfica de la derecha de Figura Fig5-3-Han. La expresión abs(y) < 1e10 devuelve un vector lógico
que es cero sólo a las ası́ntotas. Ası́, el gráfico entonces toma el valor cero en estos puntos, lo cual hace
que en el dibujo se aprecien ası́ntotas casi verticales. Estas “ası́ntotas”se vuelven más verticales en tanto
el incremento en x se hace más pequeño.

1.3. C ONTAR N ÚMEROS ALEATORIOS . La función rand devuelve un números (pseudo) aleatorio
en el intervalo [0, 1); rand(1, n) devuelve un vector fila de n números de ese tipo.

Pruébense los siguientes ejercicios en la lı́nea de comandos:

1. Establézcase un vector r con siete elementos aleatorios (dejar de lado el punto y coma para que
se puedan ver sus elementos):

r = rand (1,7) % sin punto y coma

Verifı́quese que la expresión lógica r < 0.5 da el vector lógico correcto.

2. Utilizando la función sum en la expresión lógica r < 0.5 se puede contar eficazmente la cantidad
de elementos de r que son menores que 0.5. Inténtese, y compruébese la respuesta contrastando

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 97

15
x 10
6 40

30
4

20

2
10

0 0

ï10
ï2

ï20

ï4
ï30

ï6 ï40
ï5 0 5 ï5 0 5

Figura 5.3: Variantaes de la gráfica de la función tan(x).

con los valores que se muestran de r:

sum(r < 0.5)

3. Ahora utilı́cese una instrucción similar para contar cuántos de los elementos de r son mayores o
iguales a 0.5.
4. Dado que rand genera números aleatorios uniformemente distribuidos, cabe esperar que la canti-
dad de números aleatorios que son menores que 0.5 esté cada vez más y más cerca a la mitad del
número total de elementos a medida que n aumente.

Genérese un vector de unos pocos miles de números aleatorios (suprı́mase la pantalla con un
punto y coma en ese caso) y el utilı́cese de un vector lógico para contar cuántos son menores que
0.5.

Repı́tase varias veces con un nuevo conjunto de nḿeros aleatorios cada vez. Debido a que los
números son aleatorios, no se va a obtener exactamente la misma respuesta cada vez.

Hacer este problema sin vectores lógicos es un poco más complicado. Este programa realiza esa

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 98

tarea:

tic % comienzo
a = 0; % numeros >= 0.5
b = 0; % numeros < 0.5
for n = 1:5000
r = rand; % genera un numero para el ciclo
if r >= 0.5
a = a + 1;
else
b = b + 1;
end;

end;
t = toc; % final
disp( [’Menores que 0.5: ’ num2str(a)] )
disp( [Tiempo: num2str(t)] )

También toma mucho más tiempo. Compárense los tiempos de los dos métodos en la computadora.

1.4. L ANZAMIENTO DE DADOS . Cuando se lanza un dado justo, el número que sale en la cara su-
perior es igualmente probable. Ası́ si rand es un número aleatorio en el rango [0, 1), 6 * rand estará
en el rango [0, 6), y 6 * rand + 1 estará en el intervalo [1, 7), es decir, entre 1 y 6.9999. El descarte
de la parte decimal de esta expresión por medio de floor da un entero en el rango requerido. Inténtese
los siguientes ejercicios:

1. Genérese un vector d de 20 números enteros aleatorios en el rango de 1 a 6:

d = floor(6 * rand (1, 20)) + 1

2. Cuéntese la cantidad de “seis” obtenidos por medio de la suma de los elementos del vector lógico
d == 6
3. Verifı́quese el resultado mediante la visualización d.
4. Estı́mese la probabilidad de obtener un seis dividiendo la cantidad total de éstos por 20. La
utilización de números aleatorios para imitar una situación real basada en el azar como en este
caso se llama simulación.
5. Repita con más nmeros aleatorios en el vector d. Cuanto mayor es la cantidad de números, la
proporción de seis se acerca más al valor esperado teórico de 0.1667, es decir, 1/6.

6. ¿Será posible explicar por qué es incorrecto utilizar round en lugar de floor? El problema es
que round redondea en ambas direcciones, mientras que floor redondea siempre hacia abajo.

2. L OS OPERADORES L ÓGICOS
Se ha visto brevemente en el Capı́tulo 2 que las expresiones lógicas pueden construirse no sólo a partir
de los seis operadores relacionales, sino también por medio de los tres “operadores lógicos” que se
muestran en la Tabla 5.2.
La Tabla 5.2 muestra los efectos de estos operadores en las expresiones lógicas lex1 y lex2.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 99

O PERADOR S IGNIFICADO
˜ not
& and
| or

Tabla 5.1: Operadores lógicos

El operador or (|) es técnicamente un integrador o, porque es verdadero, cuando uno o ambos de sus
operandos son verdaderos. Matlab también tiene una función o exclusiva, el operador xor(a, b), que
es 1 (verdadero) solamente cuando uno, pero no ambos a y b sean 1 (Tabla 5.2).

Matlab también tiene un número de funciones que realizan operaciones lógicas bit a bit. Consúltese la
ayuda en ops.

Los niveles de jerarquı́a de los operadores lógicos, entre otros, se muestran en la Tabla 5.??. Como de
costumbre, las jerarquı́as pueden ser anuladas con paréntesis, por ejemplo,

~0 & 0

devuelve 0(falso), mientras que

~ (0 & 0)

devuelve 1(verdadero). Algunos ejemplos más:

(b * b == 4 * a * c) & (a ~ = 0)
(final >= 60) & (final < 70)
(a ~ = 0) | (b ~ = 0) | (c != 0)
~((a == 0) & (b == 0) & (c == 0))

Nunca es incorrecto utilizar paréntesis para que la lectura de la lógica más clara, incluso si son sintácti-
camente innecesarios. Por cierto, las dos últimas expresiones anteriores son lógicamente equivalentes,
y son falsas solamente cuando a = b = c = 0.

2.1. L A PRECEDENCIA DE OPERADORES . Se puede introducir accidentalmente una expresión como


2 > 1 & 0

(pruébese) y es sorprendente porque Matlab (a) la acepta, y (b) devuelve un valor 0(false). Es sorpren-
dente pues:

1. 2 > 1 & 0 no parece tener sentido. Si se ha llegado hasta aquı́ entonces vale la pena explicar el
secreto. Matlab se basa en el lenguaje C, que permite mezclar diferentes tipos de operadores de
este tipo (Pascal, por ejemplo, nunca permitirı́a que esa flexibilidad!).

lex1 lex2 ˜lex1 lex1 & lex2 lex1 | lex2 xor(lex1, lex2)
F F T F F F
F T T F T T
T F F F T T
T T F T T F

Tabla 5.2: Tabla de verdad (T = verdadero; F = falso)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 100

Jerarquı́a Operadores
1. ()
2. ˆ, .ˆ, ’, .’ traspuesta pura
3. + (lógico) - (lógico) ˜ (NOT)
4. * \ .* .\
5. + (Suma corriente), - (Sustracción corriente)
6. :
7. > < >= <= == ~
8. & (AND)
9. | (OR)

Tabla 5.3: Jerarquı́a de operadores. Consúltese la ayuda (Help en operator precedence)

2. Se pensarı́a instintivamente que & deberı́a tener la prioridad más alta. 1 & 0 se evalúa dando 0,
por lo que 2 > 0 debe resultar 1 en lugar de 0. La explicación se debe en parte a la resoluciónn
de la sorpresa anterior. Matlab agrupa los operadores en una forma bastante curiosa y no nece-
sariamente intuitiva. La prioridad de operadores completa figura en la Tabla 5.3. (Recuérdese
que el operador transpuesta ’ realiza el conjugado complejo transpuesto en datos complejos; el
operador punto-transpuesta .’ realiza una transposición pura sin tomar el complejo conjugado).
Los paréntesis siempre tienen la más alta prioridad.

2.2. C UIDADO . Un error habitual es convertir incorrectamente la desigualdad matemática 0 < r < 1,
por ejemplo, en la expresión de Matlab

0 < r < 1

Lo sorprendente es que Matlab no informa de un error. La respuesta es que a Matlab en realidad no


le importa de qué manera se mezclan los operadores en una expresión. Simplemente produce en serie a
través de la expresión de acuerdo con las reglas (que pueden no ser aquellas que se esperan).

Supóngase que r tiene el valor 0.5. Matemáticamente, la desigualdad es cierta para este valor de r
ya que se encuentra en el intervalo requerido. Sin embargo, la expresión 0 < r < 1 se evalúa como
0. Esto se debe a que la operación de la izquierda (0 < 0.5) se evaluó primero como 1(verdadero),
seguido por 1 < 1 que es falso.

Desigualdades de este tipo deben codificarse como

(0 < r) & (r < 1)

Los paréntesis no son estrictamente necesarios (Véase la Tabla 5.3), pero que sin duda ayudan a aclarar
la lógica.

2.3. L OS OPERADORES L ÓGICOS Y VECTORES . Los operadores lógicos también pueden operar en
vectores (del mismo tamaño), devolviendo vectores lógicos, por ejemplo,

~([1 2 0 -4 0])

sustituye a todos los diferentes de cero por 1 de, y deja a los ceros sin tocar. Pruébese.

Téngase en cuenta que los paréntesis deben ser utilizados para separar los dos ~. La mayorı́a de los
operadores pueden no aparecer directamente uno al lado del otro (por ejemplo, +, ~); si fuese necesario,

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 101

se usan los paréntesis para separarlos.

La secuencia de comandos en la Sección 5.1, que evita la división por cero tiene la insrtucción crı́tica

x = x + (x == 0) * eps;

Esto es equivalente a

x = x + (x) * eps;

Pruébese, y asegúrese de entender cómo funciona.

E JERCICIO
Trabájese con los resultados de las siguientes expresiones antes de comprobarlos en la lı́nea de coman-
dos:

1. a = [-1 0 3];
2. b = [0 3 1];
3. ~ a

4. a & b
5. a | b
6. xor(a, b)
7. a > 0 & b > 0

8. a > 0 | b > 0
9. a > 0 a + (~b)
10. a > ~b
11. ~a > b

12. ~( a > b)

3. S UB ÍNDICES CON VECTORES L ÓGICOS


Se ha visto de manera breve en el Capı́tulo 2 que los elementos de un vector pueden ser referenciados
con subı́ndices, y que estos subı́ndices a sı́ mismos pueden ser vectores, por ejemplo,

a = [-2 0 1 5 9];
a ([5 1 3])

devuelve

9 -2 1

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 102

es decir, los elementos, quinto, primero y de a. En general, si x y v son vectores, donde v tiene n
elementos, entonces x(v) significa

[x (v(1)), x(v(2)), ..., x(v(n))]

Ahora con a como se define anteriormente, véase que devuelve

a(logical([0 1 0 1 0]))

La función logical(v) devuelve un vector lógico, cuyos elementos que son unos o ceros según que
los elementos de v sean no nulos o 0. (En la Versión 4 de la función logical no era necesaria en este
caso, se podı́a utilizar un vector “0-1” directamente como subı́ndice).

A continuación se da un resumen de las reglas para el uso de un vector lógico como subı́ndice:

1. Un vector lógico v puede ser un subı́ndice de otro vector x.


2. Devuelve solamente los elementos de x correspondiente a 1 de en v.

3. x y v deben tener el mismo tamaño.

Por lo tanto, la instrucción anterior devuelve

0 5

es decir, el segundo y el cuarto elementos de a, correspondiente a los elementos iguales a 1 en

logical([0 1 0 1 0])

¿Cuál será la respuesta de:

a(logical([1 1 1 0 0]))

entonces? Y además, ¿qué ocurre con a(logical([0 0 0 0 0]))?

Los subı́ndices de vectores lógicos proporcionan una manera elegante de eliminar ciertos elementos de
un vector, por ejemplo,

a = a (a > 0)

elimina todos los elementos no positivos de a, porque a > 0 devuelve el vector lógico [0 0 1 1 1].
Se puede comprobar por cierto que la expresión a > 0 es un vector lógico, porque la instrucción

islogical(a > 0)

devuelve 1. Sin embargo, el vector numérico [0 0 1 1 1] no es un vector lógico; la instrucción

islogical([0 0 1 1 1])

devuelve 0.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 103

4. F UNCIONES L ÓGICAS
Matlab tiene un número de funciones lógicas útiles que operan sobre escalares, vectores y matrices.
Los ejemplos se dan en la siguiente lista (donde x es un vector a menos que se indique lo contrario).
Véase la Ayuda de funciones lógicas (help logical functions).

any(x) devuelve el escalar 1 (verdadero) si algún elemento de x no es nulo (verdadero).

all(x) devuelve el escalar 1 si todos los elementos de x son diferentes de cero.

exist(’a’) devuelve 1 si a es una variable en el workspace. Para otras respuestas posibles consulte la
ayuda. Téngase en cuenta que a debe estar entre apóstrofes.

find(x) devuelve un vector que contiene los subı́ndices de los elementos no-cero (verdadero) de x, ası́
que por ejemplo,

a = a (find(a))

elimina todos los elementos nulos de a! Pruébese. Otro uso de find es en la búsqueda de los subı́ndices
de los mayores elementos (o menores elementos) en un vector, cuando hay más de uno. Escrı́base lo
siguiente:

x = [8 1 8 -4 6];
find(x > = max (x))

Esto devuelve el vector [1 4], que son los subı́ndices del elemento ms grande (8). Funciona porque la
lógica expresión x¿ = max (x) devuelve un vector lógico con 1 de sólo en las posiciones de los elementos
ms grandes.

isempty(x) devuelve 1 si x es una matriz vacı́a y 0 en caso contrario. Un conjunto vacı́o tiene un
tamañoo de 0 por 0.

isinf(x) devuelve 1 para los elementos de x que son +Inf ó -Inf, y 0 de lo contrario.

isnan(x) devuelve 1 para los elementos de x que son NaN y 0 de lo contrario. Esta función se puede
utilizar para eliminar NaN de un conjunto de datos. Esta situación podrı́a surgir mientras se están reco-
giendo estadı́sticas; valores faltantes o no disponibles se pueden representar temporalmente por NaN.
Sin embargo, si se hace, todos los cálculos que implican la NaN, que se propagan a través de los cálculos
intermedios para el resultado final. Para evitar esto, los NaN en un vector se puede eliminar con una
instrucción como:

x(isnan(x)) = []

Matlab tiene otras funciones lógicas que comienzan con los caracteres is. Véase is* en el ı́ndice de la
Ayuda en la lista completa.

4.1. U TILIZAR any Y all. Debido a que any y all con argumentos vectoriales devuelven es-
calares, son particularmente útiles en caso de los if. Por ejemplo,

if all(a >= 1)
HacerAlgo
end

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 104

significa “si todos los elementos del vector a son mayores que o iguales a 1, entonces HacerAlgo”.

Recuérdese del Capı́tulo 2 que una condición de vectorial en un if es verdadera solamente si todos sus
elementos son ciertos. Ası́ que si se desea ejecutar instrucción de abajo cuando dos vectores a y b son
iguales (es decir, el mismo) que se puede intentar con:

if a == b
instruccion
end

ya que if considera el vector lógico que devuelve a == b cierto solamente si cada elemento es un 1.
Si, por el contrario, se quiere ejecutar isntruccion especı́ficamente cuando los vectores a y b no son
iguales, podrı́a pensarse en intentar:

if a ~ b % mal mal mal !!!


instruccion
end

Sin embargo, esta instrucción no va a funcionar, ya que instrucción solamente se ejecutará si cada
uno de los elementos correspondientes de a y b son diferentes. Aquı́ es donde interviene any

if any(a ~ b) % bien bien bien !!!


instruccion
end

Estas instrucciones hacen lo que se requiere, ya que any(a ~= b) devuelve el escalar 1 si cualquier
elemento de a difiere del correspondiente elemento de b.

5. V ECTORES L ÓGICOS EN LUGAR elseif ESCALONADOS


Para aquellos que han crecido con los lenguajes de programación más convencionales en el siglo pasado
pueden tener dificultades para pensar en términos de la utilización de vectores lógicos en la resolución
de problemas generales. Es un desafı́o interesante cada vez que se va a escribir un programa pregun-
tarse si es posible hacerlo utilizando vectores lógicos. Son casi siempre más rápidos que otros métodos,
aunque a menudo no es tan claro para leer en el futuro. Se debe decidir cuando es importante utilizar
vectores lógicos. Pero es un muy buen ejercicio de programación que se obligue a utilizarlos siem-
pre que sea posible! El siguiente ejemplo ilustra estos puntos mediante la resolución de un problema
primero convencionalmente, y luego con vectores lógicos.

Se ha dicho que hay dos hechos desagradables e inevitables de la vida: la muerte y el impuesto a las
ganancias. Una versión muy simplificada de cómo se calcula el impuesto a las ganancias podrı́a basarse
en la siguiente tabla:

Renta Imponible Impuesto a Pagar


$10000 o menos 10 porciento de la renta imponible
Entre $10000 y $20000 $1000 + 20 porciento del excedente de $10000
Mas de $20000 $3000 + 50 porciento del excedente de $20000

El impuesto a pagar sobre una renta imponible de $ 30000, por ejemplo, es:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 105

$ 3000 + 50 porciento de los ($30000 - $20000), es decir, $8000.

Serı́a interesante calcular el impuesto a las ganancias en las siguientes bases imponibles: 5000, 10000,
15000, 30000 y 50000.

La forma convencional de programar este problema es la creación de un vector con los ingresos suje-
tos como elementos y utilizar un ciclo con un elseif escalonados para procesar cada elemento, como
sigue:

% Impuesto a las ganancias a la manera vieja

inc = [5000 10000 15000 30000 50000];

for ti = inc
if ti < 10000
tax = 0.1 * ti;
elseif ti < 20000
tax = 1000 + 0.2 * (ti - 10000);
else
tax = 3000 + 0.5 * (ti - 20000);
end;
disp( [ti tax] )
end;

Aquı́ está la salida, editada adecuadamente.

Renta Imponible Impuesto a Pagar

5000.00 500.00
10000.00 1000.00
15000.00 2000.00
30000.00 8000.00
50000.00 18000.00

% Impuesto a las ganancias de manera logica


inc = [5000 10000 15000 30000 50000];
tax = 0.1 * inc .* (inc <= 10000);
tax = tax + (inc > 10000 & inc <= 20000) ...
.* (0.2 * (inc - 10000) + 1000);
tax = tax + (inc > 20000) .* (0.5 * (inc-20000) + 3000);
disp( [inc’ tax’] );

Para entender cómo funciona esto, puede ser útil ingresar las instrucciones en la lı́nea de comandos.
Comiéncese con el vector inc. A continuación, introdúzcase

inc <= 10000

lo que deberá dar el vector lógico [1 1 0 0 0]. A continuación tipéese

inc .* (inc <= 10000)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 106

lo que deberá devolver el vector [5000 10000 0 0 0]. Esto ha realizado con éxito solamente los
ingresos en el primer tramo. El impuesto para estos ingresos se calcula entonces con

tax = 0.1 * inc .* (inc <= 10000)

lo que devuelve [500 1000 0 0].

Ahora, para el segundo nivel de impuestos. Ingréses e la expresión

inc > 10000 & inc < 20000

lo que devolverá el vector lógico [0 0 1 0 0], puesto que solamente un nivel de ingresos se encuentra
en este paréntesis. Ahora

0.2 * (inc - 10000) + 10000

Esto devolverá [0 1000 2000 5000 9000]. Solamente la tercera entrada es correcta. Multiplicando
este vector por el vector lógico anterior, dará [0 0 2000 0 0]. El resultado se puede agregar con
seguridad al vector tax, ya que no afectará a las dos primeras entradas ya están calculadas.

Seguramente se comprobará que la solución con el método del vector lógico es más interesante que la
convencional!

R ESUMEN
+ Cuando un operador relacional y / o lógica opera en una expresión verctorial, la operación se
lleva a cabo elemento a elemento. El resultado es un vector que contiene en 0 lógico (falso) ó 1
(verdadero).

+ Un vector puede tener un vector como subı́ndice lógico del mismo tamaño. Solamente se devuel-
ven los elementos correspondientes a los 1 en el vector lógico.
+ Cuando uno de los operadores lógicos (~ & |) opera sobre una expresión con algún valor dis-
tinto de cero en un operando se considera como verdadero; cero es considerado como falso. La
respuesta es un vector lógico.

+ Operadores aritméticos, relacionales y lógicos pueden aparecer en una misma expresión. Debe
tenerse mucho en la observación de la precedencia de los operadores correcta en este tipo de
situaciones.
+ Los vectores en una expresión lógica deben ser todos del mismo tamaño.

+ Si una expresión lógica es un vector o una matriz, se considera verdadero en un if solamente si


todos sus elementos son no cero.
+ Se necesitan paréntesis para separar ciertos operadores yuxtapuestos.
+ Las funciones lógicas any y all devuelven escalares cuando toman argumentos vectoriales, y son
por consiguiente muy útiles en el caso de los if.
+ Los vectores lógicos a menudo pueden utilizarse en lugar de los elseif escalonados más con-
vencionales. Esto proporciona códigos más rápidos y más elegantes, pero requiere más ingenio y
el código puede ser menos claro para leerse en el futuro.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 107

E JERCICIOS
1. Determı́nense los valores de las siguientes expresiones antes de comprobar sus respuestas uti-
lizando matlab. Es posible que sea necesario consultar la Tabla 5.3.
(a) 1 & -1
(b) 13 & ~(-6)
(c) 0 < - 2 | 0
(d) ~ [1 0 2] * 3
(e) 0 <= 0.2 <= 0.4
(f) 5 > 4 > 3
(g) 2 > 3 & 1
2. Teniendo en cuenta que a = [1 0 2] y b = [0 2 2] determı́nense los valores de las siguientes
expresiones. Compruébense las respuestas con Matlab.
(a) a ~ = b
(b) a < b
(c) a < b < a
(d) a < b < b
(e) a | (~a)
(f) b & (~b)
(g) a(~(~b))
(h) a = b == a. (Determı́nese el value final de a)
3. Escrı́banse algunas instrucciones de Matlab en la lı́nea de comandos que utilicen vectores lógicos
para contar el número de elementos de un vector x que son negativos, cero o positivos. Com-
pruébese, por ejemplo, con el vector

[-4 0 5 -3 0 3 7 -1 6]

4. Una cierta compañı́a ofrece siete niveles salariales anuales: 12000, 15000, 18000, 24000, 35000,
50000 y 70000. El número de empleados pagados en cada nivel son, respectivamente: 3000,
2500, 1500 , 1000, 400, 100 y 25. Escrı́banse algunas instrucciones en la lı́nea de comandos para
encontrar lo siguiente:
(a) El nivel de salario promedio. Utilı́cese mean.
(b) El número de empleados por encima y por debajo de este nivel de salario promedio. Utilı́cense
vectores lógicos para encontrar que niveles de sueldos están por encima y por debajo del
nivel medio. Multiplı́quense estos vectores lógicos elemento a elemento con el vector em-
pleados, y súmese el resultado.
(c) El salario promedio percibido por un individuo en la empresa (es decir, la factura total salario
anual dividido por el número total de empleados).
5. Escrı́banse algunas instrucciones sobre la lı́nea de comandos para quitar el elemento (o los ele-
mentos) más grande(s) de un vector. Pruébese con x = [1 2 5 0 5]. La idea es terminar con
[1 2 0] en x. Utilı́cese find y el vector vacı́o [].
6. Las cuentas de electricidad de los residentes de una pequeña comunidad rural se calculan de la
siguiente manera:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 108

(a) Si se utilizan 500 unidades o menos el costo es de 2 centavos de dólar por unidad;
(b) Si se utilizan más de 500 pero no más de 1000 unidades, el costo es de $ 10 para las primeras
500 unidades, y luego 5 centavos por cada unidad de más de 500;
(c) Si se utilizan más de 1000 unidades, el costo es de $ 35 para las primeras 1000 unidades
más 10 centavos por cada unidad en exceso de 1000;
(d) Además, una tarifa de servicio básico de $ 5 se carga, no importa la cantidad de electricidad
utilizada.
Los cinco residentes utilizan las siguientes cantidades (unidades) de electricidad en un determi-
nado mes: 200, 500, 700, 1000 y 1500. Escrı́base un programa que utilice vectores lógicos para
calcular cuánto se debe pagar. Muéstrense los resultados en dos columnas: una para la electricidad
utilizada en cada caso, y uno para la cantidad adeudada.

2014 - O.R. FAURE


Capı́tulo 6

Introducción a los gráficos

El objetivo de este capı́tulo es presentar


+ Potencialidades en gráficos de alto nivel en 2-D y 3-D en Matlab .

Una imagen, se dice, vale más que mil palabras. Matlab tiene un sistema de gráficos de gran alcance
para la presentación y visualización de datos, que es razonablemente fácil de usar. (La mayorı́a de las
figuras aquı́ han sido generados por Matlab.)

En este capı́tulo se presentan herramientas de alto nivel para graficar en 2-D y 3-D. Caracterı́sticas de
bajo nivel, como tratamientos de gráficos, serán discutidas más adelante en este capı́tulo.

Cabe destacar que el tratamiento de gráficos en este capı́tulo es breve, y es la intención principal dar
una idea de la capacidad y la potencialidad de los gráficos en Matlab. Para el tratamiento completo,
se debe consultar la ayuda en las funciones mencionadas en este capı́tulo, ası́ como la lista completa
de las funciones de gráficos en la ayuda en lı́nea, bajo Matlab : Reference: Matlab Function
Reference: Functions by Category: Graphics.

1. G R ÁFICOS B ÁSICOS EN 2-D


Los gráficos (en 2-D) se realizan con la instrucción plot. Su forma más simple, que toma un solo argu-
mento vectorial es: plot(y). En este caso los elementos de y se trazan contra sus ı́ndices, por ejemplo,
plot(rand (1, 20)) grafica 20 números al azar contra los enteros 1, 2, . . . , 20, y une los puntos suce-
sivos con lı́neas rectas, como en la Figura 6.1 (a). Si y es una matriz, sus columnas se representan contra
los ı́ndices de los elementos.

Los ejes se escalan y dibujan para incluir los puntos de datos mı́nimos y máximos de forma automática.

Probablemente la forma más comn de plot es plot(x, y) donde x e y son vectores de la misma lon-
gitud, por ejemplo,

x = 0: pi / 40: 4 * pi;
plot (x, sin (x))

109
Matlab ESENCIAL PARA INGENIEROS 110

1 3

0.9

2.5
0.8

0.7
2

0.6

0.5 1.5

0.4

1
0.3

0.2
0.5

0.1

0 0
0 2 4 6 8 10 12 14 16 18 20 0 0.5 1 1.5 2 2.5 3 3.5 4

(a) (b)
Figura 6.1: Nombre de la Figura.

En este caso, las coordenadas del punto i-ésimo son xi , yi . Esta forma de plot se ha utilizado amplia-
mente en los capı́tulos anteriores.

A partir de las coordenadas x e y se dibujan segmentos de rectas que unos los puntos. Por ejemplo, para
dibujar una lı́nea entre los puntos con coordenadas cartesianas (0, 1) y (4, 3) se utiliza la instrucción

plot ([0 4], [1 3]),

es decir [0 4] contiene las coordenadas x de los dos puntos, y [3 1] contiene sus coordenadas y.

Matlab tiene un conjunto de comandos para gráficos “fáciles de utilizar”, comenzando la cadena ’ez’.
La forma fácil de utilizar de plot es ezplot, por ejemplo,

ezplot (’tan (x)’)

E JERCICIOS
1. Dibújense lı́neas que unan los siguientes puntos: (0, 1); (4, 3); (2, 0) y (5, -2).
2. Véase si es posible dibujar una “casa” similar a la representada en la Figura g.1 (b).

1.1. E TIQUETAS . Los gráficos pueden ser etiquetados con las siguientes instrucciones:

gtext(’texto’)

Escribe la cadena (’texto’) en la ventana gráfica actual. gtext pone una cruz en la ventana gráfica
y espera a que un botón del mouse o una tecla sean presionados. La cruz se puede posicionar con la las
teclas de flecha o por medio del mouse. Por ejemplo,

gtext(’x marks the spot’)

Inténtese!

El texto también puede ser colocado en un gráfico de forma interactiva con Tool -> Edit Plot desde
la ventana de la figura.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 111

grid
agrega / elimina las lı́neas de cuadrı́cula al gráfico actual. El estado grid puede activarse.

text(x, y, ’texto’)
escribe el texto en la ventana gráfica en el punto especificado por x e y.

Si x e y son vectores, el texto será escrito en cada punto. Si el texto es una lista indexada, los puntos
sucesivos son etiquetados con las filas de texto correspondientes.

title(’texto’)
escribe texto como un tı́tulo en la parte superior de la gráfica.

xlabel(’horizontal’)
etiquetas del eje de las x.

ylabel(’vertical’)
etiquetas del eje de las y.

1.2. M ÚLTIPLES GR ÁFICOS CON LOS MISMOS EJES . Hay al menos tres maneras de realizar múltiples
gráficos en el mismo conjunto de ejes (que sin embargo pueden ser reajustados si los nuevos datos
quedan fuera del rango de los datos anteriores).

1. La forma más fácil es simplemente usar hold para mantener la gráfica actual sobre los ejes. Todas
las gráficas posteriores se añaden a los ejes hasta que se libere el hold, ya sea con hold off, o
simplemente hold, el cual cambia el estado (del hold).
2. La segunda manera es utilizar plot con múltiples argumentos, por ejemplo,

plot(x1, y1, x2, y2, x3, y3, ...)

representa gráficamente los pares de vectores (x1, y1), (x2, y2), (x3, y3), etc. La ven-
taja de este método es que los pares de vectores pueden tener diferentes longitudes. Matlab
selecciona automáticamente un color diferente para cada par.

Si se están trazando dos gráficos en los mismos ejes, puede encontrarse muy útil plotyy, que
permite tener escalas independientes en el eje y a la izquierda y a la derecha, por ejemplo,

plotyy(x, sin (x), x, 10 * cos (x))

(para x definido adecuadamente).


3. La tercera forma es utilizar la forma

plot (x, y)

donde x e y pueden ser ambos matrices, o donde uno puede ser un vector y el otro una matriz.

Si uno de ellos x ó y es una matriz y el otro es un vector, las filas o columnas de la matriz se
trazan contra el vector, utilizando un color diferente para cada uno. Filas o columnas de la matriz
se seleccionan dependiendo de cual tenga el mismo nmero de elementos que el vector. Si la matriz

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 112

es cuadrada, se utilizan columnas.

Si x e y son ambas matrices del mismo tamaño, las columnas de x se representan frente a las
columnas de y.

Si no se especifica x, como en plot(y), donde y es una matriz, las columnas de y se representan


frente al ńdice de la fila.

1.3. L OS ESTILOS DE L ÍNEA , MARCADORES Y COLORES . Estilos, marcadores y colores pueden


seleccionarse para una gráfica con un argumento en el plot, por ejemplo,

plot (x, y, ’--’)

se une a los puntos de la gráfica con lı́neas de puntos, mientras que

plot (x, y, ’o’)

dibuja cı́rculos en los datos y no traza las lı́neas uniéndolos. Pueden especificarse tres propiedades, por
ejemplo,

plot (x, sin(x), x,cos (x), ’om--’)

dibuja sin(x) en el estilo y el color por defecto y cos(x) con cı́rculos unidos con guiones en color
magenta. Los colores disponibles se indican con los sı́mbolos c, m, y, k, r, g, b, w. Invetı́guese
lo que quieren decir. Puede utilizarse la ayuda help plot para ver toda la gama de posibilidades que
existen.

1.4. L ÍMITES DE LOS EJES . Cada vez que se realiza una gráfica con Matlab se escalan automáticamente
los lı́mites de los ejes para ajustar los datos. Puede reemplazarse esto con

axis([xmin, xmax, ymin, ymax])

que establece la escala en el gráfico actual, es decir, realiza el gráfico y a continuacián, restablece los
lı́mites de los ejes.

Si se desea especificar uno (el mı́nimo o mximo) de un conjunto de lı́mites de los ejes, pero desea que
Matlab de manera automática escale la otra, utilı́cese Inf ó -Inf para el lı́mite autoescalado.

Es posible regresar a la configuración predeterminada de la escala de los ejes automáticamente mediante

axis auto

La instrucción

v = axis

devuelve la escala actual de los ejes en el vector v.

Es posible congelar los ejes en los lı́mites actuales mediante

axis manual

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 113

de manera que si hold está activa, los plot posteriores utilizarán estos mismos lı́mites.

Si se dibuja un cı́rculo, por ejemplo, con las instrucciones

x = 0: pi / 40: 2 * pi;
plot(sin (x), cos (x))

este cı́rculo, probablemente no tendrá el aspecto redondo, especialmente si cambia el tamaño de la ven-
tana de la figura.
El comando

axis equal

hace incrementos unitarios en eje x y en el eje y la misma longitud fı́sica que el monitor, de modo que
siempre aparecerán redondos los cı́rculos. El efecto se deshace con el axis normal.

Es posible eliminar las marcas y las escalas en los ejes mediante axis off y volver a implementarlos
mediante axis on.

axes Y axis La palabra axes (ejes) denota el plural de axis (eje), lo que lo hace de hecho en el uso
de inglés común. Sin embargo, en Matlab la palabra axes se refiere a un objeto gráfico en particular,
que incluye no solamente los ejes x e y y sus graduaciones y etiquetas, sino también todo lo dibujado
en esos ejes concretos: los gráficos actuales y cualquier texto incluido en la figura. El objeto axes se
analizará luego con más detalle.

1.5. M ÚLTIPLES GR ÁFICOS EN UNA MISMA VENTANA : subplot. Es posible mostrar varias gráficas
en la misma ventana de la figura mediante la función subplot. Al principio parece un poco de curioso,
pero es bastante fácil de trabajar. La instrucción

subplot(m, n, p)

divide la figure window en m × n pequeñas pares de ejes, y selecciona la p-ésima para la gráfica actual
(numeradas por fila de la izquierda a derecha y a partir de la fila superior). Por ejemplo, las siguientes
instrucciones producen las cuatro gráficas que se muestran en la Figura 6.2 (los detalles de trazado 3-D
se discuten en la Sección 7.2).

[x, y] = meshgrid(-3: 0.3: 3);


z = x .* exp(-x.ˆ 2 - y.ˆ 2);
subplot(2, 2, 1)
mesh(z), title(’subplot(2, 2, 1)’)
subplot(2, 2, 2)
mesh(z)
view(-37.5, 70), title(’subplot(2, 2, 2)’)
subplot(2, 2, 3)
mesh(z)
view(37.5, -10), title(’subplot(2, 2, 3)’)
subplot(2, 2, 4)
mesh(z)
view(0, 0), title(’subplot(2, 2, 4)’)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 114

El comando

subplot(1,1,1)
se reduce a un único conjunto de ejes en la ventana.

subplot(2, 2, 1) subplot(2, 2, 2

0.5

0.5
0
0
ï0.5
25
20 30
ï0.5
30 15
20
20 30 10
20 10
10 10 5
0 0 0 0

subplot(2, 2, 3) subplot(2, 2, 4)
0.5
0.5

0 0

ï0.5
0
10 30
20 20 ï0.5
30 10
0 0 5 10 15 20 25

Figura 6.2: Cuatro subplots: rotaciones de una superficie en 3D

1.6. L OS COMANDOS figure, clf Y cla. figure(h), donde h es un número entero, crea una
nueva ventana gráfica, y selecciona como actual a la figura h. Los gráficos subsiguientes se dibujan en
la ventana gráfica actual. h es el idntificador de la figura. El tratamiento de gráficos se discutirán con
más detalle en una secciones siguientes de este capı́tulo.

clf limpia la ventana de la figura actual. Además reestablece todas las propiedades asociadas con los
ejes, tales como el hold y el axis.

cla borra todas las gráficas y el texto de los ejes actuales, es decir, deja solamente los ejes x e y y la
información asociada.

1.7. I NPUTS GR ÁFICOS . El comando

[x, y] = ginput

permite seleccionar un número ilimitado de puntos de la ventana gráfica actual usando un mouse o las
teclas de flecha. Aparece una cruz móvil en el gráfico. Haciendo clic se guardarán a las coordenadas en

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 115

x(i) e y(i). Al pulsar <Enter> se terminan los ingresos. Se proporcionará un ejemplo luego de este
libro, que implica la selección de puntos en una figura y el ajuste de una curva a estos puntos.

El comando

[x, y] = ginput(n)

funciona como ginput excepto que se deben seleccionar exactamente n puntos. Consúltese la ayuda
para obtener más información.

1.8. G R ÁFICOS LOGAR ÍTMICOS . El comando

semilogy(x, y)

dibuja en el eje y con una escala log10 y x con una escala lineal. Por ejemplo, los comandos

x = 0: 0.01: 4;
semilogy(x, exp (x)), grid
2
10

1
10

0
10
0 0.5 1 1.5 2 2.5 3 3.5 4

Figura 6.3: Un gráfico logarı́tmico

produce el gráfico de la Figura 6.3. Incrementos iguales a lo largo del eje y representan múltiplos de
potencias de 10. Por lo tanto, a partir de la parte inferior, las lı́neas de la cuadrı́cula se dibujan en los
puntos 1, 2, 3, . . . , 10, 20, 30, . . . , 100, . . .. De esta manera, el gráfico de la función ex en estos ejes es una
lı́nea recta, porque la ecuación y = ex se transforma en una ecuación lineal cuando se toma logaritmos a
ambos lados.

Véase también semilogx y loglog.

Téngase en cuenta que x e y pueden ser vectores y/o matrices, al igual que en el plot.

E JERCICIO
2
Dibújense las funciones x2 , x3 , x4 y ex sobre el intervalo 0 ≤ x ≤ 4 utilizando semilogy.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 116

1.9. G R ÁFICOS POLARES . El punto (x, y) en coordenadas cartesianas puede representarse mediante
el punto (θ , r) en coordenadas polares, donde

x = r cos(θ ),

y = r sin(θ ),

y θ varı́a entre 0 y 2π radianes (360◦ ).

90
1
120 60

0.8

0.6
150 30

0.4

0.2

180 0

210 330

240 300

270

Figura 6.4: Gráfico en coordenadas polares

La instrucción

polar(theta, r)

genera una gráfica en coordenadas polares de los puntos con ángulos en theta y argumentos en r.

Como un ejemplo, las instrucciones

x = 0: pi/40: 2*pi;
polar(x, sin(28x)), grid

producen el gráfico de la Figura 6.4.

1.10. G RAFICANDO FUNCIONES MATEM ÁTICAS QUE CAMBIAN R ÁPIDAMENTE : fplot. En to-
dos los ejemplos de gráficos hasta el momento, las coordenadas x de los puntos trazados se han incre-
mentado de manera uniforme, por ejemplo, x = 0: 0.01: 4. Si la función que se quiere representar
gráficamente presenta cambios muy significativos en algunos lugares, esto puede ser ineficiente, y puede

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 117

incluso dar una gráfica engañosa.

Por ejemplo, las instrucciones

x = 0.01: 0.001: 0.1;


plot (x, sen (1 / x))

producen el gráfico que se muestra en la Figura 7.5 (a). Pero si los incrementos de x se reducen a
0.0001, se obtiene la gráfica de la Figura 7.5 (b) en su lugar. Para x < 0.04, los dos gráficos se ven muy
diferentes.

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0

ï0.2 ï0.2

ï0.4 ï0.4

ï0.6 ï0.6

ï0.8 ï0.8

ï1 ï1
0 0.02 0.04 0.06 0.08 0.1 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1

(a) (b)
Figura 6.5: Gráfica de la función y = sin(1/x).

Matlab tiene la función fplot que utiliza un enfoque un tanto más elegante. Considerando que el
método anterior evalúa la función sin(1/x) a intervalos igualmente espaciados, fplot evalúa con
mayor precisión sobre las regiones donde la función cambia más rápidamente. He aquı́ una manera de
utilizarla:

fplot (’sin (1 / x)’, [0.01 0.1]) % 1./x no es necesario

1.11. E L EDITOR DE PROPIEDADES . La manera más general de editar de un gráfico es utilizando el


Editor de Propiedades Property Editor, por ejemplo, Edit -> Figure Properties en la ventana
de la figura. Este tema se discute brevemente hacia el final de este capı́tulo.

2. G R ÁFICOS EN 3D
Matlab tiene una variedad de funciones para mostrar y visualizar datos en 3-D, ya sea como lı́neas en
3-D, o como diversos tipos de superficies. En esta sección se ofrece una breve descripción.

2.1. plot3. La función plot3 es la versión en 3-D de plot. El comando

plot3 (x, y, z)

dibuja una lı́nea en 3-D a través de los puntos cuyas coordenadas son los elementos de los vectores x, y
y z. Por ejemplo, el comando

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 118

plot3(rand (1,10), rand (1,10), rand (1,10))

genera 10 puntos al azar en el espacio 3-D, y los une mediante lı́neas rectas, como se muestra en la
Figura 6.6 (a).

Como otro ejemplo, los comandos

t = 0: pi / 50: 10 * pi;
plot3(exp (-0.02 * t). * sin (t), exp (-0.02 * t). * cos (t), t)
xlabel (’eje x’), ylabel (’eje y’) , zlabel (’z-eje’)

producirán la hélice en espiral se muestra en la Figura 6.6 (b). Téngase en cuenta la orientación de los
ejes x, y, z, y en particular que el eje z se puede etiquetar con zlabel.

2.2. G R ÁFICOS ANIMADOS EN 3D CON comet3. La función comet3 es similar a plot3 excepto
que dibuja con un movimiento estilo cometa. Utilı́cese comet3 para animar la hélice en la Figura 6.6
(b). No es difı́cil predecir el nombre de la versión 2-D.

2.3. S UPERFICIES . En el capı́tulo 1 se vio de qué manera dibujar el sombrero mexicano (Figura 1.3):

[x, y] = meshgrid (-8: 0,5: 8);


r = sqrt (x.2 + Y.2) + eps;
z = sen (r) ./ r;

Este dibujo es un ejemplo de una superficie (a partir de una malla).

1 35

0.9 30

0.8 25

0.7 20
zïaxis

zïaxis

0.6 15

0.5 10

0.4 5

0
1 1

0.8 0.8 0.5 1


0.6 0 0.5
0.6 0.4 0
ï0.5
0.4 0.2 ï0.5
yïaxis 0 yïaxis ï1 ï1
xïaxis xïaxis
(a) (b)
Figura 6.6: Ejemplos de plot3

Para ver de qué manera se dibuja tal superficie, se va a tomar un ejemplo sencillo, por ejemplo la función
z = x2 − y2 . La superficie que se busca es la generada por los valores de z como se mueve en una región
del plano xy. Se limitará a una parte del primer cuadrante de este plano, dada por

0 ≤ x ≤ 5, 0 ≤ y ≤ 5.
El primer paso es configurar una grilla en el plano xy sobre la cual la superficie será trazada. Se puede
utilizar la función meshgrid de Matlab para hacerlo, de la siguiente manera:

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 119

[x, y] = meshgrid (0: 5);

Esta instrucción establece dos matrices, x e y. (Funciones, como meshgrid, que devuelven más de un
argumento de salida, será discuten en detalle cuando se trate con funciones especiales. Sin embargo, no
se necesita saber los detalles con el fin de poder utilizar esto aquı́.)

Las dos matrices de este ejemplo son:

x =

0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5

y =

0 0 0 0 0 0
1 1 1 1 1 1
2 1 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
El efecto de esto es que las columnas de la matriz x tal como se muestra mantienen las coordenadas x
de los puntos en la cuadrı́cula, mientras que las filas de la matriz y mantienen las coordenadas y. Recor-
dando la forma en en que se definen las operaciones elemento a elemento de Matlab , esto significa que
la instrucción

z = x. ˆ 2 - y. ˆ 2

generará correctamente los puntos de superficie:

z =

0 1 4 9 16 25
-1 0 3 8 15 24
-4 -3 0 5 12 21
-9 -8 5 0 7 16
-16 -15 -5 -7 0 9
-25 -24 -12 -16 -9 0

Por ejemplo, en el punto de la grilla (5, 2), z toma el valor de 52 − 22 = 21. Por cierto, no es necesario
preocuparse por la relación exacta entre coordenadas de cuadrı́cula y subı́ndices de matriz; ésto es tarea
de meshgrid.

La instrucción mesh(z) entonces representa la superficie (Figura 6.7), con lı́neas que conectan los pun-
tos de malla en la superficie que se encuentran por encima de los puntos de cuadrı́cula.

Téngase en cuenta que mesh(z) muestra los ı́ndices de fila y de columna (subı́ndices) de la matriz z en
los ejes x e y. Si se desea ver los valores adecuados en los ejes x e y utilı́cese mesh(x, y, z). Esto se

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 120

aplica a muchas de las otras funciones de gráficos en 3-D.

La función mesh dibuja una superficie como un malla de alambres. Una visualización alternativa es pro-
porcionada por surf, que genera una vista facetada de la superficie (en colores), es decir, el armazón de
alambre se cubre con pequeños azulejos.

25

20

15

10

ï5

ï10

ï15

ï20

ï25
6

5
6
5.5
4 5
4.5
4
3 3.5
3
2 2.5
2
1.5
1 1

Figura 6.7: La superficie z = x2 − y2 .

Consúltese help para ver las diferentes posibilidades que otorgan mesh y surf.

E JERCICIOS
1. Dibújese la superficie que se muestra en la Figura 6.7 con una malla más fina (de 0.25 unidades
en cada dirección), utilizando

[x y] = meshgrid(0: 0.25: 5);


(el número de puntos de malla en cada dirección es 21).
2. La distribución inicial de calor sobre una placa de acero está dada por la función
2 −0.3y
u(x, y) = 80y2 e−x .

Trácese la superficie u sobre la cuadrı́cula definida por

−2.1 ≤ x ≤, −6 ≤ y ≤ 6,

donde el ancho de grilla es de 0.15 en ambas direcciones. Se debe obtener la imagen que se
muestra en la Figura 6.8.

2.4. C URVAS DE NIVEL . Luego de realizar el gráfico de la Figura 6.8, pruébese con el comando

contour(u)

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 121

100

80

60

40

20

0
100
80 30
60
20
40
20 10
0 0

Figura 6.8: Distribución de calor sobre una placa de acero.

Se deberá obtener un gráfico de contornos de la distribución del calor, como se muestra en la Figura 6.9
(a), es decir, las isotermas (lı́neas de igual temperatura). Aquı́ está el código que lo realiza:

[x, y] = meshgrid (-2,1: 0.15: 2.1, -6: 0.15: 6);


u = 80 * y.2 * exp (-x. ˆ 2 - 0.3 * y. ˆ 2).;
contour(u)

70

60 90
80

50 70
60
50
40
40
30
30 20
10
80
20 60
25
40 20
15
20 10
10 5
0 5 10 15 20 25 30

(a) (b)
Figura 6.9: Curvas de Nivel

El contorno de la función puede tomar una segunda variable de entrada. Puede ser un escalar que es-
pecifica el número de niveles de contorno a trazar, o puede ser un vector que especifica los valores en

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 122

los que se van a trazar los niveles de contorno.

Es posible obtener un gráfico con contornos en 3-D mediante contour3(u), como se muestra en la
Figura 7.9 (b).

Los niveles de contorno se pueden marcar con clabel (Véase la ayuda).

Un gráfico de contornos en 3-D puede ser dispuesto bajo una superficie con meshc o surfc. Por ejem-
plo, las instrucciones

[x, y] = meshgrid (-2: 0.2: 2);


z = x * exp (-x. ˆ 2 - y. ˆ 2).;
meshc(z)

producen el gráfico de la Figura 6.10 (a).

0.5 0.5

0 0

ï0.5 ï0.5
25 25
20 25 20 25
15 20 15 20
10 15 10 15
10 10
5 5 5 5
0 0 yïaxis 0 0
xïaxis

(a) (b)

Figura 6.10: meshc (a); Recortar una superficie (b).

2.5. R ECORTAR DE UNA SUPERFICIE CON NaNS . Si una matriz de una parcela de superficie con-
tiene NaNs, estos elementos no se trazan. Este le permite cortar de distancia (de cultivos) partes de una
superficie. Por ejemplo, los estados

[x, y] = meshgrid (-2: 0.2: 2, -2: 0.2: 2);


z = x * exp (-x. ˆ 2 - y. ˆ 2);
c = z; % Conserva la superficie original
c (1: 11,1: 21) = nan * c (1: 11,1: 21);
mesh(c), xlabel (’x-axis’), ylabel(’y-axis’)

producen el gráfico de la Figura 6.10 (b).

2.6. V ISUALIZACI ÓN DE CAMPOS VECTORIALES . La función quiver dibuja pequeñas flechas
para indicar un gradiente u otro campo vectorial. A pesar de que produce un gráfico en 2-D, se uti-
liza a menudo junto con el contorno, y es por eso que se describen brevemente aquı́.

Como ejemplo, considérese la función escalar de dos variables V = x2 + y. El gradiente de V se define


como el campo vectorial

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 123

 
∂V ∂V
∇V = , , = (2x, 1).
∂x ∂y
Las siguientes instrucciones dibujan flechas que indican la dirección de ∇V en puntos en el plano xy
(Véaase la Figura 6.11):

[x y] = meshgrid(-2:.2:2, -2:.2:2);
V = x.2 + y;
dx = 2*x;
dy = dx; % dy tiene el mismo tamanio que dx
dy(:,:) = 1; % dy tiene el mismo tamanio que dx pero son todos 1
contour(x, y, V), hold on
quiver(x, y, dx, dy), hold off

Las lı́neas de contorno indican familias de superficies planas; el gradiente en cualquier punto es perpen-
dicular a la superficie de nivel que pasa por ese punto. Se necesitan los vectores x e y como parámetros
para contour.

1.5

0.5

ï0.5

ï1

ï1.5

ï2
ï2 ï1.5 ï1 ï0.5 0 0.5 1 1.5 2

Figura 6.11: Gradientes y curvas de nivel

Un argumento adicional opcional para quiver especifica la longitud de las flechas. Consúltese la ayuda.

Si no se puede (o no se quiere) diferenciar V , puede utilizar la función gradient para estimar la


derivada:

[dx dy] = gradient(V, 0.2, 0.2);

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 124

Los valores 0.2 son los incrementos en las direcciones x e y utilizados en la aproximación.

2.7. V ISUALIZACI ÓN DE MATRICES . La función mesh también puede utilizarse para “visualizar”
una matriz. Las siguientes instrucciones generan la gráfica de la Figura 6.12:

A = zeros(30, 30);
A(:, 15) = 0.2*ones(30, 1);
A(7, :) = 0.1*ones(1, 30);
A(15, 15) = 1;
mesh(A)

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
30
25
30
20 25
15 20
10 15
10
5
5
0 0

Figura 6.12: Visualización de una matriz.

La matriz A es 30 × 30. El elemento en el medio - A(15, 15) - es 1, todos los elementos en la fila 7 son
0.1, y todos los elementos restantes en la columna 15 son 0.2. mesh(a) entonces, interpreta las filas
y columnas de una como una cuadrı́cula de coordenadas xy, con los valores de A(i, j) que forman la
superficie de la malla por encima de los puntos (i, j).

El función spy es útil para la visualización de matrices dispersas.

2.8. ROTACI ÓN DE GR ÁFICOS EN 3-D. La función view permite especificar el ángulo desde el cual
se ve un gráfico 3-D. Para verlo en funcionamiento, ejecútese la siguiente secuencia de instrucciones, la
cual gira la matriz visualizada en la Figura 6.12:

A = zeros(30, 30);
A(:, 15) = 0.2*ones(30, 1);
a(7, :) = 0.1*ones(1, 30);
a(15, 15) = 1;

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 125

mesh(a)

La función view toma dos argumentos. El primero de ellos, az en este ejemplo, se llama el azimut o
ángulo polar en el plano xy (en grados). az gira el punto de vista (el observador) sobre el eje z -es decir,
acerca de la “cima” en (15, 15) en la Figura 6.12 en el sentido contrario a las agujas del reloj. El valor
por defecto es de az −37.5. Por lo tanto, el programa gira en una dirección hacia la izquierda alrededor
del eje z en pasos de 15 a partir de la posición por defecto.

El segundo argumento de view es la elevación vertical el (en grados). Este es el ángulo que forma una
lı́nea desde el punto de vista con el plano xy. Un valor de 90 para el significa que está directamente
sobre la cabeza. Los valores positivos de la elevación media están por encima del plano xy; los valores
negativos significan que se está debajo de este. El valor por defecto es el de 30.

El comando pause(n) suspende la ejecución durante n segundos.

Puede girarse una figura en 3D interactiva de la siguiente manera. Hágase clic en el botón Rotate 3-D
en la barra de herramientas de la figura (primer botón de la derecha). Hágase clic en los ejes y un esbozo
de la figura aparecerá para ayudar a visualizar la rotación. Arrástrese el mouse en la dirección que se
desea girar. Cuando suelte el botón del mouse la figura rotada aparecerá en la nueva posición.

E JERCICIO
Vuélvase a escribir el programa anterior para cambiar la elevación gradual, manteniendo el azimut
fijo en su defecto.

2.9. OTRAS FUNCIONES GR ÁFICAS ÚTILES . Aquı́ se presentan más ejemplos interesantes de fun-
ciones gráficas. Con cada función se da un script a modo de ejemplo y se muestra el gráfico. La lista no
es de ninguna manera exhaustiva y tiene la intención de incentivar la búsqueda. Se recomienda consultar
la lista de funciones gráficas en lı́nea en Matlab Function Reference. Cada ı́tem tiene excelentes
ejemplos.

Téngase en cuenta que la función peaks genera una superficie de la muestra (Véase a continuación de
meshz).

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 126

Para fines de referencia las figuras siguientes son consideradas parte de la Figura 6.13.

Figura 6.13:
1. area 2. bar
x = 0:0.1:1.5; bar x = 0:pi/20:pi;
area(x’, [x. ˆ 2’ exp(x)’... bar(x,sin(x))
exp(x. ˆ 2)’])
18 1

0.9
16

0.8
14

0.7
12

0.6

10

0.5

0.4

6
0.3

4
0.2

2 0.1

0 0
0 0.5 1 1.5 ï0.5 0 0.5 1 1.5 2 2.5 3 3.5

3. barcompass 4. errorbar
z = eig(randn(10)); x = 0: 0.1: 1;
compass(z) errorbar(x, exp(-x), ...
0.5*rand(1,length(x)), ’d’)
1.4
90
4
120 60

1.2
3

150 2 30
1

0.8

180 0

0.6

0.4
210 330

0.2

240 300

270
0
ï0.2 0 0.2 0.4 0.6 0.8 1 1.2

5. ezcontourf 6. feather
ezcontourf(’x 2 - y 2) th = 0: pi/16: pi;
x2 ï y2 z = exp((-0.5 + 2*i)*th);
6

feather(z)
1
4

0.8

0.6

0
y

0.4

ï2
0.2

ï4 0

ï0.2
ï6
ï6 ï4 ï2 0 2 4 6
x
ï0.4
0 2 4 6 8 10 12 14 16 18

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 127

7. fill 8. fill (cont)


t = 0: pi/20: 2*pi; t = 0: pi/20: 4*pi;
fill(cos(t), sin(t), ’k’, ... fill(t, sin(t), ’g’)
0.9*cos(t), 0.9*sin(t), ’y’)
axis square
1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0

ï0.2 ï0.2

ï0.4 ï0.4

ï0.6 ï0.6

ï0.8 ï0.8

ï1 ï1
ï1 ï0.8 ï0.6 ï0.4 ï0.2 0 0.2 0.4 0.6 0.8 1 0 2 4 6 8 10 12 14

9. hist 10. meshz


x = -20: 120; [x y] = meshgrid(-3: 0.1: 3);
y = 50 + 20 * randn(1, 100000); z = peaks(x, y);
hist(y,x) meshz(z)
2500

2000 10

4
1500

ï2
1000
ï4

ï6

ï8
60
500
50
60
40 50
30 40
20 30
20
0 10
ï40 ï20 0 20 40 60 80 100 120 140 10
0 0

11. pie 12. ribbon


pie(rand(1, 10)) [x y] = meshgrid(-8: 1 :8);
r = sqrt(x. ˆ 2 + y. ˆ 2) + eps;
z = sin(r) ./ r;
9%
15%
ribbon(z)
1%
2%

1
8%
15%
0.8

0.6

0.4

0.2

18%
ï0.2

16% ï0.4
20

15 18
16
< 1% 14
10 12
10
15% 8
5 6
4
2
0 0

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 128

13. ribbon (cont) 14. stairs


t = 0: pi/40: 4*pi; x = 0: pi/40: pi;
y1 = sin(t); stairs(x, sin(x))
y2 = exp(-0.2*t).*sin(2*t);
y = [y1; y2];
ribbon(t’, y’, 0.1)
1

0.9

1
0.8
0.8

0.6 0.7

0.4

0.2 0.6

0
0.5
ï0.2

ï0.4
0.4
ï0.6

ï0.8
0.3
ï1
14
12 0.2
10 2.2
2
8 1.8
6 0.1
1.6
4 1.4
1.2
2
1 0
0 0.8 0 0.5 1 1.5 2 2.5 3 3.5

15. stem3 16. waterfall


t = 0: pi/50: 2*pi; [x y] = meshgrid(-2: 0.1: 2);
r = exp(-0.05*t); z = x.*exp(-x. ˆ 2 - y. ˆ 2);
stem3(r.*sin(t), r.*cos(t), t) waterfall(z)

7 0.5

0.4
6
0.3

5 0.2

0.1
4
0
3
ï0.1

2 ï0.2

ï0.3
1
ï0.4

0 ï0.5
1 50

40
0.5 1 45
0.8 40
0.6 30 35
0 0.4 30
0.2 20 25
0 20
ï0.5 ï0.2 15
10
ï0.4 10
ï0.6 5
ï1 ï0.8 0 0

R ESUMEN
+ Los gráfijos en 2-D se dibujan con la instrucción plot.

+ Existe un conjunto de instrucciones para gráficos fáciles de usar llamado ez*.


+ Los gráficos se pueden marcar con grid, text, title, xlabel, ylabel, etc.
+ Gráfijos múltiples se pueden trazar en los mismos ejes de varias maneras diferentes.

+ Los estilos de lı́nea, marcadores y colores pueden variarse.


+ Los lı́mites de axis pueden ser establecidos de forma explı́cita.
+ En Matlab la palabra axes se refiere a los objetos gráficos en los que se dibujan los ejes x e y,
sus etiquetas, gráficos y anotaciones de texto.

+ Varios conjuntos de ejes se pueden dibujar en la misma figura mediante subplot


+ Las coordenadas de puntos en una figura se pueden seleccionar con ginput.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 129

+ semilogx, semilogy y loglog se utilizan para trazar gráficos en escalas logarı́tmicas.


+ El comando polar realiza gráficos en coordenadas polares.
+ fplot ofrece una manera práctica de trazar funciones matemáticas.

+ plot3 dibuja lı́neas en 3-D.


+ comet3 realiza una gráfica animada en 3-D.
+ Una superficie 3-D se puede trazar con mesh.
+ Un gráfico en 3-D puede ser girada con view o con la herramienta Rotate 3-D en la ventana de
la figura.
+ mesh también puede utilizarse para visualizar una matriz.
+ contour y countour3 dibuja curvas de nivel en 2-D y 3-D, respectivamente.

+ Las superficies 3-D se pueden recortar.


+ Para obtener una lista completa de las funciones de gráficos consúltese la ayuda en lı́nea en: Help
MATLAB Function Reference: Functions by Category: Graphics.

E JERCICIOS
1. Realı́cese un gráfico de la población de los Estados Unidos desde el año 1790 hasta el año 2000
utilizando el modelo logı́stico:
197273000
P(t) =
1 + e−0.03134(t−1913.25)
donde t es la fecha en años.

Los datos reales es miles para cada década desde el año 1790 hasta el año 1950 son los que se
muestran en la Tabla 6.1:
Hagáse el gráfico de la función P(t) superpuesto con los datos discretos marcados con cı́rculos
como se muestra en la Figura 6.14.

2. La Espiral de Arquı́medes (Figura 6.15 (a)) puede ser representada en coordenadas polares por la
ecuación
r = aθ ,
donde a es una constante (Las conchas de una clase de animales llamados numulites crecen de
esta manera).

Escrı́banse algunas instrucciones en la lı́nea de comandos para dibujar la espiral para algunos
valores de a.

3. Otro tipo de espiral es la espiral logarı́tmica (Figura 6.15 (b)), que describe el crecimiento de las
conchas de los animales como el bı́garo y el nautilus. Su ecuación en coordenadas polares es

r = aqθ , donde a > 0, q > 1.

Dibújese esta espiral.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 130

Año Población
(en miles)
1790 3929
1800 5308
1810 7240
1820 9638
1830 12866
1840 17069
1850 23192
1860 31443
1870 38558
1880 50156
1890 62948
1900 75995
1910 91972
1920 105711
1930 122775
1940 131669
1950 150697

Tabla 6.1: Datos de la evolución de la población de Estados Unidos

4
x 10
16

14

12

10

0
1780 1800 1820 1840 1860 1880 1900 1920 1940 1960

Figura 6.14: Población de los Estados Unidos: modelo versus censo.

4. La disposición de las semillas en una cabeza de girasol (y otras flores, como las margaritas) sigue
un patrón matemático fijo. La semilla está en la posición enésima:

r= n

con coordenada angular πdn/180 radianes, donde d es el ángulo constante (en grados) entre dos
semillas sucesivas, es decir, entre la n-ásima y (n + 1)-ésima semillas. Una cabeza de girasol

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 131

90 90
40 80
120 60 120 60

60

150 20 30 150 40 30

20

180 0 180 0

210 330 210 330

240 300 240 300


270 270

Figura 6.15: Espirales

perfecto (Figura 6.16) es generada por d = 137.51◦ .

Escrı́base un programa para trazar las semillas; y utilı́cese un cı́rculo (o) para cada semilla. Una
caracterı́stica notable de este modelo es que el ángulo d debe ser exacto para obtener girasoles ade-
cuados. Experiméntese con algunos valores diferentes, por ejemplo, 137.45◦ , 137.65◦ , 137.92◦ .
5. La ecuación de una elipse en coordenadas polares está dada por

r = a(1 − e2 )/(1 − ecosθ ),

donde a es el semieje mayor y e es la excentricidad, si uno se centra en el origen y el semieje mayor


se encuentra en el eje x. El cometa Halley, que pudo verse en 1985/6, se mueve en una órbita
elı́ptica alrededor del sol (en uno de los focos) con un semieje mayor de 17.9 UA (UA significa,
Unidad Astronómica, que es la distancia media de la Tierra al Sol:. 149 600 000 kilómetros). La
excentricidad de la órbita es 0.967276.

Escrı́base un programa que dibuje la órbita del cometa Halley y la Tierra (suponiendo que la tierra
es circular).
6. Una relación iterativa muy interesante que se ha estudiado mucho recientemente está define por

yk+1 = ryk (1 − yk )

(esta es una forma discreta del modelo logı́stico). Dados y0 y r, los valores sucesivos de yk pueden
calcularese muy fácilmente, por ejemplo: si y0 = 0.2 y r = 1, entonces y1 = 0.16, y2 = 0.1334, y
ası́ sucesivamente. Esta fórmula se utiliza a menudo para modelar el crecimiento de la población
en caso de que este crecimiento no es ilimitado, está limitado por la escasez de comida, hábitat,
etc. yk exhibe un comportamiento fascinante, conocido como el caos matemático, para valores de
r entre 3 y 4 (independientemente de y0 ).

Escrı́base un programa que trace yk contra k (como puntos individuales). Los valores de r que
dan gráficos particularmente interesantes son 3.3, 3.5, 3.5668, 3.575, 3.5766, 3.738, 3.8287, y
muchos más que se pueden encontrar por medio de la exploración.

2014 - O.R. FAURE


Matlab ESENCIAL PARA INGENIEROS 132

90
40
120 60

30

150 20 30

10

180 0

210 330

240 300

270

Figura 6.16: Un girasol perfecto

7. Un hermoso fractal puede extraerse por el trazado de los puntos (xk , yk ) generados por las sigu-
ientes ecuaciones en diferencias
p
xk+1 = yk (1 + sin(0.7xk ) − 1.2 |xk |)

yk+1 = 0.21 − xk ,

comenzando con x0 = y0 = 0.

Escrı́base un programa para dibujar la imagen (trácense los puntos individuales; no deben unirse).

2014 - O.R. FAURE

También podría gustarte