Académique Documents
Professionnel Documents
Culture Documents
Curso
intrductorio
de MATLAB.
Introduccin ...................................................................................................................................................................... 3
1
1.2
Notas de clase en
preparacin
Cmo empiezo a usar MATLAB? ...................................................................................................................
4
1.3
1.4
1.1
3.
Qu es MATLAB? ............................................................................................................................................. 3
Flavia E. Buffo
2012.
1.4.1
1.4.2
1.4.3
1.4.4
El editor/debugger .................................................................................................................................... 9
1.5
1.6
1.7
1.8
1.9
2.2
2.3
2.1
3.2
3.3
5.
PROGRAMACIN DE MATLAB................................................................................................................................. 31
4.1
4.2
4.3
Archivos *.m.................................................................................................................................................... 35
4.4
4.5
4.6
4.7
4.8
5.2
5.3
5.5
5.6
6.2
6.3
6.4
6.5
7.1
7.2
7.3
7.4
Introduccin
Este apunte pretende iniciar al lector en la utilizacin del programa MATLAB. Est
organizado de la siguiente manera, en la primera seccin se mencionan brevemente las
facilidades de MATLAB como herramienta de clculo, se presenta el entorno de MATLAB y
los primeros pasos para acceder al programa y su a entorno. Se definen algunos conceptos
bsicos como comandos, variables, constantes, operadores y funciones de MATLAB y la
sintaxis para utilizarlos. En La seccin 2 estudia lo referente al ingreso de matrices y
vectores. En la tercer seccin se presentan los operadores y las funciones de la librera
MATLAB que se utilizan para realizar operaciones entre escalares, vectores y matrices. En
la seccin 4 se menciona cmo programar con MATLAB, cmo crear archivos m (funciones
y procedimientos de comandos) y las referencias de funcin. En las secciones 5 y 6 se
describe cmo obtener grficos en 2D y 3D. Para finalizar con el manejo de funciones de
funciones para resolver diferentes problemas: resolucin de ecuaciones no lineales,
optimizacin, integracin numrica y resolucin numrica de ecuaciones diferenciales.
Las sentencias que se detallan a continuacin son algunas de las que sern tiles a lo largo
del curso:
>> help general
Una expresin de MATLAB puede tener las dos formas siguientes: primero, asignando su
resultado a una variable,
>> variable = expresin
y segundo evaluando simplemente el resultado del siguiente modo,
>> expresin
en cuyo caso el resultado se asigna automticamente a una variable interna de MATLAB
llamada ans (de answer) que almacena el ltimo resultado obtenido. Se considera por
defecto que una expresin termina cuando se pulsa intro. Si se desea que una expresin
contine en la lnea siguiente, hay que introducir tres puntos (...) antes de pulsar intro.
Tambin se pueden incluir varias expresiones en una misma lnea separndolas por comas
(,) o puntos y comas (;). Si una expresin termina en punto y coma (;) su resultado se
calcula, pero no se escribe en pantalla. Esta posibilidad es muy interesante, tanto para
evitar la escritura de resultados intermedios, como para evitar la impresin de grandes
cantidades de nmeros cuando se trabaja con matrices de gran tamao.
MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones
intrnsecas, esto es, funciones incorporadas en el propio cdigo ejecutable del programa.
Estas funciones son particularmente rpidas y eficientes. Existen adems funciones
definidas en archivos *.m y *.mex12 que vienen con el propio programa o que han sido
aportadas por usuarios del mismo. Estas funciones extienden en gran manera las
posibilidades del programa. El concepto de funcin en MATLAB es semejante al de otros
lenguajes de programacin, aunque con algunas diferencias importantes. Una funcin tiene
nombre, valor de retorno y argumentos. Una funcin se llama utilizando su nombre en una
expresin o utilizndolo como un comando ms. Las funciones se pueden definir en
archivos de texto *.m en la forma que se ver ms adelante. Los argumentos de cada
funcin van a continuacin del nombre entre parntesis (y separados por comas si hay ms
de uno). Los valores de retorno son el resultado de la funcin y sustituyen a sta en la
expresin donde la funcin aparece.
Una caracterstica de MATLAB es que las funciones que no tienen argumentos no llevan
parntesis, por lo que a simple vista no siempre son fciles de distinguir de las simples
variables. Por ejemplo eps es una funcin sin argumentos, que devuelve la diferencia entre
1.0 y el nmero de coma flotante inmediatamente superior. En lo sucesivo el nombre de la
funcin ir seguido de parntesis si interesa resaltar que la funcin espera que se le pase
uno o ms argumentos. MATLAB permite que una funcin tenga un nmero variable de
argumentos y valores de retorno, determinado slo en tiempo de ejecucin.
MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos de
funciones ms importantes, clasificadas segn su finalidad:
1.- Funciones matemticas elementales.
2.- Funciones matemticas especiales.
3.- Funciones matriciales elementales.
4.- Funciones matriciales especficas.
5.- Funciones para la descomposicin y/o factorizacin de matrices.
6.- Funciones para anlisis estadstico de datos.
7.- Funciones para anlisis de polinomios.
8.- Funciones para integracin de ecuaciones diferenciales ordinarias.
9.- Funciones para la resolucin de ecuaciones no-lineales y optimizacin.
10.- Funciones para la integracin numrica.
11.- Funciones para el procesamiento de seal.
Algunas cosas tiles para conocer:
Comenzando a teclear el nombre de una funcin y pulsando la tecla Tab, MATLAB
completa automticamente el nombre de la funcin, o bien muestra en una ventana
las funciones disponibles que comienzan con las letras tecleadas por el usuario.
Cuando al ejecutar un archivo *.m se produce un error y se obtiene el
correspondiente mensaje en la Command Window, MATLAB muestra mediante un
subrayado un enlace a la lnea del archivo fuente en la que se ha producido el error.
Clicando en ese enlace se va a la lnea correspondiente del archivo por medio del
Editor/Debugger.
1.4.1 La ventana con el historial
La ventana Command History ofrece acceso a las sentencias que se han ejecutado
anteriormente en la Command Window. Estas sentencias estn tambin accesibles por
medio de las teclas y , pero esta ventana facilita mucho el tener una visin ms general
de lo hecho anteriormente y seleccionar lo que realmente se desea repetir.
10
Editor se preocupa tambin de que las comillas o parntesis que se abren, no se queden sin
el correspondiente elemento de cierre. Colocando el cursor antes o despus de una
apertura o cierre de corchete o parntesis y pulsando las teclas () o (), el Editor
muestra con qu cierre o apertura de corchete o parntesis se empareja el elemento
considerado; si no se empareja con ninguno, aparece con una rayita de tachado.
Seleccionando varias lneas y clicando con el botn derecho aparece un men contextual
cuya sentencia Comment permite entre otras cosas comentar con el carcter % todas las
lneas seleccionadas. Estos comentarios pueden volver a su condicin de cdigo ejecutable
seleccionndolos y ejecutando Uncomment en el men contextual. Otra opcin muy til de
ese men contextual es Smart Indent, que organiza la sangra de los bucles y bifurcaciones
de las sentencias seleccionadas.
Para realizar la ejecucin de un archivo de comandos controlada con el Debugger dicha
ejecucin se comienza eligiendo el comando Run en el men Debug, pulsando la tecla F5,
clicando en el botn Continue ( ) de la barra de herramientas del Editor o tecleando el
nombre del archivo en la lnea de comandos de la Command Window
El Debugger es un programa que hay que conocer muy bien, pues es muy til para detectar
y corregir errores. Es tambin enormemente til para aprender mtodos numricos y
tcnicas de programacin. Para aprender a manejar el Debugger lo mejor es practicar. Su
uso correcto no es parte de los contenidos de un curso introductorio de MATLAB.
1.5 Formatos de salida y de otras opciones de MATLAB
MATLAB 7.0 dispone de un cuadro de dilogo desde el que se establecen casi todas las
opciones que el usuario puede determinar por su cuenta. Este cuadro de dilogo se abre
con el comando Preferences del men File. El cuadro de dilogo Command/Window/Fonts
ofrece la posibilidad de elegir el tipo de letra as como el tamao y el color, tanto de las
letras como del fondo con la que se escribe en la ventana de comandos de MATLAB. Es
muy importante utilizar tipos de letra de tamao constante (por ejemplo, Courier New,
Lucida Console o Monospaced), para que las filas de las matrices se alineen bien en la
pantalla. Respecto a los formatos numricos con que MATLAB muestra los resultados
(recurdese que siempre calcula con doble precisin, es decir con unas 16 cifras decimales
equivalentes), las posibilidades de mostrar los resultados son las siguientes:
short coma fija con 4 decimales (defecto)
long coma fija con 15 decimales
hex cifras hexadecimales
bank nmeros con dos cifras decimales
short e notacin cientfica con 4 decimales,
short g notacin cientfica o decimal, dependiendo del valor
long e notacin cientfica con 15 decimales
long g notacin cientfica o decimal, dependiendo del valor
rational expresa los nmeros racionales como cocientes de enteros
11
12
>> diary on
...
El comando diary off suspende la ejecucin de diary y diary on la reanuda. El simple
comando diary pasa de on a off y viceversa. Para poder acceder al archivo filename.txt con
Notepad o Word es necesario que diary est en off. Si en el comando diary no se incluye el
nombre del archivo se utiliza por defecto un archivo llamado diary (sin extensin).
1.8 Lneas de comentarios
Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica comienzo de
comentario. Cuando aparece en una lnea de comandos, el programa supone que todo lo
que va desde ese carcter hasta el fin de la lnea es un comentario.
Ms adelante se ver que los comentarios de los archivos *.m tienen algunas
peculiaridades importantes, pues pueden servir para definir help's personalizados de las
funciones que el usuario vaya creando.
MATLAB permite comentar bloques de sentencias, es decir, muchas sentencias contiguas
de una vez. Una forma de hacerlo es seleccionar las sentencias que se desea comentar,
clicar con el botn derecho, y elegir la opcin Comment en el men que se abre; las
sentencias seleccionadas se comentan individualmente con el carcter %. De forma similar
se pueden eliminar los comentarios. Otra forma de comentar bloques de sentencias es
encerrar las lneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques
comentados pueden incluirse dentro de otros bloques comentados ms amplios (bloques
anidados).
1.9 Medida de tiempos y de esfuerzo de clculo
MATLAB dispone de funciones que permiten calcular el tiempo empleado en las
operaciones matemticas realizadas. Algunas de estas funciones son las siguientes:
cputime devuelve el tiempo de CPU (con precisin de centsimas de segundo) desde
que el programa arranc. Llamando antes y despus de realizar una operacin y
restando los valores devueltos, se puede saber el tiempo de CPU empleado en esa
operacin. Este tiempo sigue corriendo aunque MATLAB est inactivo.
etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (atencin al orden!),
obtenidos como respuesta al comando clock.
tic ops toc imprime el tiempo en segundos requerido por ops. El comando tic pone el
reloj a cero y toc obtiene el tiempo transcurrido.
A modo de ejemplo, el siguiente cdigo mide de varias formas el tiempo necesario para
resolver un sistema de 1000 ecuaciones con 1000 incgnitas. Tngase en cuenta que los
13
14
15
NaN
Inf
ans
i,j
Pi
MATLAB dispone de tres funciones tiles relacionadas con las operaciones de coma
flotante. Estas funciones, que no tienen argumentos, son las siguientes:
eps devuelve la diferencia entre 1.0 y el nmero de coma flotante inmediatamente
superior. Da una idea de la precisin o nmero de cifras almacenadas. En un PC, eps
vale2.2204e-016.
realmin devuelve el nmero ms pequeo con que se puede trabajar (2.2251e-308)
realmax devuelve el nmero ms grande con que se puede trabajar (1.7977e+308).
2.2 Nmeros complejos: funcin complex
En muchos clculos los resultados no son reales sino complejos, con parte real y parte
imaginaria. MATLAB trabaja sin ninguna dificultad con nmeros complejos. Para ver como
se representan por defecto los nmeros complejos, ejectense los siguientes comandos:
>> a=sqrt(-4)
a=
0 + 2.0000i
>> 3 + 4j
ans =
3.0000 + 4.0000i
En la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j para
representar el nmero imaginario unidad (en la salida, sin embargo, puede verse que
siempre aparece la i). Si la i o la j no estn definidas como variables, puede intercalarse el
signo (*). Esto no es posible en el caso de que s estn definidas, porque entonces se utiliza
el valor de la variable. En general, cuando se est trabajando con nmeros complejos,
conviene no utilizar la i como variable ordinaria, pues puede dar lugar a errores y
confusiones. Por ejemplo, obsrvense los siguientes resultados:
>> i=2
i=
2
>> 2+3i
ans =
2.0000 + 3.0000i
>> 2+3*i
ans =
8
16
>> 2+3*j
ans =
2.0000 + 3.0000i
Cuando i y j son variables utilizadas para otras finalidades, como unidad imaginaria puede
utilizarse tambin la funcin sqrt(-1), o una variable a la que se haya asignado el resultado
de esta funcin.
MATLAB dispone asimismo de la funcin complex, que crea un nmero complejo a partir de
dos argumentos que representan la parte real e imaginaria, como en el ejemplo siguiente:
>> complex(1,2)
ans =
1.0 .0000i
2.3 Matrices y vectores
Como en casi todos los lenguajes de programacin, en MATLAB las matrices y vectores son
variables que tienen nombres. Se sugiere que se utilicen letras maysculas para matrices y
letras minsculas para vectores y escalares (MATLAB no exige esto, pero puede resultar
til).
Para definir una matriz no hace falta declararlas o establecer de antemano su tamao.
MATLAB determina automticamente el nmero de filas y de columnas en funcin del
nmero de elementos que se proporcionan (o se utilizan).
Hay diferentes maneras de introducir matrices, una de ellas es utilizando el teclado. Las
matrices se introducen por filas, los elementos de una misma fila estn separados por
blancos o comas, mientras que las filas estn separadas por pulsaciones enter o por
caracteres punto y coma(;). Por ejemplo, el siguiente comando define una matriz A de
dimensin (33):
>> A=[1 2 3; 4 5 6; 7 8 9]
A partir de este momento la matriz A est disponible para hacer cualquier tipo de
operacin con ella (adems de valores numricos, en la definicin de una matriz o vector se
pueden utilizar expresiones y funciones matemticas).
Como casos especiales de matrices, se definen los vectores, un vector fila x en la forma
siguiente (si los tres nmeros estn separados por blancos o comas, el resultado ser un
vector fila):
>> x=[10 20 30] % vector fila
Por el contrario, si los nmeros estn separados por intros o puntos y coma (;) se obtendr
un vector columna:
>> y=[11; 12; 13] % vector columna.
17
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. En MATLAB
se accede a los elementos de vector poniendo el ndice entre parntesis (por ejemplo x(3)
x(2)). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis,
separados por una coma (por ejemplo A(1,2) A(3,2)). Las matrices se almacenan por
columnas aunque se introduzcan por filas, y teniendo en cuenta esto se puede accederse a
cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz
(33) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Tambin se pueden definir matrices a partir de indicar elementos no cero de la misma por
ejemplo
>> clear A
>> A(1,1)=1; A(2,2)=2;A(3,3) =3
nos dar una matriz diagonal de dimensin 3 y con los elementos ingresados.
Para calcular la dimensin de una matriz o de un vector se utilizan las funciones de
MATLAB size y length como sigue
>> [m,n]=size(A)
devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es cuadrada basta
recoger el primer valor de retorno.
La sentencia
>>n=length(x)
calcula el nmero de elementos del vector y lo guarda en n.
La asignacin de valores complejos a vectores y matrices desde teclado puede hacerse de
las dos formas, que se muestran en el ejemplo siguiente (conviene hacer antes clear i, para
que i no est definida como variable; este comando se estudiar ms adelante):
>> A = [1+2i 2+3i; -1+i 2-3i]
A=
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
>> A = [1 2; -1 2] + [2 3; 1 -3]*I % En este caso el * es necesario
A=
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado. En este
caso s es necesario utilizar el operador (*), segn se muestra en el ejemplo anterior.
Introducir las matrices por teclado slo es prctico cuando se trabaja con matrices de
pequeo tamao o cuando no hay que repetir esa operacin muchas veces. Existen en
MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares.
Algunas de estas funciones son las siguientes:
eye(4) forma la matriz unidad de tamao (44)
18
MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices previas ya
definidas, por varios posibles caminos:
recibiendo alguna de sus propiedades (como por ejemplo el tamao),
por composicin de varias submatrices ms pequeas, siempre que los tamaos de
las submatrices los permitan.
modificndola de alguna forma.
En la prctica 1 se presentan diferentes ejercicios que indican de qu manera se obtienen
nuevas matrices utilizando las funciones de MATLAB diag(A), triu(A), tril(A) y
combinaciones de ellas.
Otra manera de cargar matrices es mediante el operador dos puntos (:). Este operador es
muy importante en MATLAB y puede usarse de varias formas. Se sugiere al lector que
19
practique mucho sobre los ejercicios del prctico 1 en este apartado, introduciendo todas
las modificaciones que se le ocurran y haciendo pruebas abundantes.
Para empezar, defnase un vector x con el siguiente comando:
>> x=1:10
x=
1 2 3 4 5 6 7 8 9 10
En cierta forma se podra decir que el operador (:) representa un rango: en este caso, los
nmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador
puede tambin utilizarse con otros valores enteros y reales, positivos o negativos. En este
caso el incremento va entre el valor inferior y el superior, en las formas que se muestran a
continuacin:
>> x=1:2:10
x=
13579
>> x=1:1.5:10
x=
1.0 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
>> x=10:-1:1
x=
10 8 7 6 5 4 3 2 1
Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener un
vector columna basta trasponer el resultado.
El operador dos puntos (:) es an ms til y potente y tambin ms complicado con
matrices. Se usar para extraer filas y columnas de matrices. En la prctica 1 encontrars
ejemplos.
El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Por ejemplo, a
continuacin se va a definir una matriz identidad B de tamao 66 y se van a reemplazar
filas de B por filas de A. Obsrvese que la siguiente secuencia de comandos sustituye las
filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A,
>> A=magic(6);
>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)
B=
100000
35 1 6 26 19 24
001000
3 32 7 21 23 25
31 9 2 22 27 20
000001
20
21
caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas filas son
cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener el mismo
nmero de elementos. Si es preciso, las cadenas (filas) ms cortas se completan con
blancos. A continuacin se pueden ver algunos ejemplos y practicar con ellos:>> c='cadena'
c=
cadena
>> size(c) % dimensiones del array
ans =
16
>> double(c) % convierte en nmeros ASCII cada carcter
ans =
99 97 100 101 110 97
>> char(abs(c)) % convierte nmeros ASCII en caracteres
ans =
cadena
>> cc=char('ms','madera') % convierte dos cadenas en una matriz
cc =
ms
madera
>> size(cc) % se han aadido tres espacios a 'ms'
ans =
26
Las funciones ms importantes para manejo de cadenas de caracteres son las siguientes:
double(c)
convierte en nmeros ASCII cada carcter.
char(v)
convierte un vector de nmeros v en una cadena de caracteres.
char(c1,c2)
crea una matriz de caracteres, completando con blancos las
cadenas ms cortas.
deblank(c)
elimina los blancos al final de una cadena de caracteres.
disp(c)
imprime el texto contenido en la variable c.
ischar(c)
detecta si una variable es una cadena de caracteres.
isletter()
detecta si un carcter es una letra del alfabeto. Si se le pasa un
vector o matriz de caracteres devuelve un vector o matriz de
unos y ceros.
isspace()
detecta si un carcter es un espacio en blanco. Si se le pasa un
vector o matriz de caracteres devuelve un vector o matriz de
unos y ceros.
strcmp(c1,c2)
comparacin de cadenas. Si las cadenas son iguales devuelve un
uno, y si no lo son, devuelve un cero (funciona de modo
diferente que la correspondiente funcin de C).
strcmpi(c1,c2)
igual que strcmp(c1,c2), pero ignorando la diferencia entre
maysculas y minsculas.
22
strncmp(c1,c2,n)
c1==c2
s=[s,' y ms']
findstr(c1,c2)
strmatch(cc,c)
strrep(c1,c2,c3)
[p,r]=strtok(t)
int2str(v)
num2str(x,n)
str2double(str)
vc=cellstr(cc)
sprintf
Con las funciones anteriores se dispone en MATLAB de una amplia gama de posibilidades
para trabajar con cadenas de caracteres. A continuacin se pueden ver algunos ejemplos:
>> num2str(pi) % el resultado es una cadena de caracteres, no un nmero
ans =
3.142
>> num2str(pi,8)
ans =
3.1415927
Es habitual convertir los valores numricos en cadenas de caracteres para poder
imprimirlos como ttulos en los dibujos o grficos.
23
potenciacin
\
divisin-izquierda
/
divisin-derecha
Para utilizar estos operadores se deben tener en cuenta que las dimensiones de las
variables sean coherentes con las correspondientes operaciones matriciales. Si los
operadores no se usan de modo correcto se obtiene un mensaje de error.
Por ejemplo, sean
>> x=[10 20 30] % vector fila
>> y=[11; 12; 13] % vector columna.
si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de error:
>> x+y
??? Error using ==> +
Matrix dimensions must agree.
Para calcular traspuesta de x basta teclear:
>> x'
Como el resultado de la operacin no ha sido asignado a ninguna variable, MATLAB utiliza
un nombre de variable por defecto (ans, de answer), que contiene el resultado de la ltima
operacin. La variable ans puede ser utilizada como operando en la siguiente expresin que
se introduzca. La dificultad al sumar x e y desaparece
si se suma x con el vector transpuesto de y:
>> x+y'
Los operadores listados antes se pueden aplicar tambin de modo mixto.
Dada la matriz
>> A=[1 2 3; 4 5 6; 7 8 9]
para calcular la traspuesta de A basta con hacer
>> A'
24
25
26
27
resultado de MATLAB es el punto ms cercano -en el sentido de mnima norma del errora las ecuaciones dadas (aunque no cumpla exactamente ninguna de ellas). Vase el
siguiente ejemplo de tres ecuaciones formadas por una recta que no pasa por el origen y
los dos ejes de coordenadas:
>> A=[1 2; 1 0; 0 1], b=[2 0 0]'
>> x=A\b, resto=A*x-b
x=
0.3333
0.6667
resto =
-0.3333
0.3333
0.6667
Si la matriz es singular o est muy mal escalada, el operador \ da un aviso (warning), pero
proporciona una solucin. La inteligencia del operador barra invertida \ tiene un costo,
MATLAB debe de emplear cierto tiempo en determinar las caractersticas de la matriz,
triangular, simtrica, etc. Si el usuario conoce perfectamente y con seguridad las
caractersticas de la matriz del sistema, lo mejor es utilizar la funcin linsolve, que se ver
ms adelante, que no realiza ninguna comprobacin y puede obtener la mxima eficiencia.
3.5 Operadores relacionales
El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales:
<
menor que
>
mayor que
<=
>=
==
igual que
~=
distinto que
El carcter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo
Alt pulsada. En MATLAB los operadores relacionales pueden aplicarse a vectores y
matrices, y eso hace que tengan un significado especial. En general, si una comparacin se
cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recprocamente,
cualquier valor distinto de cero es considerado como true y el cero equivale a false. Los
operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo
tamao, la comparacin se realiza elemento a elemento, y el resultado es otra matriz de
28
unos y ceros del mismo tamao, que recoge el resultado de cada comparacin entre
elementos. Considrese el siguiente ejemplo como ilustracin de lo que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
01
00
>> A~=B
ans =
10
11
3.6 Operadores lgicos
Los operadores lgicos de MATLAB son los siguientes:
&
Y lgico
O lgico
Negacin lgica
Los operadores lgicos se combinan con los relacionales para poder comprobar el
cumplimiento de condiciones mltiples. Ms adelante se vern ejemplos y ciertas
funciones de las que dispone MATLAB para facilitar la aplicacin de estos operadores a
vectores y matrices.
3.7 Funciones que actan sobre vectores
max(x)
29
prod(x)
producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos de
un vector.
sort(x)
devuelve un vector con la ordenacin de menor a mayor de los
elementos del vector x y un vector con las posiciones iniciales
en x de los elementos en el vector ordenado.
norm(x)
Norma 2 del vector x.
norm(x,p) Norma p del vector x.
norm(x,inf) Norma del vector x.
3.8 Funciones que actan sobre matrices
Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo
aparecen algunas de las funciones ms tiles y potentes de MATLAB.
A'
A.'
[L,U,P] = lu(A)
B = inv(A)
det(A)
chol(A)
30
rcond(A)
[X,D] = eig(A)
[Q,R] = qr(A)
[Q,R] = qr(A,0)
null(A)
31
4. PROGRAMACIN DE MATLAB
MATLAB es una aplicacin en la que se puede programar muy fcilmente. Se comenzar
viendo las bifurcaciones y bucles, y la lectura y escritura interactiva de variables, que son los
elementos bsicos de cualquier programa de una cierta complejidad.
4.1 Bucles y Bifurcaciones
MATLAB posee un lenguaje de programacin que como cualquier otro lenguaje dispone
de sentencias para realizar bucles y bifurcaciones.
Los bucles permiten repetir las mismas operaciones o operaciones anlogas sobre datos
distintos. En la figura se muestra la forma de un bucle, con el control situado al principio
o al final del mismo.
Si el control est situado al comienzo del bucle es posible que las sentencias no se ejecuten
ninguna vez, por no haberse cumplido la condicin cuando se llega al bucle por primera vez.
Sin embargo, si la condicin est al final del bucle las sentencias se ejecutarn por lo menos
una vez, aunque la condicin no se cumpla.
La sentencia for repite un conjunto de sentencias un nmero predeterminado de veces. La
siguiente construccin ejecuta sentencias con valores de i de 1 a n, variando de uno en uno.
for i=1:n
sentencias
end
o bien,
for i=vectorValores
sentencias
end
donde vectorValores es un vector con los distintos valores que tomar la variable i. El caso
ms general para la variable del bucle es
32
i= (valor_inicial:incremento: valor_final)
En el ejemplo siguiente el bucle se ejecuta por primera vez con i=n, y luego i se va
reduciendo de 1 en 1 hasta que llega a ser menor que 1, en cuyo caso el bucle se termina:
for i=n:-1:1
sentencias
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados.
La variable j es la que vara ms rpidamente (por cada valor de i, j toma todos sus posibles
valores):
for i=1:m
for j=1:n
sentencias
end
end
Una ltima forma de inters del bucle for es la siguiente (A es una matriz):
for i=A
sentencias
end
en la que la variable i es un vector que va tomando en cada iteracin el valor de una de las
columnas de A.
Cuando se introducen interactivamente en la lnea de comandos, los bucles for se ejecutan
slo despus de introducir la sentencia end que los completa. Lo mismo sucede con otras
sentencias que se dan a continuacin.
La estructura del bucle while tiene la siguiente sintaxis:
while condicion
sentencias
end
Donde condicion puede ser una expresin vectorial o matricial. Las sentencias se siguen
ejecutando mientras haya elementos distintos de cero en condicion, es decir, mientras haya
algn o algunos elementos true. El bucle se termina cuando todos los elementos de
condicion son false (es decir, cero).
33
La sentencia break hace que se termine inmediatamente la ejecucin del bucle for y/o
while ms interno de los que comprenden a dicha sentencia. La sentencia continue hace
que se pase inmediatamente a la siguiente iteracin del bucle for o while, saltando todas
las sentencias que hay entre el continue y el fin del bucle en la iteracin actual.
Las bifurcaciones permiten realizar una u otra operacin segn se cumpla o no una
determinada condicin. A continuacin se muestran tres posibles formas de bifurcacin.
34
if condicin 1
bloque 1
elseif condicin 2
bloque 2
elseif condicin 3
bloque 3
else % opcin por defecto para cuando no se cumplan las
condiciones 1, 2, 3
bloque 4
end
donde la opcin por defecto else puede ser omitida, si no est presente no se hace nada
en caso de que no se cumpla ninguna de las condiciones que se han chequeado. Obsrvese
que las sentencias aparecen desplazadas hacia la derecha respecto al if, else o end. Esto se
hace para que el programa resulte ms legible, resultando ms fcil ver dnde empieza y
termina la bifurcacin o el bucle. Es muy recomendable seguir esta prctica de
programacin.
La sentencia switch realiza una funcin anloga a un conjunto de if...elseif concatenados.
Su forma general es la siguiente:
switch switch_expresion
case case_expr1,
bloque 1
case {case_expr 2, case_expr 3, case_expr 4,...}
bloque 2
...
otherwise, % opcin por defecto
bloque 3
end
Al principio se evala la switch_expresion, cuyo resultado debe ser un nmero escalar o
una cadena de caracteres. Este resultado se compara con las case_expr, y se ejecuta el
bloque de sentencias que corresponda con ese resultado. Si ninguno es igual a
switch_expresion se ejecutan las sentencias correspondientes a otherwise.
Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de archivos
*.m. Tambin se aplican con frecuencia en el uso interactivo de MATLAB.
4.2 Lectura y escritura interactiva de variables
Se ver a continuacin una forma sencilla de leer variables desde teclado y escribir
mensajes en la pantalla del PC. La funcin input permite imprimir un mensaje en la lnea de
35
36
echo hace que se impriman los comandos que estn en un script a medida que van siendo
ejecutados. Este comando tiene varias formas:
echo on
echo off
echo file on
echo file off
echo file
echo on all
echo off all
Una mencin especial merece el archivo de comandos startup.m . Este archivo se ejecuta
cada vez que se entra en MATLAB. En l puede introducir todos aquellos comandos que le
interesa se ejecuten siempre al iniciar la sesin, por ejemplo format compact y los
comandos necesarios para modificar el path.
Las funciones permiten definir funciones enteramente anlogas a las de MATLAB, con su
nombre, sus argumentos y sus valores de retorno. Los archivos *.m que definen funciones
permiten extender las posibilidades de MATLAB; de hecho existen bibliotecas de archivos
*.m que se venden (toolkits) o se distribuyen gratuitamente (a travs de Internet). La
primera lnea, que no sea un comentario, de un archivo llamado name.m que define una
funcin tiene la forma:
function [lista de valores de retorno] = name(lista de argumentos)
donde name es el nombre de la funcin. Entre corchetes y separados por comas van los
valores de retorno (siempre que haya ms de uno), y entre parntesis tambin separados
por comas los argumentos. Puede haber funciones sin valor de retorno y tambin sin
argumentos. Recurdese que los argumentos son los datos de la funcin y los valores de
retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y el signo igual
(=); si slo hay un valor de retorno no hace falta poner corchetes. Tampoco hace falta poner
parntesis si no hay argumentos.
Los valores de retorno pueden ser mltiples y matriciales. Tanto el nmero de argumentos
como el de valores de retorno no tienen que ser fijos, dependiendo de cmo el usuario
llama a la funcin al ejecutarla. Recurdese que un archivo *.m puede llamar a otros
archivos *.m, e incluso puede llamarse a s mismo de forma recursiva. Los archivos de
comandos se pueden llamar tambin desde funciones, en cuyo caso las variables que se
crean pertenecen al espacio de trabajo de la funcin. Las variables definidas dentro de una
funcin son variables locales, en el sentido que son inaccesibles desde otras partes del
37
programa y en el que no interfieren con variables del mismo nombre definidas en otras
funciones o partes del programa. Se puede decir que pertenecen al propio espacio de
trabajo de la funcin y no son vistas desde otros espacios de trabajo. Para que la funcin
tenga acceso a variables que no han sido pasadas como argumentos es necesario declarar
dichas variables como variables globales, tanto en el programa principal como en las
distintas funciones que deben acceder a su valor. Es frecuente utilizar el convenio de usar
nombres largos (ms de 5 letras) para las variables globales y con maysculas. La ejecucin
de una funcin termina cuando se llega a su ltima sentencia ejecutable. Si se quiere forzar
a que una funcin termine de ejecutarse se puede utilizar la sentencia return, que devuelve
inmediatamente el control al entorno de llamada.
Tradicionalmente MATLAB obligaba a crear un archivo *.m diferente por cada funcin. El
nombre de la funcin deba coincidir con el nombre del archivo. A partir de la versin 5.0 se
introdujeron las sub-funciones, que son funciones adicionales definidas en un mismo
archivo *.m, con nombres diferentes del nombre del archivo (y del nombre de la funcin
principal) y que las sub-funciones slo pueden ser llamadas por las funciones contenidas
en ese archivo, resultando invisibles para otras funciones externas. A continuacin se
muestra un ejemplo contenido en un archivo llamado mi_fun.m:
function y=mi_fun(a,b)
y=subfun1(a,b);
function x=subfun1(y,z)
x=subfun2(y,z);
function x=subfun2(y,z)
x=y+z+2;
38
ella hay que intentar poner la informacin ms relevante sobre esa funcin. La razn es que
existe una funcin, llamada lookfor que busca una determinada palabra en cada primera
lnea de comentario de todas las funciones *.m.
4.5 Referencias de funcin (function handles)
Las referencias de funcin (function handles) constituyen un nuevo mecanismo para
referirse a un nombre de funcin, introducido en MATLAB 6.0. En versiones anteriores la
nica forma de referirse a una funcin era por medio del nombre. Las referencias de
funcin permiten al programador un mayor control sobre la funcin que es efectivamente
llamada. El principal uso de las referencias de funcin (como de los nombres de funcin en
versiones anteriores) es pasar a una funcin el nombre de otra funcin, junto con sus
argumentos, para que la pueda ejecutar. A estas funciones que ejecutan otras funciones
que se les pasan como argumentos se les llama funciones de funcin.
Por ejemplo, MATLAB dispone de una funcin llamada quad que calcula la integral definida
de una funcin entre unos lmites dados. La funcin quad es genrica, esto es calcula,
mediante mtodos numricos, integrales definidas de una amplia variedad de funciones,
pero para que pueda calcular dicha integral hay que proporcionarle la funcin a integrar.
Por ejemplo, para calcular, en forma aproximada,
b
sen x dx
a
39
>>fh=@sin;
>>area=quad(fh,0,pi);
donde la variable fh es una referencia de funcin, que es un nuevo tipo de dato de
MATLAB.
Una referencia de funcin se puede crear de dos formas diferentes:
Mediante el operador @ ("at" o "arroba"). La referencia a la funcin se crea
precediendo el nombre de la funcin por el operador @. El resultado puede
asignarse a una variable o pasarse como argumento a una funcin. Ejemplos:
>>fh = @sin;
>>area = quad(@sin, 0, pi);
Mediante la funcin str2func que recibe como argumento una cadena de caracteres
conteniendo el nombre de una funcin y devuelve como valor de retorno la
referencia de funcin. Una de las ventajas de esta funcin es que puede realizar la
conversin de un vector de celdas con los nombres en un vector de referencias de
funcin. Ejemplos:
>> fh = str2func('sin');
>> str2func({'sin','cos','tan'})
ans =
@sin @cos @tan
Una caracterstica comn e importante de ambos mtodos es que se aplican solamente al
nombre de la funcin, y no al nombre de la funcin precedido o cualificado por su path.
Adems los nombres de funcin deben tener menos de 31 caracteres.
4.6 Funciones inline
MATLAB permite definir funciones a partir de expresiones matemticas por medio de la
funcin inline. Esta funcin trata de averiguar inteligentemente cules son los argumentos
de la funcin inline, a partir del contenido de la expresin matemtica. Por defecto se
supone que 'x' es el argumento, aunque es tambin posible determinarlos explcitamente al
llamar a inline. Considrense los siguientes ejemplos:
>> f=inline('expresin entre apstrofos');
>> f=inline('expresin', a1, a2, a3); % los argumentos son 'a1', 'a2', 'a3'
>> f=inline('expresin', N); % los argumentos son 'x', 'P1', ..., 'PN'
Las funciones inline se llaman con el handle (f en las sentencias anteriores) seguido de los
argumentos entre parntesis. Por ejemplo
>>f=inline(x 2-2*x+1)
40
>>f(2)
4.7 Funciones annimas
Las funciones annimas constituyen una forma muy flexible de crear funciones sobre la
marcha, tanto en la lnea de comandos como en una lnea cualquiera de una funcin o de
un archivo *.m. La forma general de las funciones annimas es la siguiente:
>>fhandle = @(argumentos) expresin;
Despus de ser creada, la funcin annima puede ser llamada a travs del fhandle seguido
de la lista de argumentos actuales entre parntesis, o tambin puede ser pasada a otra
funcin como argumento, tambin por medio del fhandle. Por ejemplo, la siguiente funcin
annima calcula el valor del seno del ngulo doble:
>>senoAngDoble = @(ang) 2*sin(ang).*cos(ang);
Las funciones annimas acceden a las variables del espacio de trabajo en el que son
definidas y crean en ese momento una copia de las variables que utilizan. El valor de dichas
variables ya no se actualiza; slo los argumentos pueden cambiar de valor. De esta forma,
las funciones annimas pueden ejecutarse a travs del handle en otros espacios de trabajo.
Si las funciones annimas no tienen argumentos hay que poner los parntesis vacos, tanto
al definirlas como al llamarlas. Por otra parte, pueden tener varios valores de retorno
cuando la expresin que contienen devuelve varios valores. Se pueden recoger todos o slo
algunos de estos valores.
La nica limitacin importante de las funciones annimas es que estn limitadas a una
nica expresin ejecutable de MATLAB. Por otra parte, su uso no tiene ms limitaciones
que las del uso del handle de una funcin cualquiera.
4.8 Recomendaciones generales de programacin
Las funciones vectoriales de MATLAB son mucho ms rpidas que sus contrapartidas
escalares. En la medida de lo posible es muy interesante vectorizar los algoritmos de
clculo, es decir, realizarlos con vectores y matrices, y no con variables escalares
dentro de bucles.
Aunque los vectores y matrices pueden ir creciendo a medida que se necesita, es
mucho ms rpido reservarles toda la memoria necesaria al comienzo del programa.
Se puede utilizar para ello la funcin zeros. Adems de este modo la memoria
reservada es contigua.
Conviene desarrollar los programas incrementalmente, comprobando cada funcin o
componente que se aade. De esta forma siempre se construye sobre algo que ya ha
sido comprobado y que funciona, si aparece algn error, lo ms probable es que se
deba a lo ltimo que se ha aadido, y de esta manera la bsqueda de errores est
acotada y es mucho ms sencilla.
41
El debugger es una herramienta muy til a la hora de acortar ese tiempo de puesta a
punto.
Pensar bien las cosas al programar sobre una hoja de papel en blanco es mejor que
sobre la pantalla del PC.
Otro objetivo de la programacin debe ser mantener el cdigo lo ms sencillo y
ordenado posible.
Al pensar en cmo hacer un programa o en cmo realizar determinada tarea es
conveniente pensar siempre primero en la solucin ms sencilla, y luego plantearse
otras cuestiones como la eficiencia.
Finalmente, el cdigo debe ser escrito de una manera clara y ordenada,
introduciendo comentarios, utilizando lneas en blanco para separar las distintas
partes del programa, introduciendo sangra en las lneas para ver claramente el
rango de las bifurcaciones y bucles.
Utilizando nombres de variables que recuerden al significado de la magnitud fsica
correspondientes.
En cualquier caso, la mejor forma (y la nica) de aprender a programar es
programando.
42
5. GRFICOS BIDIMENSIONALES
Los grficos 2-D de MATLAB estn fundamentalmente orientados a la representacin
grfica de vectores y matrices. Cuando una matriz aparezca como argumento, se
considerar como un conjunto de vectores columna (en algunos casos tambin de vectores
fila). MATLAB utiliza un tipo especial de ventanas para realizar las operaciones grficas.
Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien
sustituyendo lo que hubiera en ella, bien aadiendo nuevos elementos grficos a un dibujo
anterior.
5.1 Representacin grfica de funciones definidas por una frmula
Los comandos que se presentan en este apartado son funciones MATLAB fciles de usar
(easy-touse) para representar grficamente, de forma rpida, funciones definidas por una
expresin matemtica. Tienen slo un pequeo nmero de parmetros que se pueden
especificar. Todas ellas hacen uso de otras funciones MATLAB que disponen de un nmero
superior de opciones y parmetros que podemos modificar. Cuando se necesite hacer
grficas de funciones que no vienen definidas por una frmula, tales como las funciones
definidas a trozos, definidas a travs de programas o por sus valores en un nmero finito de
puntos, etc., habr que recurrir a funciones ms generales que se vern en la siguiente
seccin.
El comando ms fcil de usar que dispone MATLAB para dibujar curvas planas definidas por
una frmula matemtica es el comando ezplot, que puede ser usado de varias formas.
ezplot(f)
ezplot(f,[a,b])
ezplot(x,y)
ezplot(x,y,[a,b])
ezpolar(f)
ezpolar(f,[a,b])
43
En lo sucesivo se har referencia casi exclusiva a la primera de estas funciones (plot). Las
dems se pueden utilizar de un modo similar.
Existen otras funciones orientadas a aadir ttulos al grfico, a cada uno de los ejes, a
dibujar una cuadrcula auxiliar, a introducir texto, etc. Estas funciones son:
title('ttulo')
xlabel('tal')
44
retorno del comando con el cual se ha creado. Despus hay que llamar a la funcin delete
con ese valor como argumento. Considrese el siguiente ejemplo:
>> v = text(1,.0,'seno')
v=
76.0001
>> delete(v)
La funcin plot dibuja una nueva figura en la ventana activa (en todo momento MATLAB
tiene una ventana activa de entre todos las ventanas grficas abiertas), o abre una nueva
figura si no hay ninguna abierta, sustituyendo cualquier cosa que hubiera dibujada
anteriormente en esa ventana. Para verlo, se comenzar creando un par de vectores x e y
con los que trabajar:
>> x=[-10:0.2:10]; y=sin(x);
A continuacin se consideran dos esquemas diferentes, que es interesante analizar.
>> close % se cierra la ventana grfica activa anterior
>> grid % se crea una ventana con una cuadrcula
>> plot(x,y) % se dibuja la funcin seno borrando la cuadrcula
Se puede observar la diferencia con la secuencia que sigue:
>> close
>> plot(x,y) % se crea una ventana y se dibuja la funcin seno
>> grid % se aade la cuadrcula sin borrar la funcin seno
En el primer caso MATLAB ha creado la cuadrcula en una ventana nueva y luego la ha
borrado al ejecutar la funcin plot. En el segundo caso, primero ha dibujado la funcin y
luego ha aadido la cuadrcula. Esto es as porque hay funciones como plot que por defecto
crean una nueva figura, y otras funciones como grid que se aplican a la ventana activa
modificndola, y slo crean una ventana nueva cuando no existe ninguna ya creada.
En la funcin plot se utilizan tambin cadenas de 1, 2 3 caracteres para indicar colores y
tipos de lnea. La funcin plot(), en sus diversas variantes, no hace otra cosa que dibujar
vectores. Cuando a la funcin plot() se le pasa un nico vector real como argumento, dicha
funcin dibuja en ordenadas el valor de los n elementos del vector frente a los ndices 1, 2,
... n del mismo en abscisas, por defecto, los distintos puntos del grfico se unen con una
lnea continua. Una segunda forma de utilizar la funcin plot() es con dos vectores como
argumentos. En este caso los elementos del primer vector se representan en las abscisas y
los del segundo vector se representan en ordenadas. La funcin plot() permite tambin
dibujar mltiples curvas introduciendo varias parejas de vectores como argumentos, el
primer vector de la pareja contiene las abscisas y el segundo vector las ordenadas . Para
las sucesivas lneas se utilizan colores que son permutaciones cclicas del azul, verde, rojo,
cyan, magenta, amarillo y negro.
45
Color
y
M
C
R
G
B
W
K
yellow
magenta
cyan
red
green
blue
white
black
Smbolo para
marcador
.
o
x
+
*
s
d
v
>
<
p
Marcador
puntos
crculos
letra x
Signo +
asteriscos
cuadrados
diamantes
tringulo
tringulo invertido
tringulo apuntado a
derecha
tringulo apuntando a
izquierda
estrella de 5 puntas
estrella de 6 puntas
Estilo
lneas continuas
lnea de puntos
lneas a barra- punto
lneas de trazos
Cuando hay que dibujar varias lneas, por defecto se van seleccionando sucesivamente los
colores de la tabla comenzando por el azul, hacia arriba, y cuando se terminan se vuelve a
empezar otra vez por el azul. Si el fondo es blanco, este color no se utiliza para las lneas.
Tambin es posible aadir en la funcin plot algunos especificadores de lnea que controlan
el espesor de la lnea, el tamao de los marcadores, etc. Por ejemplo:
>>plot(x,y,'-.rs', 'LineWidth',4, 'MarkerEdgeColor','k', 'MarkerFaceColor', 'g',...
46
'MarkerSize',10)
Existe la posibilidad de aadir lneas a un grfico ya existente, sin destruirlo o sin abrir una
nueva ventana. Se utilizan para ello los comandos hold on y hold off. El primero de ellos
hace que los grficos sucesivos respeten los que ya se han dibujado en la figura (es posible
que haya que modificar la escala de los ejes); el comando hold off deshace el efecto de hold
on.
Una ventana grfica se puede dividir en m particiones horizontales y n verticales, con
objeto de representar mltiples grficos en ella. Cada una de estas subventanas tiene sus
propios ejes, aunque otras propiedades son comunes a toda la figura. La forma general de
este comando es:
>> subplot(m,n,i)
donde m y n son el nmero de subdivisiones en filas y columnas, e i es la subdivisin que se
convierte en activa. Las subdivisiones se numeran consecutivamente empezando por las de
la primera fila, siguiendo por las de la segunda, etc. Por ejemplo, la siguiente secuencia de
comandos genera cuatro grficos en la misma ventana:
>> y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;
>> subplot(2,2,1), plot(x,y)
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3), plot(x,w)
>> subplot(2,2,4), plot(x,v)
Se puede practicar con este ejemplo aadiendo ttulos a cada subplot, as como rtulos
para los ejes. Se puede intentar tambin cambiar los tipos de lnea. Para volver a la opcin
por defecto basta teclear el comando:
>> subplot(1,1,1)
MATLAB tiene la opcin de modificar los ejes. El comando bsico es el comando axis. Por
defecto, MATLAB ajusta la escala de cada uno de los ejes de modo que vare entre el
mnimo y el mximo valor de los vectores a representar. Este es el llamado modo "auto", o
modo automtico.
axis([xmin, xmax, ymin,
ymax])
axis('auto')
47
v=axis
axis('ij')
axis('xy')
axis('auto x')
axis('auto xz')
axis(axis)
axis('tight')
axis('equal')
axis('square')
axis('image')
axis('normal')
axis('on')
axis('off')
Es posible tambin tener un control preciso sobre las marcas y los rtulos que aparecen en
los ejes, como por ejemplo en la forma siguiente:
>>x = -pi:.1:pi; y = sin(x);
>>plot(x,y)
>>set(gca,'XTick',-pi:pi/2:pi)
>>set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
Obsrvese cmo las propiedades se establecen sobre los ejes actuales, a los que se accede
con la funcin gca (get current axis).
La funcin line() permite dibujar una o ms lneas que unen los puntos cuyas coordenadas
se pasan como argumentos. Permite adems especificar el color, grosor, tipo de trazo,
marcador, etc. Es una funcin de ms bajo nivel que la funcin plot(), pero ofrece una
mayor flexibilidad. En su versin ms bsica, para dibujar un segmento de color verde entre
dos puntos, esta funcin se llamara de la siguiente manera:
>> line([xini, xend]', [yini, yend]', 'color', 'g')
48
49
bar()
barh()
bar3()
bar3h()
pie()
pie3()
area()
stairs()
errorbar()
compass()
feather()
hist()
rose()
quiver()
Por ejemplo, genrese un vector de valores aleatorios entre 0 y 10, y ejectense los
comandos:
>> x=[rand(1,100)*10];
>> plot(x)
>> bar(x)
>> stairs(x)
>> hist(x)
>> hist(x,20)
>> alfa=(rand(1,20)-0.5)*2*pi;
>> rose(alfa)
La funcin fplot admite como argumento un nombre de funcin o un nombre de archivo
*.m en el cual est definida una funcin de usuario. La funcin puede ser escalar o
vectorial. La forma general de esta funcin es la siguiente:
50
51
supone que ese vector se repite tantas veces como sea necesario para dibujar tantos
polgonos como columnas tiene la matriz. Considrese un ejemplo sencillo de esta funcin:
>> x=[1 5 4 2]; y=[1 0 4 3];
>> fill(x,y,'r')
>> colormap(gray), fill(x,y,[1 0.5 0.8 0.7])
5.4 Entrada de puntos con el ratn
Se realiza mediante la funcin ginput, que permite introducir las coordenadas del punto
sobre el que est el cursor, al clicar (o al pulsar una tecla). Algunas formas de utilizar esta
funcin son las siguientes:
[x,y] = ginput
lee un nmero indefinido de puntos cada
vez que se clica o se pulsa una
tecla cualquiera hasta que se termina
pulsando la tecla intro.
[x,y] = ginput(n)
lee las coordenadas de n puntos.
[x,y,bot] = ginput
igual que el anterior, pero devuelve tambin
un vector de enteros bot con
el cdigo ASCII de la tecla pulsada o el
nmero del botn del ratn (1, 2,
...) con el que se ha clicado
Como ejemplo de utilizacin de este comando, ejectense las instrucciones siguientes en la
ventana de comandos de MATLAB para introducir un cuadriltero arbitrario y dibujarlo de
dos formas:
>> clf, [x,y]=ginput(4);
>> figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r')
donde se ha introducido el comando pause(5) que espera 5 segundos antes de continuar la
ejecucin. Este comando admite como argumento un tiempo con precisin de centsimas
de segundo.
5.5 Preparacin de pelculas o "movies"
Para preparar pequeas pelculas o movies se pueden utilizar las funciones movie, moviein
y getframe. Una pelcula se compone de varias imgenes, denominadas frames. La funcin
getframe devuelve un vector columna con la informacin necesaria para reproducir la
imagen que se acaba de representar en la figura o ventana grfica activa, por ejemplo con
la funcin plot. El tamao de este vector columna depende del tamao de la ventana, pero
no de la complejidad del dibujo. La funcin moviein(n) reserva memoria para almacenar n
frames. La siguiente lista de comandos creara una pelcula de 17 imgenes o frames, que
se almacenarn como las columnas de la matriz M:
52
M = moviein(17);
x=[-2*pi:0.1:2*pi]';
for j=1:17
y=sin(x+j*pi/8);
plot(x,y);
M(:,j) = getframe;
end
Una vez creada la pelcula se puede representar el nmero de veces que se desee con el
comando movie. Por ejemplo, para representar 10 veces la pelcula anterior, a 15 imgenes
por segundo, habra que ejecutar el comando siguiente (los dos ltimos parmetros son
opcionales):
movie(M,10,15)
Los comandos moviein, getframe y movie tienen posibilidades adicionales para las que
puede consultarse el Help correspondiente. Hay que sealar que en MATLAB no es lo
mismo un movie que una animacin. Una animacin es simplemente una ventana grfica
que va cambiando como consecuencia de los comandos que se van ejecutando. Un movie
es una animacin grabada o almacenada en memoria previamente.
5.6 Las ventanas grficas de MATLAB
Las ventanas grficas de MATLAB tienen muchas posibilidades, de mejorar el grfico
obtenido que a travs de sus mens y barras de herramientas. Por defecto slo aparece la
barra de herramientas de la lnea superior. Para hacer aparecer tambin la segunda barra
se ejecuta Camera Toolbar, en el men View.
En el men Edit, adems de los comandos referidos a la copia de figuras, aparecen los
comandos Figure Properties, Axes Properties, Current Object Properties y Colormap, que
abren paso a los correspondientes editores de propiedades. Tambin es posible cambiar
interactivamente el mapa de colores utilizado en una figura con el comando Edit/Colormap
se abre el cuadro de dilogo. El men Edit de las ventanas grficas ofrece tambin las
opciones estndar de Windows, permitiendo copiar, cortar y pegar los elementos
seleccionados de la figura si est activada. El men View permite hacer visibles u ocultar las
barras de herramientas Window Toolbar y Camera Toolbar. Estas barras de herramientas
disponen de numerosas opciones para trabajar con ventanas que contengan grficos 2-D y
3-D. La mejor forma de aprender es probar y acudir al Help cuando hay algo que no se
entiende. En men Insert permite aadir elementos a la figura activa, por ejemplo rtulos,
etiquetas, lneas, texto, etc. Por su parte, el men Tools permite realizar desde men
algunas de las operaciones tambin disponibles en las barras de herramientas. Finalmente,
el men Help permite acceder a la ayuda concreta que hace referencia a las ventanas
grficas.
53
6 GRFICOS TRIDIMENSIONALES
6.1. Dibujo simplificado de funciones 3-D
Existen algunas funciones simplificadas para el dibujo 3-D similares a la funcin ezplot en
2D. La funcin ezplot3 dibuja lneas paramtricas tridimensionales dadas por las
expresiones x(t), y(t) y z(t). Por defecto se utiliza el intervalo 0 < t < 2. Considrense las
siguientes posibilidades:
>> ezplot3(x,y,z);
>> ezplot3(x,y,z,[t1,t2]);
>> ezplot3(x,y,z,[t1,t2],'animate'); % dibuja la curva progresivamente
En las sentencias anteriores x, y, z pueden ser funciones annimas, handles funciones,
funciones inline o expresiones definidas como cadena de caracteres. Los archivos *.m y las
funciones inline deben escribirse de tal forma que admitan vectores de valores como
argumentos (vectorizados).
Otra funcin de dibujo 3-D rpido es ezsurf. Esta funcin utiliza la funcin surf para realizar
un dibujo 3-D de una funcin f(x,y). Por defecto se utilizan los intervalos 2*pi < x, y < 2*pi.
La funcin f se puede definir por medio de una expresin en la que aparezcan x e y definida
por medio de una cadena de caracteres, con una funcin convencional, o con funciones
annimas u online. A continuacin se dan algunas posibles formas de esta funcin:
>> ezsurf(f);
>> ezsurf(f, [a,b]);
>> ezsurf(f, [xmin,xmax,ymin,ymax]);
La funcin ezsurf permite tambin dibujar superficies paramtricas 3-D, por ejemplo en las
formas siguientes, con parmetros s y t:
>> ezsurf(x,y,z); % por defecto -2*pi < s,t < 2*pi
>> ezsurf(x,y,z, [a,b]);
>> ezsurf(x,y,z, [smin,smax,tmin,tmax]);
Con un parmetro ms, que es un nmero entero N se puede controlar la densidad del
mallado con el que se dibuja. Por defecto N=60. Con el argumento 'circ' se dibuja en un
dominio circular. A continuacin se incluyen algunos ejemplos tomados de la ayuda de
MATLAB:
>> ezsurf('s*cos(t)','s*sin(t)','t')
>> ezsurf('s*cos(t)','s*sin(t)','s')
>> ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,4*pi])
54
Otras funciones simplificadas para dibujo 3-D son ezcontour, ezcontourf, ezmesh, ezsurfc y
ezmeshc.
6.2 Otras forma de construir grficas tridimensionales
MATLAB tiene posibilidades de realizar varios tipos de grficos 3D.
anloga a su homloga bidimensional plot. Su forma ms sencilla es:
La funcin plot3 es
>> plot3(x,y,z)
dibuja una lnea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. Al igual que en el
caso plano, se puede incluir una cadena de 1, 2 3 caracteres para determinar el color, los
markers, y el tipo de lnea:
>> plot3(x,y,z,s)
Tambin se pueden utilizar tres matrices X, Y y Z del mismo tamao:
>> plot3(X,Y,Z)
en cuyo caso se dibujan tantas lneas como columnas tienen estas 3 matrices, cada una de
las cuales est definida por las 3 columnas homlogas de dichas matrices.
Para dibujar una funcin de dos variables (z=f(x,y)) sobre un dominio rectangular se
construir una retcula o malla que se expresar mediante dos matrices. Sean x e y dos
vectores que contienen las coordenadas sobre cada eje a partir de la cual se construir la
retcula donde se va a dibujar la funcin. Despus hay que crear dos matrices X (cuyas filas
son copias de x) e Y (cuyas columnas son copias de y). Estas matrices se crean con la
funcin meshgrid,
>> [X,Y]=meshgrid(x,y);
Estas matrices representan respectivamente las coordenadas x e y de todos los puntos de la
retcula. La matriz de valores Z se calcula a partir de las matrices de coordenadas X e Y, con
la expresin Z=f(X,Y) , esto significa que los elementos de Z son funcin elemento a
elemento de los elementos de X e Y. Finalmente se dibuja con la funcin mesh
>> mesh(Z)
la funcin mesh dibuja en perspectiva una funcin en base a una retcula de lneas de
colores, rodeando cuadrilteros del color de fondo, con eliminacin de lneas ocultas, el
color depende del valor z de la funcin.
Otra opcin para graficar en 3D es usar la funcin
55
>> surf(Z)
En este caso en vez de lneas se obtiene una superficie faceteada, con eliminacin de lneas
ocultas. El color de las facetas depende tambin del valor de la funcin. La funcin surf
tiene tres posibilidades diferentes para la forma en que son representadas las facetas
o polgonos coloreados,
shading flat
shading interp
shading faceted
56
Otras opciones son jet, pink, prism. El colormap por defecto es jet. Para visualizar estos
mapas de colores, cambiando al mismo tiempo su longitud, se pueden utilizar los siguientes
comandos en la Command Window:
>> colormap(hot(128))
>> pcolor([1:129;1:129]')
donde la funcin pcolor permite visualizar por medio de colores la magnitud de los
elementos de una matriz (en realidad representa colores de celdas, para lo que necesita
que la matriz tenga una fila y columna ms de las necesarias; sa es la razn de que en el
ejemplo anterior a la funcin pcolor se le pasen 129 filas y 2 columnas).
El comando colormap acta sobre la figura activa, cambiando sus colores. Si no hay ninguna
figura activa, sustituye al mapa de color anterior para las siguientes figuras que se vayan a
57
dibujar. Cuando se desea dibujar una figura con un determinado mapa de colores se
establece una correspondencia (o un mapping) entre los valores de la funcin y los colores
del mapa de colores. Esto hace que los valores pequeos se dibujen con los colores bajos
del mapa, mientras que los valores grandes se dibujan con los colores altos. La funcin caxis
permite ajustar manualmente la escala de colores. Su forma general es:
caxis([cmin, cmax])
donde cmin y cmax son los valores numricos a los que se desea ajustar el mnimo y el
mximo valor de la escala de colores.
6.4 Otras funciones grficas 3D
Las siguientes funciones se derivan directamente de las anteriores, pero aaden algn
pequeo detalle y/o funcionalidad:
surfc
trisurf
similar a surf, dibuja una superficie 3-D a partir de los valores de una
funcin en una malla de tringulos.
Como mesh con plano de referencia en el valor mnimo y una
especie de cortina en los bordes del dominio de la funcin
meshz
surfl
light
colorbar
sphere
cylinder
58
59
7 FUNCIONES DE FUNCIN
Para realizar clculo tales como obtener las races o los valores mnimos de una funcin,
hay que pasar el nombre de esta funcin como argumento a la funcin de MATLAB que va a
hacer los clculos. En esto consiste el concepto de funcin de funcin.
7.1 Races de ecuaciones escalares no lineales
La bsqueda de soluciones de ecuaciones escalares no lineales f(x)=0 se hace, en MATLAB,
mediante la funcin fzero.
fzero(funcion,x0)
[x,fval]=fzero(funcion,x0)
fzero(funcion,[a,b])
fzero(@fun,x0,options,p1,p2,. . .)
60
>> fminsearch(@fun,x0,options,p1,p2,...)
donde options permite dar valores a una serie de parmetros que intervienen en el
clculo. Ver documentacin de MATLAB para ms detalles. Si no se necesita, poner una
matriz vaca: [] en su lugar, p1,p2,... son parmetros que sern pasados como argumentos a
la funcin fun.m cuando sea llamada.
La bsqueda de mnimos absolutos de funciones escalares en un intervalo acotado se hace
mediante la funcin
>>fminbnd(funcion,x1,x2)
donde funcion es el nombre de una funcin que evala la funcin f(x) y x1, x2 son los
extremos del intervalo.
>> [x,fvalor]=fminbnd(funcion,x1,x2)
devuelve el minimizador x y el valor de la funcin en x. Tambin admite que la funcin
tenga parmetros:
>> fminbnd(@fun,x1,x2,options,p1,p2,...)
MATLAB tiene un toolbox o paquete especial (que debe ser adquirido aparte) con muchas
ms funciones orientadas a la optimizacin, es decir al clculo de valores mnimos de
funciones, con o sin restricciones.
7.3 Clculo de integrales definidas
El clculo numrico de integrales definidas de funciones de una variable real se hace en
MATLAB mediante la funcin:
>> quad(fun,a,b)
donde funcion es el nombre de una funcin que evala la funcin f(x), debe aceptar un
argumento vectorial, x, y devolver un argumento vectorial que es el integrando evaluado en
cada elemento de x.
>> quad(@fun,a,b,[],[],p1,p2,..)
permite pasar p1,p2,... como argumentos a la funcin fun(x,p1,p2,...)
61
y( t 0 ) = y 0
ode45
ode23
ode113
ode15s
ode23s
ode23t
ode23tb
Para la mayora de los casos ser suficiente con utilizar ode45 o bien ode23. Para casos
difciles, ver la documentacin de MATLAB. La utilizacin de todas estas funciones ode** es
similar. Lo indicado a continuacin para ode23 es vlido para cualquier otra
>> ode23(funcion,[t0,tf],y0)
funcion es el nombre de una funcin que evala el segundo miembro de la ecuacion, f(t,y).
Puede ser un objeto inline o una referencia a una m-funcin fun.m: @fun. [t0,tf] es el
intervalo en el que se quiere calcular la solucin, y0 es el valor de la condicin inicial usada
de esta forma, la funcin ode23 calcula la solucin numrica y la dibuja.
Usada en esta forma,
>> [t,y]=ode23(funcion,[t0,tf],y0)
la funcin ode23 calcula (numricamente) la solucin del problema, devolviendo dos
vectores, t e y, que proporcionan la aproximacin de la solucin del problema. Si se desea
expresamente conocer los valores de la solucin en unos determinados puntos
[t0,t1,t2,...,tf] se puede usar la orden ode** como sigue
62
>> ode23(funcion,[t0,t1,t2,...,tf],y0)
Las funciones ode** se pueden utilizar, tambin, en esta forma,
>> ode23(@fun,[t0,tf],y0,options,p1,p2,...)
donde options permite dar valores a una serie de parmetros que intervienen en
el clculo. Ver documentacin para ms detalles. Si no se necesita, poner una matriz vaca
[] en su lugar, p1,p2,... son parmetros que sern pasados como argumentos a la funcin
fun.m cuando sea llamada.