Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
El sistema MATLAB
3.1. Introduccin
-
MATLAB (MATnx LABoratory) es un entorno interactivo basado en matrices para la realizacin de clculo numrico y visualizacin de resultados. Permite la resolucin de problemas sin escribir un programa y con facilidades de representacin grfica de los resultados. Los clculos sobre matrices estn basados en los desarrollados en los proyectos LiNPACK y EISPACK. El objetivo de estos proyectos era crear paquetes de subrutinas en FORTRAN para tratamiento de matrices (vase el subapartado 2.4.1). Achialmente, el sistema IMATLAB se usa tanto a nivel acadmico, dentro de la universidad, como a nivel de investigacin e industria para la resolucin de complicados problemas cientficos o de ingenieria. Es empleado para el desarrollo de clculo numrico de propsito general y resolucin de problemas con formulacin matricial que aparecen en control, estadstica y procesado de seales. MATLAB aporta, por medio de las too1bo;ses (que no se incorporan en el sistema base, sino que se adquieren separadamente), funciones para resolver problemas especficos como. por ejemplo, procesado de seales, diseo de sistemas de control, identificacin de sistemas, simulacin de sistemas dinmicos, optimizacin, redes kuronales, etc. La principal ventaja del entorno MATLAB es su extensibilidad, que permite al usuario crear funciones que resuelven problemas especficos y, de este modo, aumentar la aplicabilidad del sistema. En este captulo damos una introduccin, suficiente para el desarrollo del libro, del sistema MATLAB. Se trata de una introduccin prctica, se presentan ejemplos y la salida correspondiente que produce MATLAB al ejecutar los mismos, se proponen ejercicios y se indican los aspectos m i s importantes. Hay muchas caractersticas del sistema MATLAB que no se incluyen en este tema. Solo pretendemos que el lector tome un primer contacto con el sistema y se d cuenta de su potencia frente a los lenguajes de alto nivel convencionales. Las funciones de cjlculo numrico que aporta MATLAB se estudian en detalle en los captulos siguientes al ir presentando los distintos mtodos.
74
CLCULO NUMRICO
En este libro describimos fundanie~.talmente la versin actual de MATLAB, aunque se hace referencia a las funcionalidades que son novedad de esta versin y que por lo tanto n o funcionarn con versiones anteriores. La razn de este mirar hacia atrs es que en muchas universidades es an difcil acceder a la ltima versin de MATLAB y se sigue contando con licencias de versiones anteriores como, la 4.2 o incluso la 3.5. Para consultar cualquier orden del sistema se puede usar la orden deayuda help orden, que nos da informacin ~ b r la e orden especificada. Por ejemplo:
help zerok
ZEROS Al1 zeros. ZEROS (N) is an N-by-N matrix of zeros. ZEROS(M,N) or ZEROS([M,N]) is an M-by-N matrix of zeros ZEROS(SIZE(A)) is the same size as A and al1 zeros.
Esta breve introduccin al sistema MATLAB intenta ser tan slo una pequea gua prctica que oriente al lector en sus primeros pasos. Para profundizar en el sistema MAT1,AB remitirnos a la bibliografa presentada en la parte introductoria o a la ayuda en lnea (le MATLAB. Adems 10s lectores con conexin Internet pueden obtener informacin adicional en la pgina PVeb http://www.mathworks.com ysiguiendo los enlaces a los que se puede acceder desde all. Ejecutando la orden help 'help se pueden ver las opciones de la orden
help.
75
Vamos a centrarnos inicialmente en las siguientes opciones que nos proporciona el men de la ventana de rdenes de la versin 5. Las opciones de las versiones anteriores son ms reducidas.
a) File: contiene opciones para crear archivos, configurar la impresora y las rdenes (algunas no las describimos aqu).
l . New: contiene la siguientes opciones:
~ci-file:abre el editor para crear un fichero .M (en versiones antiguas de MATLAB hay que especificar un editor por defecto en la opcin Editor). * Figure: crea una ventana grfica.
2. Open: permite abrir en el editor el fichero que se seleccione en el cuadro de dilogo de seleccin de archivo, en particular ficheros .M. 3. Save Workspace as ...:guarda en el fichero .mt, que se selecciona en el cuadro de dilogo de seleccin de archivo, el espacio de trabajo actual. 4. Open Workspace as ...:abre un espacio de trabajo almacenado previamente. 5 . Show Workspace: inicia la herramienta grficazde MATLAB que muestra el estado actual de la memoria de trabajo. 6. Set Path: inicia la herramienta grfica que permite gestionar el encaminamiento de MATLAB. 7. Preferentes: permite establecer diversas opciones, entre ellas el formato numrico, configurar algn editor opcional, especificar las fuentes y algunas opciones de con-
trol del portapapeles de Windows (estas opciones se encontraban disponibles en versiones anteriores en el men'options). . 8. Print ...:imprime el texto seleccionado en la ventana de rdenes. Si no se ha seleccionado ningn teho se imprime toda la sesin. 9. frinfer Setzp...:abre el cuadro de dilogo de configuracin de impresora. 10. Exit ItfATLAB: sale de MATLAB.
h) E&: contiene opciones que permiten editar la sesin MATLAB.
l . Cirt: corta el tkxto seleccionado de la ventana de rdenes copindolo en el portapa-
peles de Wiildows. 2. Copy: copia' el texto seleccionado de la ventana de rdenes en el portapapeles de ~indbws'. 3. Poste: copia el contenido del poitapapeles de Windows en la lnea de rdenes. 4. ~ l e n .Te.ssion: r borra $1 bl!fir donde se almacena la historia de .la sesin.
C)
IJII~CIOIV: lista las ventanas abiertas por MATLAB para que se pueda conmutar entre
ellas.
d) He&: abre el programa de ayuda interactiva de Windows para MATLAB. En el caso de la versin 5 la ayuda ha sido mejorada notablemente y ahora ya no se reduce a una sucinta descripcin de cada funcin, sino que se puede acceder opcionalmente a toda una documentacin sobre el sistema con vnculos en formatos HTML (legible con ciialquiei navegador de Web como Netscape) y PDF (AdobeAcrobaf).
La versin 5 presenta adems una barra de iconos con atajos a algunas de estas funciones, por ejemplo al gestor de encaminamientos (PATH manager) y al visor grfico del estado de la tnenioria.
,, ~,
77.
Se debe evitar los espacios en blanco cuando se escribe un nmero en forma exponencial, como por ejemplo 2.34e-9. Otra posibilidad para crear matrices es por medio de sentencias y funciones ya mplementadas en MATLAB, que describiremos ms tarde. Como ejemplo valga la funcin r d n ) , que crea una matriz n x n con valores generados aleatonamente y distribuidos uniformemente entre O y 1.
Aleatsria =
Las matrices pueden crearse tambin por medio de archivos .M. Este procedimiento puede ser especialmente til para crear matrices muy grandes ya que los errores se pueden eliminar rpidamente editando el archivo. Una posibilidad relacionada con esta es la de leer archivos de datos externos. Los elementos de una matriz se pueden identificar usando ndices entre parntesis. ) el elemento componente de la segunda fila y tercera Por ejemplo, ~ ( 2 . 3 representa columna.
A(2,31
ans = 5
Ejercicios
3.1. Crear dos matrices c y D con tres filas y tres columnas. 3.2. Visualizar en pantalla algunos de los componentes de las matrices c y D definidas en el ejercicio anterior.
La versin 5 d e MATLAB permite adems inkoducir y trabajar con arrays multidiniensionales. Otras estructuras dedatos ms complejas como son estructuras detipo registi-o tambin pueden definirse en esta versin.
,
MATLAB puede realizar el conjunto de operaciones sobre matrices mostrado en el cuadro 3.1.
CUADRO 3.1
Operaciones sobre matrices
OPERADOR
DESCRIPCION
resta
MATLAB produce un mensaje de error si estas operaciones s e realizan sobre matrices con un tamao no compatible, por ejemplo al sumar dos matrices con diferente nmero de filas ocolumnas. La nica excepcin es el caso de matrices escalares (1 x l), entonces se . . realiza' la operacin del escalar con cada elemento de la matriz.
~~
AXB
ans
41
40
94
50'
95 149
122
-
148
199
79
izquierda) es la solucin del sistema de ecuaciones A*x = b. Sobre los algoritmos que emplea MATLAB para realizar esta operacin trataremos ms adelante en este libro. x = ~ / (divisin b derecha) es la solucin de x*A = b (formalmente x = bA-'). En realidad, MATLAB define la divisin derecha en funcin de la divisin izquierda como blA = (Aslb')'.
x = ~ \ (divisin b
En algunas ocasiones se usa una matriz, no como una entidad, sino como un conjunto de componentes. A veces estaremos interesados en aplicar operaciones sobre los componentes individuales de la matriz. Por ejemplo, si queremos obtener el cuadrado de una matriz escribimos ~ " 2 ,pero puede ser que estemos interesados en obtener una matriz que tenga por componentes los cuadrados de los componentes de otra matriz. En este caso tendremos que realizar operaciones sobre componentes. La suma y resta ya operan componente a componente. El resto de operaciones se precede por un punto para que acten sobre componentes. Por ejemplo, para multiplicar los componentes de las dos matrices A y B de nuestros ejemplos podemos hacer lo siguiente:
A
.'
Ejercicios
3.3. Realizar sobre las dos matrices c y D todas las operaciones posibles. Comprobar la diferencia entre tratar las matrices como entidades o como conjunto de componentes al realizar operaciones.
Una sentencia termina con un retorno de carro. Si una sentencia ocupa ms de una lnea se puede continuar en la siguiente siempre que terminemos la lnea con tres o ms puntos (...) seguidos de un retorno de carro.
80
CALCULO NUMRICO PARA COMPUTACIN EN CIENCIA E ~NGEN~ER~A Es posible escribir varias sentencias en la misma lnea, siempre que se separen por una coma (,) o un punto y coma (;). Si no queremos que el resultado de una expresin se visualice en pantalla debemos terminar la sentencia correspondiente con punto y coma (;). Por defecto, MATLAB di'ferencia las maysculas de las minsculas. Por ejemplo, la variable temporal no es igual que la variable Temporal. Sin embargo, es posible modificar esta opcin de modo que no se prodtizca distincin entre maysculas y minsculas.
3 . 6 . El espacie de trabajo
El conjunto de variables definidas en una sesin forman el espacio de trabajo (ii~orkspace) d e la sesin. Para visualizar las variables que se han creado en la sesin actual, pertenecientes al espacio de trabajo actual, puedeutilizarse la. orden who. Para una informacin ms amplia es preferible utilizar la orden whos.
Ele!ents Bytes Nqe Size 9 72 3 by 3 A Alsatoria 4 by 4 16 . . 128 B 3 by3 9 72 ' G r a n d . total is 34 elements using 272 bytes
Complex No
NO
No
La misma inforniacin se obtiene en MATLAB 5 pulsando sobre el icono ' :: Es posible eliminar una viriable del espacio de trabajo por medio de la orden ciear n~mbr<variable. L a orden ciear sin argumentos eliniina todas las variables no permanentes. Las variables permanentes son variables del sistema MATLAB. Por ejemplo, la variable permanente eps almacena la precisin iel computador (generalmente lo-''). Tambirn es posible definir nuevas variables como permanentes.. . Ejercicios
l/g$g
3.5. Usar la orden whos para visualizar informacin sobre las variables de tu espacio de trabajo. Qu informacin se recoge en cada columna?
Cuando s&liriiosde una sesin blATL.XB lis variables se pierden. S ; puede dar el caso de que nos interese guardar estas variables para trabajar con ellas en sesiones posteriores. Para ello guardanios el espacio de trabajo en un fichero con extensin . m t usando' la
81
..
,.
, .
.., >. .
..
.
..
..-,
.~ ,.
,.
!.' . .
,..-. .. -1
., .; .. ; : > :. :; : :
.. , .
...
: ,
orden save. Para recuperar el espacio de trabajo almacenado en un fichero .mat se usa la orden lcad.
CUADRO 3.2
Funciones de construccin de malrices
t r i u li.)
t r i l (A) rand (m, n)
Mahiz identidad Motriz de ceros Matriz de unos Si x es un vector, el resultado es una motriz con el vector x como diagonal principal, Si x es una matriz cuadrada, el resultado es el vector dLagonal de la matrizx Parte triangular superior de una motriz Parte hiangular inferior de una matriz Matriz generada aletoriame'nte Mahiz.de Hilbert Mahiz mgica Matriz de Vandermonde constnjida a partir del vector x Matriz de Toeplitz no simtrica con c como primera columna y R como primera fila. toeplitz(c] es una matriz de Toeplitz simtrica.
Las matrices se pueden constnrir por medio de bloques. Por ejemplo, si hemos definido previamente en el sistema una matriz A 3 x 3, podemos constmir una matriz E 6 x 6 del siguiente modo:
82
Ejercicios
-
3.6. Crear una matriz F 6 'x 6 que tenga los elementos de la parte triangular superior igual a 2, los elementos de la parte triangular inferior igual -a 3, y los
-elementos de la diagonal los correspondientes a los de una matriz generda-aleatoriamente. A continuacin, crear una matriz G 12 x 12 formada por cuatro bloques 6 x 6, de modo que el bloque superior izquierdo sea la matriz F, el bloque superior derecho la matriz identidad,' el bloque inferior izquierdo una matriz mgica y el bloque inferior derecho una matriz de ceros.
13 sistema MATLAB incorpora las construcciones o estructuras tpicas de un lenguaje estructurado: while O Eor e i f .
3.8.! Construccin o r
Un bucle
for
f o r - r a r i a b l e = expresin, s e n t e n c i a ,
...,
s e n t e n c i a , end
Encada iteracin se almacena una columna de la expresin en la variable, y s e ejecutan las sentencias hasta la siguiente sentencia m. Lo ms normal es que la expresin sea del tipo x:y,'en cuyo caso la variable toma desde el valor x al valor y, incrernentndose en cada iteracin una unidad. Por ejemplo, para sumar dos matrices podramos usar,ios siguientes bucles for anidados:
83
end
De este modo se visualiza la matriz H en cada iteracin segn se va creando, Para evitar esto y visualizar el resultado al final seaade punto y coma al final de la. instrccin del bucle for:
for i=1:3 for j=1:3
84
CA~CULO NUMRICO
. . . , sentencia, end
.
..
o, lo que . es lo mismo:
while condicin
sentencias
t '
1
t
end
'a
4
Por ejemplo, para saber en que posicin de un vector v est almacenado el valor 9 .hnrirnos los siguiente:
Las posibles operadores~de comparacin para construir condiciones en MATLAB se muestran el cuadro 3.3.
OPERADOR
< >
DESCRIPCI~N
menor que mayor que menor o igual que mayor o igual que igual que no igual que
<=
>=
--=
Adems, se pueden crear condiciones ms complicadas por medio de los operadores lgicos mostrados en el cuadro 3.4.
CUADRO 3.4 Operadores lgicos
DESCRIPCION
NOT
Cuando estos operadores lgicos se aplican a escalares se produce el resultado O 1 si es cierto o falso. Si se aplican a matrices del mismo tamao se crea otra matriz del mismo tamao con unos o ceros como resultado de realizar las comparaciones entre componentes correspondientes. Ejercicios
B;
y almacenar el
3.8. Probar el resultado de hacer las siguientes comparaciones 4 4 , 4>5 y 4==5. A continiiacin comparar dos matrices para ver como se forma la matriz resultado
de la comparacin.
3.8.3.Construccin if
La constriiccin if ejecuta un conjunto de sentencias si una condicin se ciimple. Su forma general es:
86
if condicin, sentencia,
...,
sentencia, end
o, lo que es lo mismo:
if condicin sentencias end
..
Tambin existe la opcin de que se ejecute otro conjunto diferente de sentencias si condicin no se cumple:
i f condicin, sentencias, else, sentenciasijend
\
la^ i
o , lo que es lo mismo:
if condicin sentencias else sentencias e r i d
Se reconiienda utilizar la orden help para ver como actan y qu accin realizan las funciones anteriores.
,
3.16. Funciones vectoriales
. ..
Otras funciones MATLAB slo operan sobre vectores (fila o columna) si se crea un escalar, pero pueden operar columna a columna cuando se aplican sobre matrices al crear un vector fila que contiene los resultados de su aplicacin sobre cada columna. Si queremos que acte fila a fila hacemos que acte sobre la transpuesta de la matiz. Las funciones ms comunes son: m, min, sort, sum, prod, median, mean, std, any, al1 y conv. Ejercicios
3.9. Utilizar la orden help para ver como actan y que accin realizan las funciones anteriores. Utilizando estas funciones, jcmo se puede obtener el elemento
mayor de una matriz?
87
El carcter dos puntos (:) y los vectores de ndices permiten referenciar vectores y submatrices de una matriz. Es importante entender su funcionamiento porque ahorra muchas operaciones al reducir el uso de bucles y, por tanto, hace el cdigo ms legible. Esta es una de las principales ventajas de MATLAB frente a otros lenguajes de alto nivel. Veamos algunos ejemplos: La expresin 1;5, usada generalmente en los bucles for, representa realmente el vector [i 2 3 4 S].Esta expresin se puede generalizar de manera que los niuneros no sean enteros y el incremento de valores sea diferente a la unidad. Por ejemplo,laexpresin 0.1:0.2:0.7representaevector 10.1 0.3 0.5 0.71. El carcter : tambin se usa para referencia una submatriz de una matriz. Por ejemplo E (1: 4 , 3 ) representa el vector columna formado por los cuatro primeros elementos de la tercera columna de la matriz E.
ans =
3
6 9
E ( :, 3 >
ans = . 3 6 9 1
88
CLCULO NUMRICO
En la misnia lgica, E ( 1 : 4 , :) representa una matriz formada por las cuatro primeras ? ii filas de todas las columnas de la matriz E.
E(124,:)
. .
ms =
'2
4
7
5
8
3 6
o
O
~0
o
O
O
o
O
i
i
L
Se pueden usar vectores de enteros como ndices. As por ejemplo E(:, 1 2 . 4 1 ) . representa la submatriz formada por todas las filas y las columnas 2 y 4 de la matriz E.
E(:, [2,41)
.
,
:; .>
!
C
u
O U
m s =
2.
5
8
1 1
1 1
1
1
1
1
~,
Los ndices se pueden usar a ambos lados de la asignacin. Por ejemplo A ( : , [i 31 ) = B ( : , 1:2 ) asigna a la siibmatriz de A formada por todas las filas y las columnas I y 3 lasubinatriz de B formada por todas las filas y las columnas 1 y
3 -
Ejercicios
3.1 1. Crear una tabla de senos.(matriz forniada por dos columnas) desde el ngulo 0.0 al ngulo 3.0 con incremento O.,l.
l. Crear una matriz aleatoria D 10 x 10. 2. Visiializar la sptima columna de la matriz. 3. Visiializar la tercera fila de la matriz.
89
3.13. Ficheros . M
MATLAB puede ,ejecutar secuencias -de sentencias almacenadas en archivos con extensin .M.Hay dos tipos de archivos .M: guiones y funciones. 3.13.1. Guiones Un guin MATLAB est fofrnad por un conjunto de sentencias MATLAB. Por ejemplo, podemos crear, por medio-del editor, un archivo que se 1lame~matriz.mcon el siguiente contenido:
vi = [ 1 2 3 4 ; 4 5 6 71; V 2 = [ 1 2 3 4 ; 4 5 6 7 ] ;
'"3 = v1
,
>.
V2
Al usar la nueva orden matriz se ejecutan las sentencias incluidas en el fichero matriz .m, con el siguiente resultado:
Es importante tener en cuenta que el guin utiliza el espacio de trabajo global. Esto significa que dentro del guin se pueden usar las variables globales y las nuevas variables que se crean dentro del guin pasan a formar parte de las variables globales. Si ejecutamos el guin anterior en una sesin donde la variable vj existe, eliminamos la variable del entorno definiendo una nueva. Los guiones se usan a menudo para crear matrices de gran tamao porque los errores se pueden eliminar rpidamente. Los guiones pueden llamar a otros guiones, incluso a s mismos recursivamente.
,
3.13.2. Funciones
Gracias a las funcionqs podemos hacer ms potente el sistema MATLAB. Podemos crear funciones para resolver problemas, pasando a formar stas parte del conjunto de
MATLAB. Las variables creadas en una funcin son locales; Slo existen mientras la funcin se est ejecutando. Esto quiere decir que sus nombres de variable son independientes de los utilizados en la sesin donde se invoca a la funcin. Por ejemplo, vamos a crear una funcin qe admita como parmetro una matriz y devuelva el elemento mayor:
funccion m = m a x h A ) %KUli4O(A) Ije&elve el mayor elemento de ijna matriz 8
%
,
;
'i
-..
%
%=
,\
z
.?
B Valbres de s a l i d a
8
%
m = niaxmaxA));
~ t i l i z a m o s u neditor para escribir el textp anterior en un fichero qe llamanios m~i,?io .m. De estemodo la funcin se puede usar dentro de una sesin MATLqB como si se tratara de cualquier otra funcin. Si en una sesin queremos saber el mximo elemento de una matriz E y asignar este valor al escalar a, escribiremos a = --(E). De este modo se llama a la funcin pasando la matriz E como argumento y asignado el resultado al escalar a.
:i
1
1 i 1 i
Las funciones se pueden invocar con valores por defecto para los argumentos de entrada. La variable nargin almacena el nmero de argumentos usados al llamar a la funcin. Por ejemplo la funcin:,
function m = maxcol(A,n)
BK?.XCOL(A, ri)
-
B
%
B
.
% %~ 8
8
%
i f nargin < 2
92
.l 3
I
i
componente de la matriz a Se puede conocer dentro de la funcin el nmero de argumentos de salida por rnedio.de la variablenar~out.
, > .
a '= mawcin(E)
, .'
..
~ ~
Otros ingredientes tiles: \ Un smbolo % indica que el resto de la lnea es un comentario y, por tanto, MATLAB lo ignora. Las primeras lneas comentadas se visualizan en pantallaal ejecutar la prden help usando como argumento la funcin.
help
1
a
'7
;i !
i .;
W I N ( A , n l Devuelve e l mayor y menor elemento de l a c o l m a n de una matriz o de l a matriz entera dependiendo s i se introduce o no un valor para n.
~
..
Valores de entrada A: Matriz n: Numero de c o l m a Valores de salida m a : valor mayor m i : Valor menor
\
a i .(
2
Un argumento de entrada a una funcin puede ser elnombre de otra funcin. Vase la funcin feval. * La versin 5 de MATLAB permite el uso de .M con subprogramas, funcionalidad esta que permite escribir cdigos ms-autocontenidos.
Ejercicios
3.14. Implementar una funcin que tenga como parmetro una matriz y un escalar; y produzca como salida la matriz elevada al escalar.
3. i3.3.
Cuando se introduce una cadena de caracteres en la lnea de rdenes, el entorno reali;a las siguientes bsquedas:
93
1. Comprueba si cadena es una variable. 2. Si no, comprueba si es una funcin propia de MATLAB. 3. Si no, comprueba si hay un fichero con el nombre cadena.m en el directorio actual. Dentro de MATLAB se puede cambiar de directorio con chdir. 4. Si no, comprueba si hay algn fichero de nombre cadena.m en la ruta de bsqueda o path del MATLAB.
Se pueden unir ms subdirectorios a la ruta de bsqueda usando la orden path. Vase En la versin 5 la pulsacin sobre el icono da acceso a la ventana del gestor de encaminamientos de-la figura 3.3, que permite modificar el PATH de MATLAB.
help path.
-/
s = 'Esto es un mensaje' =
Esto es un mensaje
Oentro de i~n.fichero.M se pi~ede escribir en pantalla de los siguientes niodos: Con in fiincin d i s p . Por ejemplo:
disp(<Hola, esto es un mensaje') Hola, e s t o es un mensaje
Con la funcin e r r o r ; E n este caso se visualiza el mensaje y el fichero de ejecutarse. Por ejemplo:
error('la operacion no se puede realizar')
.!4
termina
l
'1
Dentro de un archivo .M se puede pedir al usuario qiie introduzca tin dato usando la fiincin i G u t . Por ejemplo:
resg = input'Introduzca el numero de iteraciones: ' )
<
.i
95
De este modo se visualiza en pantalla el mensaje y el dato introducido por teclado se asigna a la variable resp. Ejercicios
3.15. Modificar la funcin del ejercicio anterior de modo que la potencia a la que
se eleva la matriz se introduzca por teclado. Con la funcin fprintf se pueden escribir datos y texto en pantalla o en fichero. Por ejemplo:
fprintf (1, 'La ccmponente 2,3 de,la matriz E es: %d \n', E ( 2 , J ) )
La orden etime(t2, tl) devuelve el tiempo en segundos transcurrido entre dos tiempos t2 y tl. Por ejemplo, se puede calcular el tiempo consumido en calcular la inversa de una matriz M 40 x 40 del siguiente modo:
M = rand(40); t = clock; Fnv(M); time = etime(clock, t)
time =
o. OOCO
Una ltima posibilidad es usar las rdenes t i c y toc. El modo de proceder es ejecutar:! la orden t i c antes del algoritmo y la orden toc despus.
M = rand(4O); tic, imrM); toc
1
i
Desde la versin 5, MATLAB incorpora una utilidad que permite controlar el tiempo j de ejecucin de cada lnea de un fichero .M. P&a ms informacin teclear he1 p r o f i l e . , \
4
.!
Ejercicios
.S .Y
3.16.. Crear una tabla con el nmero de operaciones que hacen falta para obtener la '3
.
inversa de una matiz, desde 2 x 2 hasta 15 x 15. Para ello escribir una funcin que admita como argumentos el menor y el mayor orden; y devuelva la tabla de opera- j ciones. ~ C i i ~ varia o el nmero de operaciones con respecto al orden de la matriz? ,:J
j
!j
CUADRO 3.5 Formotos de salida ORDEN fomt fo+t fomt fomt 'chort long short e iong e FORMATO Punto fiio con 4 dgitos decimales (por defecto) Punto fijo con 1.4 digitos decimples Notacin cientfica con4 dgitos decimales Notacin cientfico con 15 dgitos decimales
'
f4
3
i i
La orden p i o t crea grficos x-y; si x e y son vectores de la misma longitud, la orden p 1 0 t : (x.,y) abre una ventana grfica y dibiija los elementos de x frente a los de y. Por ejemplo, para representar la grfica del coseno escribiramos:
'
97
= cos(x); p l o t (x,y)
Sobre - las grficas se pueden realizar las acciones mostradas en el cuadro 3.6.
CUADRO 3.6 'Opciones en las grficas ORDEN .
FORMATO
Coloca una rejilla en la grfica Ttulo del grfico Etiqueta en el eie x Etiqueta en el eiey Escribir texto en una posicin interactivamente Escribir texto en unas coordenadas determinadas
Por ejemplo:
grid; t i t l e ( ' G r f i c a d e l coseno8); x i a b e l ( ' e j e x l ) ; y l a b e l i ' e j e y ' ) ;
98
CLCULO NUMRICO
. PARACOMPUTACIONENCIENCIAE INGENIER~A .
1 ;
Por defecto los ejes del grfico se escalan automticamente. Sin embargo, se pueden forzar los lmites de los ejes por medio de la orden axis ( c ) , que admite como parametro un vector de 4 elementos c= [i,,,x-, y-, y- 1. Para que las grficas se vuelvan a autoescalar se ha be ejecutar de nuevo la orden axis. La orden axis i 'squarer hace que se use la misma escala enmbos ejes. Para representar vanas funciones en el mismo grfico se forma una mahiz que contenga en las columnas cada una de las funciones que se quiere representar. Por ejemplo, para representar la funcin seno y la funcin coseno en el mismo grfico se procede del ~! siguiente modo:
I
'j
Tambin se puede utilizar la orden hold. Esta orden congela la ventana grfica actual de modo que las siguientes grficas se representan en ella. Volviendo a ejecutar hold se descongela la ventana grfica. Se pueden cambiar los tipos de punto y lnea, as como sus colores. Vase help plot.
La orden mesh ( 2 ) crea un grfico en tres dimensiones con los elementos componentes de la matriz z. Para representar grficamente una funcin z =Xx, y) sobre una regin rectangular plana del dominio de f se han de seguir los siguientes pasos:
1. Definir los vectores xx e yy que particionan los lados d e ~ ' ~ l a n rectangdar. ; 2. Usando la orden rneshgridse crea un par de matrices, una de ellas x cuyas filas son iguales a xx y con un hmero de filas igual al nmero de componentes de yy, y otra
matriz y cuyas columnas son iguales a yy y con un nmero de columnas igual al nmero de componentes de ,v.
3. Obtener la matriz z evaluandofsobre las matrices x e y. 4. Aplicar ni-sh sobre z. -(x'+.v2) Por ejemplo, para representar la grfica de la funcin z = x . e drado [-4,4] x [+,41 podemos escribir las instrucciones
sobre el cua-
11
Ejercicios 3.17. Modificar la funcin escrita en el ejercicio 3.16 para que represente en una grfica bidimensional el nmero de operaciones en funcin del orden de la matriz.
Las versiones de MATLAB, a partir de la 5, incorporan muchas mejoras en la visualizacin grfica mediante el uso del algoritmo Z-buffer, soporte de color verdadero y muchos efectos de manejo de imgenes y figuras 3-D. Tambin se incorporan mejoras en los grficos para presentaciones, como el poder introducir texto y frmula en formato TeX. Otra mejora consiste en la posibilidad de definir arrays de tipo byte para almacenar imgenes.
A la hora de escribir funciones MATLAB es importante seguir una serie de normas de estilo que o bien facilitan la comprensin y el mantenimiento de los cdigos, o permiten obtener el mximo rendimiento de los programas. En particular es importante que el cdigo est auto-documentado. Dentro de la documentacin del cdigo tienen un papel especial las lneas que siguen a la cabecera del pro-
100
grama, que son las que aparecen cuando se teclea help nombre-fichero. Es interesante incluir informacin sobre qu resuelve la funcin, qu mtodo emplea -incluso con referencias bibliogrficas-, qu variables utiliza como entrada y cules como salida, las^ funciones implementadas..p reviamente que se utilizan, e incluso el autor y la fecha de la ltima revisin del cdigo.-Tambin e s importante dividir y comentar los mdulos princi., . del diseo descenpales de la funcin. En particular, se puede emplear el pseudocdigo dente como comentario en la funcin. En resumen, normalmente no es trabajo perdido, sino ms, bien lo contrario, pues supone incluir toda la informacin necesaria para comprender y mantener el fichero .M.Si no se ha utilizado una funcin en varios meses y se necesita volver a ella para realizar unos canitjios, es fundarnenfal'que est suficientemente documentada por medio de comentarios. . . , En cuanto al cdigo en si interesa seguir las normas de la programacin estructurada, tanto de cara al mantenimiento y depuracin de los programas como de cara a la.legibilidad del cdigo. Otro tema importante a la hora de escribir 'funciones MATLAB es el de la optirnizacin del rendimiento, ya que el modo de .programar una tarea concreta puede ser determinante tie la velocidad de ejecucin del cdigo resultante. As, es conveniente seguir las siguientes indicaciones para alimentar el rendimiento del sistema:
~
: .
.?
i :
; .l 3
.c
li
.: i .;
."
;j
a 4
.$ :l
a
l . Evitar rl liso de btrclesy ~rriliznr los funciones &ctoriales de MATLAB. Por ejemplo definamos los vectores
for i=1:10000 xi(i)=f/i; x2(i)=~'sin(0.00l*i);
8 3
4 2
4
d;
-4 2
-4
$
+ xl(k)'x2(k);
elapsed-time = O. 4010
Sum =
3.3156
elapsed-time =
,
0.0100 3.3156
sum =
2. Utilizar jrriciones vectoriales y minimizar el nmero de llamadas a firnciones t'.rterriu.s. Para ello puede ser interesante definir variables intermedias que almace-
nan llamadas anteriores a funciones que se van a reutilizar, etc. Adems, hay algunas operaciones que se realizan de manera ms directa de alguna forma particular, el ejemplo clsico es el de elevar a una potencia, que es mejor realizar por medio de multiplicaciones cuando sea posible:
tic; for j=1:100, sall=xl.*xl.*xl; sal2=xl.*xl; end; toc;
elaps-time = 0.4210
J .
A la hora de optimizar un algoritmo hay que intentar que no por esto pierda legibilidad, esto es, que las simplificaciones que se realicen estn bien comentadas y en '.'- - l e programa cuyo funcion&iento sea transparente: ;,r,,~nsionar-los .sectores. Si no se hace as MATLAB debe ir aadiendo una 1 componente nueva al vector, lo quese traduce en un funcionamiento ms lento. Por ejemplo: . .
tic; a(1) = 0; for i=lr10000, a(i+l) = a(ii + 1; endt toc
elapsed-time = 12.6380 tic; a=zeros(1,10000); a(1) = 0; for i=l:10000, a(i+l) = a(i) + 1; end; toc elapsed-time O . 6910
La elaboracin de programas es mucho ms verstil desde la versin 5 de MATLAB y es uno de los campos que ms mejoras ha experimentado. En el terreno de la programacin y el desarrollo de aplicaciones se incluye un analizador de rendimiento de ficheros .M,un editor y depurador de ficheros .M, programacin orientada a objetos, entorno de desarrollo de GUIs, editor de objetos grficos, etc.
-KGI&
p s i 6 1
Introduccin a MATLAB
fb MATrix LABoratory
Jess Peinado
b Pedro Alonso
~o
F 3
DBpartamenlo de S s t w
lnfomiaticos y Cmpulaa6n
ib Universidad Polil6cnica de
Valencla
1
DSIG
f f a .
Qu es MATLAB
fb MATLAB es una aplicacin interactiva para realizar clculos
ib MATLAB est disponible en diversos entornos: estaciones de trabajo Sun, Apolio, VAXstation, HP, PC's y compatibles y Appie Macintosh.
2
Qu es MATLAB
A % . _
...
Invocar: c: >mtlab
ib Trabajar sobre 'command window'
DSI~
-
Qu es MATLAB
-ex--&
...---..
ib
nacin si se realiza..
4
DSV~
ib Ejemplos:
Qu es MATLAB
C _ q _ '
.
>>2+2 ans = 4 >>x=2+2
X
=
4
>>y=2*2;
>> Y Y=
4
5
osid
-
Introduccin de matrices
. i i x
...----
Introduccin de matrices
s
MATLAB trabaja con un slo tipo de objeto: Matriz. Una matrlz 1 x 1 la llamamos 'escalar'. w Una matriz n x 1 1 x n la Ilamamos 'vectof. Una MATRIZ es un conjunto ordenado de nmeros, reales o complejos, ordenados por filas y columnas. No hay especificaciones de tipo. Los nijmeros se pueden representar en distintos formatos como el siguiente: [ m a n t i s a l e [exponentel. Ej: A=lOe24
7
1 3 1 Matrices simples
b Las matrices se pueden introducir de diferentes formas:
Mediante una lista explcita de elementos. Generadas por rdenes y funciones. Creadas en archivos .m. Cargadas de conjuntos de datos almacenados en un archivo externo.
(b
El espacio de almacenamiento es asignado dinmicarnente hasta completar la memoria asignada a ia aplicacin o ia memoria disponible en el sistema.
8
l1
k1Matrices simples
-l-?-Z.
La lista explicita bs el mtodo ms sencillo para introducir los elementos de la matriz. w Los elementos estn separados por espacios. o Las columnas estn separadas por ';' o por 'CR'. Es equivalente:
. A =
A
[ 1 2 3 ; 4 5 6; 7 a 9 1
= [ 1 2 3
4 5 6
7 8 91
DSI~GI
Matrices simples
>> A = [1 2 3;4 5 6; 7 8 9 1
% -A -& -
A=
1
4
7
>>
2
5
8
3
6
9
10
DSV~
Matrices simples
. = . h T i : .
funciones.
w
w
Las matrices creadas tienen el tamafio adecuado para almacenar el resultado de la operacin.
DS~C~
Ejemplo:
>> A=[l 2 31;
f f i i * .
,..---..
Matrices simples
C=
30 36 42
>> D=A+B(I ,:)
D=
2
6
12
os/cI
>> A+B(:,I)
. S
k : * = r : .
Matrices simples
13
E = % .
Matrices simples
ib Las matrices pueden generarse a partir de un archivo ASCI1
D S ~ '
Elementos de la matriz
ib Los elementos de la matnz se pueden generar mediante
A & .
expresiones MATLAB:
-1,3000 1.7321 4.8000 b Los elementos individuaes de la matnz pueden referenaarse especificando el ndice entre parntesis (n8tese que x(4) se pone a cero de manera automatica). >> x(5)=abs(x(l))
X
=
1.3000 1.7321 4.8000 0.0000 1.3000
15
*sI"
Elementos de la matriz
ra Se pueden construir matrices grandes usando matrices pequeiias como subelementos. Observese cmo podemos
x=eeA-A
16
PSI~GI
*LWZS&.
Matrices simples
La transpuesta de una matriz se halla con la comilla simple '. >>A=[123;456;789] A= 123 456 789 >> A' ans = 147 258 369
17
DSI~CI
.=Y&
. h .
Matriz identidad Matriz de ceros Matriz de unos Matriz diagonal Parte triangular superior Parte triangular inferior Matriz aleatoria Matriz de Hilbert Cuadrado mgico Matriz de Toeplitz
18
,
-S,=-%.
>> A = eye(4)
A=
1 O O O 0 1 0 0 0 0 1 0 0 0 0 1
19
rdenes y variabls
~svGi
X f & .
rdenes y variables
b MATLAB es un lenguaje de expresiones. b Cada expresin tecleada por el usuario se interpreta, evala y,,por defecto se muestra su resultado. b El formato tipico es: v a r i a b l e = expresin.
b La evaluacin de la expresin produce una matriz, que es mostrada en la pantalla y asignada a la variable e s p e d i i d a
para su uso posterior.
21
~ o ~ lrdenes d y variables
e & .
-----
b Si el ltimo carcter de la orden es ';' la asignacin se realiza pero su resultado no se muestra en pantalla. til en archivos .m. til para operaciones que producen matrices grandes como resultado y no interesa mostrarlas en pantalla.
la pantalla, podemos usar '...' seguido de 'CR', lo que indica que la orden sigue en la columna siguiente. Ejemplo: s=1 112 + 113 - 114 + 115 - 1/6 + 117 ... - 118 + 119 - 1/10 + 1/11 - 1/12;
22
rdenes y variables
FO Las variables y los nmeros de funcibn estn formados por una
letra seguida por cualquier nmero de letras o nmeros o del carcter underscore '-'.
FO Solo se utilizan los 19 primeros caracteres del nombre de la
funcibn.
p MATLAB es case sensitive: w A y a no son la misma variable.
El comando casesen hace que MATLAB sea case insensitive. Debe usarse con precaucin.
23
osjcl
c . % & -
Espacio de trabajo
24
DSIG
Espacio de trabajo
& A -. .
-----
rize
4 3
~lementi
B Y C . .
48 72
24
-LLY
capler
No Ho So
HO
L
9
N11
NI1
B
C
D
%x
1 4 3 1 4 5
1 4 3 3 by 3
280 b F s a
3
5
Nll
(0
24
mil mil
N:l
si
HC
?2
25
leaving 7452080 byres of maa>ry Cree
o s 1 6 1
A * . -
-----
Espacio de trabajo
un significado especial para MATLAB, y no pueden borrarse. . ans es el resultado de la ltima orden realizada sin asignacin explcita a variable. aps es la tolerancia utilizada por MATLAB para determinar si un resultado es O entre otras cosas, y debera ser utilizado por los usuarios wrno criterio de convergencia. Para la ariirnetica IEEE utilizada en la mayoria de wdenadores personales y estauones d e trabajo e p s = 2.2204e-16. El valor de eps puede modificarse a cualquier valor, incluso O.
26
DSI~GI
Espacio de trabajo
w
Mediante el comando save se puede guardar el espacio de trabajo (las variables) para otras ocasiones.
= O &
>> save
Saving to: matlab.mat
b Con save fichero el espacio de trabajo se guarda en el fichero fichero.rnat. b Para recuperar las variables de una sesi6n anterior se utiliza el comando load:
>> load fichero
27
DS~ GI'
Nmeros y expresiones
28
o m G i
* T e >
Nmeros
p Para la expresin de nmeros se utiliza la notacin decimal tpica, optativamente: Signo menos '-' al principio. Potencia de 10 como facior de escala, especificada como sufijo 'eXX'.
p En ordenadores que utilizan la aribnetica IEEE, el error relativo de cualquier nmero es eps, lo cual equivale, aproximadamente, a 16 cifras significativas.
29
Expresiones aritmticas
Las expresiones aritmticas pueden construirse usando los operadores aritmticos tipicos y con las reglas de precedencia comnmente utilizadas. Operadores:
-C-C-~Z,
realiza lo mismo.
b Para matrices, sin embargo, no son iguales.
o * & -
-----
DS"~
Expresiones aritmticas.
b Los parentesis se usan del modo tipico para alterar la
La funcin p i devuelve litatan (1). La funcin i n f devuelve infinito, que es el resultado de l / o . Le variable NaN, Nota Number es un valor especial recogido en la aritmtica lEEE que indica que el resultado de una operacin es una indeterminacin.como o/o o i n f / i n .
Si usamos una variable que tenga el mismo nombre que una 32 funcin existente, la funcin deja de estar disponibfe. Ojolll
PSGI
Help
A A x
-----
w
w
Para obtener la lista de temas acerca de los que se puede obtener ayuda, use > > h e l p . Para obtener ayuda acerca de un tema. use > > h e l ptema. Para obtener ayuda acerca de los operadores: > > h e l p ops .
33
Help
ib Ejemplo del uso del comando help
MEAN
For vectors, MEAN(X) is the mean value of the elements in X. For matrices, MEAN(X) is a row vector containing the mean valueof each column. See also MEDIAN, STD, MIN, MAX.
34
DS//G/
-.-A-&
-----
Construcciones Estructuradas
35
Construcciones Estructuradas
SFA--&
-----
B Las sentencias de control del flujo en MATLAB operan como en la mayora de los lenguajes infomlaticos:
For.
x = 0; for i = 1x1, x=[x,iA2]. end
o
36
p s I Y c 1
Construcciones Estructuradas
= y *
ib while
DSIYCI
Construcciones Estructuradas
s f = f = 2 . A .
-----
ib if
QSI~G~
ib Relaciones
Construcciones Estructuradas
= q ; .
<
--=
menor que mayor que menor o igual que mayor o igual que igual que
o no
39
Construcciones Estructuradas
ib break: Termina la ejecucin de un bucle FOR o WHILE. Si
. F E & .
.,,---..
0~~61
-sez-
Funciones Escalares
41
Funciones escalares
. t = e L &
----..
round floor
tan
ceil
42
Funciones escalares
ib La funcin sqrt por ejemplo halla la raz cuadrada de los
% & *
>> sqrt(A)
ans =
2
3
43
DS~]
t r = ? L & .
*.---..
44
os'61
Funciones Vectoriales
. t = % i &
...---
median mean
any al1
45
o s d i
m
L : z T .
Funciones vectoriales
La funcin mean, por ejemplo, halla la media de los elementos de un vector:
>>x=[t;2;3];
.>> mean(x);
ans =
2
46
Funciones de Matrices
F C
Actan sobre matrices: elg chol svd inv valores y vectores propios factorizacin de Cholesky descomposicin en valores singulares inversa factorizacin LU factorizacin QR Forma de Hessenberg Descomposicin de Schur rango
47
lu
qr hess
schur rank
* = L * .
...----
D ~ S '
Funciones de Matrices
expm sqrtm
PO~Y
exponencial de matriz raz cuadrada de matriz polinomio caracteristico determinante tamao 1-norma, 2-norma, F-norma, -norma Nmero de condicin en 2-norma.
48
D ~ S ''
Funciones de matrices
b La funcin inv, por ejemplo, halla la inversa de una matriz:
_ _ A -* '
...----
>> A*inv(A)
ans =
1.0000 0.0000
o
1.0000
49
? * a .
-"---
DS''~,
Funciones de Matrices
oy
= eig(A);
y es un vector que mnliene los valores propios. U es la matriz de vectores propios. D es una matriz diagonal cuyos elementos son los valores propios de A.
* [U,D] =,eig(A);
50
4sf61
La lnea de Comandos
% $ z A * .
...----
$ %
El cursor se posiciona en la lnea mediante las flechas izquierdalderecha y la tecla de borrar el carcter anterior. Mediante las flechas arribalabajo se recuperan comandos anteriores.
pl
con las flechas ser de comandos que comiencen con dichos caracteres.
51
P S ~ '
w
L s i
y = sin(x);
Ix, Y1
53
D 'S '
e _ _ '
-----
vector: ejemplo: A(1:4,3) Es el vector columna formado por las cuatro primeras entradas de la tercera columna de lamatriz A. Es el vector columna formado por la tercera ejemplo: A(:,3) columna de la matriz A. w ejemplo: A(:,[:! 41) Son las columna 2 y 4 de la matriz A.
asignacin.
54
osllll
s
Sea la matriz A:
= .L e * -
Submatrices
>> A = [1:4;5:8;9:12;13;16]; La submatriz A([ 2 4],2:4) es la Siguienle: >> A([ 2 4],2:4) ans = 6
l 5 9
13
10
l * >
c m >
55
11
12
7 15
8
16
14
Archivos .m
DS/?G~
Archivos .m
z z
DSGI
= = L .
sentencias MATLAB normales. Sea data.m el nombre de un fichero .m, se ejecuta desde la finea de comandos como:
>> data
y se ejecutan los comandos del fichero M data.m. Las variables son giobales al entorno de trabajo en el que se ejecute en script. Los scripts pueden referenciar a otros scripts recursivamente. p Sirven por ejemplo, para introducir datos en una matriz muy L grande.
58
DS//~]
l b
scripts
= A -
e---$
7891
>z data
A=
1 2 3
4 5 6
7 8 9
59
A -& -.
----..
.m.
60
DSI~GI
= Y A & -
.....---
p La sintaxis de una funcin es functlon [varf,var',..] =nombre( paraml, param2 ... ). o 'Conjunto de instnirxiones MATLAB'.
DSI%~
1
z -
w Ejemplo:
function a = randint( m, n )
a = floor(lO*rand(m,n));
jb
o
>> z = randint(4,2)
62
Ds%~
-L-F%=-&.
% !
La variable nargin contiene el nmero de parmetros proporcionados en la llamada a la funcin. La variable nargout contiene el nmero de parmetros de salida proporcionados por la funcin.
ro
63
DS/I~I
_ . u _ '
-..---
>> xm = stat(x)
M
DSK~
,..---_ . _ * .
Cadenas de texto
65
nsd
Cadenas de texto
. C % x
."---..
Esto es un texto
>> disp(s)
Esto es un texto
66
DSIGI
fb
Cadenas de texto
= a
----..
LOSmensajes de error se muestran mejor con el comando error. Se utiliza en funciones en ficheros .m. Es w m o la llamada dlsp, pero adems aborta la ejecucibn del programa.
texto con el comando input. La cadena de entrada debe ir entre comillas simples.
67
DSI~~
A &
,.*--..
Manejo de Archivos .m
Ea
Manejo de ficheros .m
b Mediante el operador ?'se pueden ejecutar comandos del
A .& -
-----
sistema sin necesidad de salir de MATCAB. Por ejemplo. para editar un fichero .m se puede invocar el editor vi en un sistema UNIX: >> !vi statm FS Existe adems un depurador de ficheros .m. Ver help dbtype. b Mediante el comando dirse pueden listar los ficheros en el directorio actual. ~b Mediante el comando what se pueden listar los ficheros .m nicamente en el directorio actual. ib Con delete se borran ficheros. lb Con chdir se puede cambiar de directorio.
69
'~"l
-
Manejo de ficheros .m
>> dir
_ '
...----
>> what M-files in the current directofy Macintosh HD:Mal.MATLAB 4.2c.l:extern:src yprime
70
Obtencin de Resultados.
A -& -.
...----
D S " ~
Ternporizacin y eficiencia
Nmero de operaciones en coma flotante (flops) y, tiempo transcurrido en la ejecuci6n del algoritmo.
72
PSI~GI
% T e > .
Flops
Para averiguar el nmero de flops de un algoritmo se utiliza en primer lugar el comando
>> flops(0);
que pone la variable flops a cero, y despuds de la ejecucin del algoritmo se invoca el comando:
S>
flops
DS~A
b Ejemplo de flops.
>> A=[1:1000]; >> flops(0);
A * .
Flops
-----
ans = 1000
74
Q G S I
Tiempo
A * -
*----
tb Para medir el tiempo de ejecucin de un algoritmo se uliza la funcin clock. Devuelve el tiempo actual con una precisin de centsimas de segundos.
Dados dos tiempos t i y 12, la funcin %time(12 ,ti ) devuelve el tiempo transcurrido entre ambos.
tb Ejemplo:
>> t = clock; x = A\b; time = etime( clock. t )
DSUC/
Comando Diary
Y & & -
,..-*--
a partlr de ese momento. Por defecto se graba en el fichero d~ary. Para ponerlo en funcionamiento diary o diary on. Para pararlo diary off.
76
psilci
feval
.se--&.
b feval: si F es una tira conteniendo el nombre de una funcin (que puede estar definida en un fichero .m) entonces feval(F,xl, ...,xn) evala esa funci6n con sus argumentos.
Por ejemplo:
F = 'archivo'; FEVAL(F.9 64);
es lo mismo que
archivo(9 64):
77
. . u -
Formato de salida
-=*&---.
p El resultado de cualquier orden de asignacin se muestra en la pantalla, a menos que usemos ';' para que no sea as.
El formato numrico utilizado puede ser seleccionado de entre una serie de posibilidades.
f o m t short
1.3333 0.0000
format short e
r 1.3333E+000 1.23458-006
f o m t 1ong
r r
1.333333333333338 0.000001234500000
format long e
1.331333333333338E+P00 1.234500000000003E-006
fomat hex
3FF5555555555555 3EB4B6231AWFDZ71
78
Grficos
OSA
Grficas planas
C _ a -
-----
dos vectores x e y, el comando plot(x,y) abre una ventana y dibuja la grfica de los elementos de x versus y.
b Ejemplo:
80
D S ~ '
81
& E ? l
%
Grficas planas
~sid
O
Representacin de la exponencial
= ; = ; T e z .
DS%~
Curvas planas
-..--..
ib Otros comandos tiles son': titilo de la grfica. title . xlabel etiqueta del eje de las x. etiqueta del eje de las y. ylabel texto introducido con el rat6n. gtext texto introducido en coordenadas dadas. text
DSI~
Curvas planas
& S
-----
--
L-r-T-* A -
Captulo 5
Grficos 2D
5 . ' 1
Ventanas grficas
Al realizar un grfico con MATLAB se abre automticamente una ventana grfico (figure) (ver
figura 5.1). Tambin se puede crear una ventana grfica que no contenga ningn grfico con la orden:
f i g u r e Genera una ventana grfica. f i g u r e (n) Genera la ventana grfica nmero n; si ya existe, la activa. Para cerrar ventanas grficas se utilizan las rdenes:
m m
i
:, i.......:
...
Es posible borrar el contec!do de una ventana gffica sin cerrarla, utilizando la orden:
Cada grfico se realiza, por defecto, en una ventana grfica diferente. Para superponer varios dibujos en la misma ventana grfica se utilizan las rdenes:
m
r hold
off Cada gr6co se realiza en una ventana diferente. Es la opcin por defecto. off
Utilizando las opciones del men de la ventana grfica, una figura se puede copiar, imprimir o guardar en un fichero m. Este fichero contiene la informacin que permite reconstruir la figura cuando es ejecutado.
5.2
La orden p l o t
p l o t (x,y, S) Hace lo mismo que plot (x ,y) pero con las opciones especificadas en S. En S puede aparecer un smbolo de cada una de las columnas de la siguiente tabla, encerrados entre apstrofos:
1b
g
r c m y
k
.
o x
+
d v
punto crculo aspa cruz asterisco cuadrado rombo tringulo (abajo) tringulo (arriba) tiingulo (izquierda) tringulo (derecha) estrella 5 puntas estrella 6 puntas
1 -
--
Los smbolos de la primera columna especifican el color, los de la segunda la marca que se utiliza para seialar cada punto y los de la tercera el tipo de trazo que se emplea para unir los diferentes puntos. El orden en el que se escriben los smbolos dentro de S es indiferente. Es posible especificar menos de tres smboios en S. Por defecto, el color que se utiliza es el azul, el trazo continuo y no se utiliza marca para los puntos.
39
lot(xi,yl,Si,x2,y2,S2,~3,y3,S3, ...) Dibuja,enuna&maventanagrfica,los grficos definidos por las ternas (zi,yi, Si). Si no se especifican los parmetros S,, el dibujo se realiza con trazo continuo y un color distinto para cada grfica, utilizando los siete primeros colores de la primera columna de la tabla, en el orden sealado. Si se necesitan ms colores, se repiten cclicamente.
i-1
EDUH x=[i
EDU>> p l o t (x,y)
EDU>> figure(2)
m EDU>> f igure(3) EDU>>plot(x,y,'kp:> ) m EDU>> f i g u r e (4) m EDU>>p l o t (x,y) m EDU>> hold on a EDU>>p l o t ( x , y , m FDU>>holdoff m EDU,> close a l 1 m
EDU>> p l o t ( x , y , ' r * > )
I r * ' )
SuLdivisi6n d e una ventana grfica Una ventana grca se puede subdividir en varias ms pequeas con la orden: subplot (rn,n,p) Divide la ventana grfica en m x n subventanas distribuidas en m filas y n columnas y coloca el grfico actual en la ventana psima, contando de izquierda a derecha y de arriba abajo. Ejemplo 5.2 Repetir el ejemplo anterior realizando los grficos en una misma ventano grfica con tres subuentanas dispuestas verticalmente. Sol.:
EDU>>c l e a r , clc
EDUn plot(x,y)
If-j If-j
plot(x,y, Ir*>)
5.3
Para dibujar la grfica de una funcin de una variable y = f (z) en el intervalo [a,b] se siguen los siguientes pasos:
t Se genera un vector x = (a = z1,z2, ...,x, = b) mediante x=linspace(a,b,n) o bien x=a:h:b.
m m
EDU>>y-exp(-x.-2) .*sin(pi*x.-3) ;
i+-I
Ejemplo 5.4 Representar en una misma ventana grfica las funciones f ( z ) = e-z2, g ( ~ = ) e-522 en el intervalo [-2,2].
(a) Con trazo continuo. ( b ) La grfica de f con asteriscos mjos y la de g con cruces verdes.
Sol.:
E~'JU>> ciear, clc
EDu>>x=-2:0.1:2;
EDU>> y=exp(-x. -2) ;
y2=exp(-5*x. -2) ;
EDU>> p l o t ( x , y l , x , y 2 ) EDU>> f i g u r e ( 2 )
~~~>>~ot(x,~l,~r*~,x,y2,'g+~)
EDU>> close a l 1
Ejemplo 5.5 Representar en cuatm subventanas de una misma ventana orfica las orficns de las funciones fi(x) = senx, f 2 ( ~ = ) x + senx, f3(x) = 1x1, f4(x) = xsen($), en el intervalo [-10,10].
u .
Sol.: Se pueden escribir las rdenes en la ventana de comandos tal wmo se ha hecho en los ejemplos anteriores. Tambin se pueden escribir las rdenes necesarias en un fichero m, tal como se hace a continuacin: c l e a r , c l c , close a l 1 x=linspace(-10,10,1000) ; yl=sin(x) ; y2=x+sin(x) ; y+abs(x); y4=x.*sin(100./x) ; subplot (2,2, i ) , plot(x,Yi) subplot (2,2,2) plot(x,Y2) subplot(2,2,3), ~ l o t ( x , Y 3 ) subplot (2,2,4), p l o t ( x ~ y 4 ) pause, close Advertencia: Al dibujar la grca de funciones en las que aparecen races de nmeros negativos pueden presentarse dificultades. Por ejemplo, si para dibujar la grca de la funcin f (x) = ?fi. con x E [-1,1], escribimos EDu>>x=-:0.01:1;
EDU>> y=x.-(1/3) ;
EDU>> p l o t (x, y)
m m
EDU>> close
(t>l
se observa que el grfico obtenido no es el que cabria esperar. Esto es debido a que el programa no elige la raz real de fi para x < O. (Toma una de las races imaginarias y representa su parte real.) Para obtener la grfica correcta de esta funcin se puede hacer el dibujo por tramos:
EDu>> xl=(-1:O.Ol:O); x2=(0:0.01:1);
EDU>>yl=-((-x1) .-(1/3)); y212."(1/3);
1-1
EDU>>plot(xl,y1,x2,y2,'y')
EDU>> close
i-1
Jt>l
Dibuja la funcin en el intenalo de variacin de x
Otia orden para dibujar la grfica de una funcin es f p l o t , cuya sintaxis es:
e
*
3
fplot('funcibn', [xmin, m a r , ymin, ymaxl , S) Dibuja la funcin en el intervaio de variacin de x e y dados, con las opciones especificadas en S, En las rdenes anteriores, funcin puede ser una funcin predefinida, una funcindefinida por e1 usuario en un fichero m o una cadena de caracteres que d e h a una funcin.
Ejemplo 5.6 Grfica de la funcin f (x) = xsen(2) en el intervalo [-lo, 101. Dependiendo del resultado obtenido, hacer tanteos en los intervalos de variacin de x e y hasta obtener una grfica mejomda.
Sol.:
1
5.4
ylabel( 'texto'
t e x t (I,y, > t e x t o ' ) Sita el texto en el punto ( x , Y) del grfico. g t e x t ( ' t e x t o J ) Permite situar el texto en un punto seleccionado con el ratn en un grfico. (Solo se puede utilizar en grficos 2D.)
Ejemplo 5.7 Representar sobre los mismos ejes las grficos de las funciones y = h ( x ) e y = log(x) en el intervalo [O, 10). Poner etiquetas a los ejes, colocar el rtulo de cada funcin y dar ttulo a la figum.
Sol.: EDUn c l e a r , c l c I-] EDU>>x=linspace (aps ,10,100) ; EDU>> y=iog(x) ; y2=iog10 (x) ;
1(eps
para eviiar I ~ ( o ) )
mu>> plot(x,yi,x,y2)
EDU>>r l a b e l ( > E j e X J ) EDU>>ylabel('Eje Y ' )
j F J
Jr/
5.5
Manipulaciones geomtricas
Las siguientes rdenes permiten situar una malla sobre el grfico, manipular de diversos modos sus ejes y ampliar una parte de la figura.
g r i d on Dibuja una malta en un grfico 2D 3D. g r i d off Elimina la malla. g r i d Conmuta entre on y o f f . a x i s ( C d n xmax ymin ymaxl) Establece los valores mnimo y mximo para los ejes x e y en la figura actual. a x i s auto Toma m i n = min(x), xmaz = max(x) e y libre. Es la opcin por defecto.
q ejes en los valores actualm, d e tal forma que al situar axiscaxis) Fija la escaia de l otro grfico sobre los mismos ejes (con hold en on), la escala no cambie.
a x i s Devuelve un vector de cuatro coordenadas, con los valores de xmin, xmax, ymin, ymax del grfico actual. a x i s xy Sita el origen de coordenadas cartesianas en la parte inferior izquierda del grfico.
*
e
a x i s i j Sita el origen de coordenad:~cartesianas en la parte superior izquierda del gfico. a x i s square Convierte el rectnguio destinado a un gr6co en un cuadrado, con lo que se pierde la igualdad de escala en ambos ejes y por tanto, en general, las figuras se deforman. a x i s equai Obliga a usar el mismo factor de escala para ambos ejes. a x i s normal Elimina las opciones square y equal. a x i s off Elimina la malla y Ice ejes con sus etiquetas, manteniendo el ttulo del grfico y los textos situados en l con t e x t y g t e x t . a x i s on Coloca de nuevo las etiquetas, mi.
y rejillas de los ejes.
zoom off Desactiva el zoom. Es la opcin por defecto. zoom Conmuta entre on y of f .
El siguiente ejemplo sugiere un procedimiento grfico para determinar las coordenadas del punto de interseccin de las curvas y = senx, y = l n z utilizando algunas de las rdenes anteriores. Ejemplo 5.8 Dibujar las grficas de las funciones y = senx, y = l u z en el intervalo [-5,5]. Utilizar la orden grid pam estimar un intervalo en el que se encuentre el punto de interseccin. Con la orden axrs para ver con mayor claridad la parte de la figum en la que se encuentra el punto de interseccin. Haciendo uso del zoom compmbar que las coordenadas del punto de interseccin son (2.218,0.796).
44
Sol.: EDU>>x=-5:.1:5; EDU>> y=sin(x) ; EDU>> p l o t (x, y)
EDU>>hold on
m m m
EDU>>a=eps:O.l:S;
EDU>> b=log(a) ; EDU>> p l o t (a,b) EDU>> g r i d on
EDU>> zoom on
m m
I r (
EDU>> axis(CO,3,-2,21)
EDU>> c l o s e
It<l
5.6
La orden p l o t permite dibujar una curva y dada por stis ecuaciones paramtricas. Ejemplo 5.9 Representar la cuma
t E [O, 80j
EDU>>t=O:.01:80;
m m m
It>J
5.7
La orden p o l a r permite representar gr6cas de funciones dadas en coordenadas polares. Su sintaxis es: p o l a r ( a , r ) Representa la curva r = r(a) en coordenadas polares.
'a
p o l a r ( a , r , S ) Representa la curva r = r(a) en coordenadas polares con el tipo dc trazo y color dado por S, cuyos posibles valores ya se han especificado al describir la ordcri p l o t .
P d
is
k 3
bo
EDU>> c l e a r , c l c
EDU>>r=sin(2*a) .*cos(2*a) ;
EDU>>polar(a,r,> r > )
EDUN ciose
EDU>> title(JCARDIOIDE')
5.8
MATLAB dispone de los siguientes comandos que facilitan la generacin de grficos de barras e
hitogramas de becuencias:
e
stom(x,y) Dibuja el conjunto de puxitm ( z i , ~ i y ) une cada punto (crculo vaco) con el eje de abscisas mediante una lnea vertical. s t e m ( x , y , > f i l l e d l ) Hace lo mismo pero representa los puntos con crculos ilenos.
bar(y) Dibuja el grfico de barras relativo al vector y.
bar(x,y) Dibuja el grco de barras relativo al vector y cuyos elementos se especifican a travs del vector x. s t a i r s c y ) Dibuja el grfico escalonado relativo al vector y. Dibuja el grco escalonado relativo al vector y cuyos elementos son especificados a travs del vector x.
r s t a i r s (x, y)
hist (v) Dibuja el histdgrama relativo al vector u utilizando 10 rectngulos verticales de igual base.
h i s t (v,n) Dibuja el histograma relativo al vector v utilizando n rectngulos verticales de igual base. h i s t ( v , x ) Dibuja el histograma relativo al vector v utilizando rectngulos verticales cuyas bases miden lo especificado en los elementos del vector x.
..-
EDU>>x=C-l,O,2,5,6,71
mu>> y=C2,-3,3,7,4,51
EDU>>stem(x,y, ' f i l l e d ' ) EDU>>bar(y) EDU>>s t a i r s ( y ) EDU>>v-randn(1.5000) ; EDU>>x=-3.5:0.1:3.5; EDU>>h i s t (v,x) EDU>>close
1+11]
m m
5.9
Polgonos
Para dibujar un polgono se utiliza la orden f i l l : f i l l ( x , y , C ) Dibuja el polgono de vrtices (xi, yl), (x2, yz), . . . , (xnryn).x e y son los vectore~ x = (xl, 22,. . . ,S,), y = (yl, y2,. ..,y,). El color de relleno se especifica con el paimetro C, que puede ser un carcter de la tabla de la seccin 5.2, o un vector tr g bl en el que se especifican las cantidades de rojo, verde y azul mediante nmeros entre O y 1'. Los argumentos x e y pueden ser matrices, en cuyo caso se representa un poigono par cada par de columnas correspondientes.
e f ill ( x l , y 1,Ci ,x2,y2 ,C2,
. . .)
teruas (zi, yi,C i ) . Ejemplo 5.12 Dibujar el rectngulo de vrfices (0,0), (2,0), (2, l), ( 0 , l ) de color rojo y el rzctngulo de vrtices (0, l), (2, l), (2,2), (0,2) de color aguamarina. (El vector Cr g b l que define este color es [&, 1, %l.) Sol.: E n un fichero m se escribe: c l e a r , c l c , close a l 1 xl=CO 2 2 01; yi=CO O 1 11; x2= CO 2- 2 O] ; y2=[1 1 2 21; fill(~l,~ 'rJ l , ,x2,y2, C1/127 1 221/255]) a x i s square, pause, c l o s e Ejemplo 5.13 Dibujar un pentgono regular de color verde. Sol.: E n un fichero m Se escribe: c l e a r , c l c , close a l 1
'Para ms informacin sobre el color, ver el ap6ndice B.