Matlab Esencial para Ingenieros Ago 2014
Matlab Esencial para Ingenieros Ago 2014
Matlab Esencial para Ingenieros Ago 2014
O.R. FAURE
∗ Basado en el libro Essential MATLAB for Engineers and Scientists, por B RIAN D. H AHN & DANIEL T. VALENTINE ,
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
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
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.
http://www.mathworks.com/products/matlab
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.
+ 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:
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:
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:
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.
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.
+ 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).
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.
(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
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.
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
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.
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.
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
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.
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.
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.
0.8
0.6
0.4
0.2
ï0.2
ï0.4
0 2 4 6 8 10 12 14 16 18 20
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:
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;
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
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)
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
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.
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
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;
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.
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.
Fundamentos de Matlab
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:
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.
21
Matlab ESENCIAL PARA INGENIEROS 22
a = 98
Si se intenta hacer referencia a una variable inexistente se obtendrá el mensaje de error siguiente:
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!
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:
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
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.
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.
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).
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.
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
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
2.3. linspace. La función linspace puede utilizarse para inicializar un vector de valores igual-
mente espaciados, por ejemplo:
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.
y = [1 4 8 0 -1]’.
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)’]
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).
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.
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
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
+ 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.
u * t - g/2*t. ˆ 2
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:
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
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:
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.
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
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
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
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.
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’
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):
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.
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.
(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.
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
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.
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
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.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];
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
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).
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!).
(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:
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 .
x = 5; % acres
h = 0.4047 * x; % hectareas
disp(h)
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:
x = 2;
disp( [’La respuesta es ’, num2str(x)] );
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:
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.
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.
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.
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.
format compact
x = [1e3 1 1e-4]
x =
1.0e+003 *
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.
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:
Y por último
¿Qué es lo que está pasando? La instrucción disp se repite cinco veces, tres veces, y ninguna.
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) )
1.50000000000000
1.41666666666667
1.41421568627451
1.41421356237469
1.41421356237310
1.41421356237310
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.)
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.)
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: m: k
instrucciones
end
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.
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:
ó
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.
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.
(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.)
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.
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.
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).
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.
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
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.
Aquı́ se dan algunos ejemplos más de expresiones lógicas que involucran operadores relacionales, con
sus significados entre paréntesis:
a ~
= 0, (a 6= 0).
Recuérdese que se debe utilizar el signo doble igual (==) cuando se prueba por la igualdad, por ejemplo,
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.
¿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,
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ı́?
x = 2;
if x < 0 disp( ’negativo’), else disp( ’no negativo’), 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:
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:
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:
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:
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.
if condicion1
instruccionesA
elseif condicion2
instruccionesB
elseif condicion3
instruccionesC
...
else
instruccionesE
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.
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:
3.5
2.5
1.5
0.5
0
0 0.5 1 1.5 2 2.5 3 3.5 4
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:
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.
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
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
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.
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.
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.
z = reiθ .
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:
N OTA :
+ Si y es un complejo, la instrucción plot(y) es equivalente a:
lo que resulta
a =
La instrucción
a’
ans =
a .’
ans =
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 );
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.
+ % 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
por ejemplo,
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:
10.2. L A INSTRUCCI ÓN input. Reescrı́base el script compint.m para que se vea exactamente ası́,
y recuérdese guardarlo:
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
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:
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).
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.
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.
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.
+ 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.
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:
2. Explı́quese y fundaméntese, cuales de los siguientes no son válidos como nombres de variables
en Matlab:
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:
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.
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
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.
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
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
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).
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.
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.
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:
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
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.
“C++ Data Structures”, Jones and Bartlett Series in Computer Science (1998).
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.
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
¿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
2.5
1.5
y
0.5
0
0 2 4 6 8 10 12
x
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):
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.
40
30
20
10
0
e
ï10
ï20
ï30
ï40
ï50
7 7.5 8 8.5 9 9.5 10
V
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
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.
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:
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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Script para convertir temperaturas de F a C
% Escrito por Daniel T. Valentine - Octubre de 2006
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
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:
Utilizando la función quad.m para hacer el trabajo sucio, podrı́a traducirse directamente en la siguiente
secuencia de comandos de Matlab:
(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:
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
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.
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.
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
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!
x = -1:.1:1; <Enter>
plot(x, abs(x), ’o’) <Enter>
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
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));
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.
ï2
ï4
ï2 ï1.5 ï1 ï0.5 0 0.5 1 1.5 2
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 .
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).
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:
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.
1
asin(x)
acos(x)
atan(x)
0.8
0.6
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;
%
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
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.
save NombreDelArchivo x y z
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.
load NombreDelArchivo
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
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.
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.
+ 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:
N OTA :
+ 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.
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’);
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(θ ).
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
después de la instrucción de plot, donde xmin, xmax, etc, tengan los valores adecuados.
Vectores Lógicos
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.
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
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!
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)
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
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.
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
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).
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!
La gráfica de la Figura 5.3 de la izqueirda deberı́a verse nada más que como un boceto. El problema
0.8
0.6
0.4
0.2
ï0.2
ï0.4
ï15 ï10 ï5 0 5 10 15
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
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.
1. Establézcase un vector r con siete elementos aleatorios (dejar de lado el punto y coma para que
se puedan ver sus elementos):
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
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
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
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:
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.
O PERADOR S IGNIFICADO
˜ not
& and
| or
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
~ (0 & 0)
(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.
(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
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)
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
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.
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,
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;
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)
a = [-2 0 1 5 9];
a ([5 1 3])
devuelve
9 -2 1
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
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:
0 5
logical([0 1 0 1 0])
a(logical([1 1 1 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)
islogical([0 0 1 1 1])
devuelve 0.
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).
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
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:
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
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.
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:
El impuesto a pagar sobre una renta imponible de $ 30000, por ejemplo, es:
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:
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;
5000.00 500.00
10000.00 1000.00
15000.00 2000.00
30000.00 8000.00
50000.00 18000.00
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
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
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
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.
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:
(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.
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.
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
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,
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,
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.
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,
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,
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
Si x e y son ambas matrices del mismo tamaño, las columnas de x se representan frente a las
columnas de y.
dibuja cı́rculos en los datos y no traza las lı́neas uniéndolos. Pueden especificarse tres propiedades, por
ejemplo,
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
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.
axis auto
La instrucción
v = axis
axis manual
de manera que si hold está activa, los plot posteriores utilizarán estos mismos lı́mites.
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).
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
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.
[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
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.
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
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.
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.
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(θ ),
90
1
120 60
0.8
0.6
150 30
0.4
0.2
180 0
210 330
240 300
270
La instrucción
polar(theta, r)
genera una gráfica en coordenadas polares de los puntos con ángulos en theta y argumentos en r.
x = 0: pi/40: 2*pi;
polar(x, sin(28x)), grid
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
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:
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.
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
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).
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):
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
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:
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ı́.)
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
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
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
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
−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)
100
80
60
40
20
0
100
80 30
60
20
40
20 10
0 0
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:
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
Es posible obtener un gráfico con contornos en 3-D mediante contour3(u), como se muestra en la
Figura 7.9 (b).
Un gráfico de contornos en 3-D puede ser dispuesto bajo una superficie con meshc o surfc. Por ejem-
plo, las instrucciones
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)
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
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ı́.
∂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
Un argumento adicional opcional para quiver especifica la longitud de las flechas. Consúltese la ayuda.
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
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).
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;
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.
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).
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
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
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
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
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
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.
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
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
4
x 10
16
14
12
10
0
1780 1800 1820 1840 1860 1880 1900 1920 1940 1960
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
90 90
40 80
120 60 120 60
60
150 20 30 150 40 30
20
180 0 180 0
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
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.
90
40
120 60
30
150 20 30
10
180 0
210 330
240 300
270
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).