guia rapida de matlab (comandos basicos, graficacion y programacion)

47
Gu´ ıa R´ apida de Matlab ´ Oscar Angulo, Eduardo Cuesta, C ´ esar Guti ´ errez y Mar ´ ıa del Carmen Mart ´ ınez diciembre de 2001

Upload: moronesom

Post on 26-May-2015

69.356 views

Category:

Education


0 download

TRANSCRIPT

Guıa Rapida de Matlab

Oscar Angulo, Eduardo Cuesta,Cesar Gutierrez y Marıa del Carmen Martınez

diciembre de 2001

Prologo

Este libro inicia una serie de guıas dedicadas a MATLAB.

El objetivo de esta guıa es servir de apoyo para el manejo de MATLAB en las asignaturas en las que se emplea el citado

software y en las que las limitaciones de tiempo no permiten una dedicacion muy exhaustiva a su explicacion. Hemos

pretendido mostrar en esta guıa los comandos y estructuras basicas de MATLAB de una manera clara y concisa con

algunos ejemplos que hemos considerado interesantes. Pretendemos ası mismo que esta guıa sea una guıa viva que siga

evolucionando con el tiempo, como lo ha hecho hasta ahora, gracias a la experiencia en el uso docente de MATLAB y

gracias a las sugerencias de companeros y alumnos a los cuales les queremos mostrar nuestro agradecimiento.

Valladolid, diciembre de 2001

Los Autores

Guıa Rapida de Matlabdvips . 1

ma t

.

No esta permitida la reproduccion total o parcial de esta guıa, ni su tratamiento informatico, ni la transmision de

ninguna forma o por cualquier medio, ya sea electronico, mecanico, por fotocopia, por registro u otros metodos, ni

su prestamo, alquiler o cualquier otra forma de cesion de uso del ejemplar, sin el permiso previo y por escrito de los

titulares del Copyright.

Angulo Torga, Oscar; Cuesta Montero, Eduardo; Gutierrez Vaquero, Cesar; Martınez Martınez, Marıa del Carmen:

Profesores del Departamento de Matematica Aplicada a la Tecnica; Valladolid, 2001.

UNIVERSIDAD DE VALLADOLID. INSTITUTO DE INVESTIGACION DE CIENCIAS DE LA EDUCACION.

ISBN: 84-

Imprime: Servicio Reprografıa COPIPAUMA

Guıa Rapida de Matlabdvips . 2

Contenidos

1 Introduccion a MATLAB 41.1 Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Iniciando y finalizando una sesion con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 El entorno grafico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4 Entorno grafico de MATLAB para Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Breve Introduccion a la Programacion en MATLAB 72.1 Principios con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.1.1 Entrada y salida en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.2 Aritmetica elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.3 Diferentes formatos para los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.5 Lectura y escritura de datos (Entrada/salida de datos) . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.5.1 Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.5.2 Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.6 Programacion modular: Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.7 Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Graficos con MATLAB 203.1 Graficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1.1 El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.1.2 Opciones del comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1.3 Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.2 Graficos con numeros complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.3 Graficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.4 Controlando los graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.5 Dibujando curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.6 Graficos en 3-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.7 Control del color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.8 Copia de la ventana grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Guıa Rapida de Matlabdvips . 3

Capıtulo 1

Introduccion a MATLAB

1.1 Comentarios previos

Comencemos destacando que la filosofıa del entorno MATLAB no es la de otros paquetes de matematicas usuales,

tales como Derive, Maple o Mathematica.

Su filosofıa se asemeja mas a la de un lenguaje de programacion que al de un paquete estandar de matematicas

pues, aunque podemos ejecutar desde la linea de comandos mediante los nombres de dichos operaciones como en los

paquetes mencionados, lo habitual con MATLAB es crear un fichero de texto externo que contenga la secuencia de

comandos que se desea ejecutar y llamar a este “programa” desde MATLAB.

Algunas de las ventajas e inconvenientes de MATLAB son:

1) Ventajas que el entorno MATLAB tiene frente a un lenguaje de programacion:

(a) No hay que definir el tipo de las variables que se van a utilizar, ni el tamano de las mismas.

(b) No hay que compilar los programas, como ocurre en los entornos de programacion.

(c) Se pueden utilizar extensısimas librerıas de funciones ya definidas.

(d) Presenta un manejo muy practico de vectores y matrices.

2) Frente a un lenguaje de programacion no presenta incovenientes destacables. Ademas las sentencias y las

estructuras que se manejan son muy similares a las que se usan en el entorno de C.

Algunos de los inconvenientes frente a otros paquetes informaticos son, entre otros:

(a) Al no estar pensado para el trabajo en linea de comandos no presenta ningun menu de acceso rapido a

procedimientos de uso frecuente (como el que tiene por ejemplo Derive).

(b) No posee una librerıa de calculo simbolico propio por lo que recurre a comandos de Maple. No obstante,

este no es el fin ultimo de este programa y hay otros en el mercado mas optimizados para este tipo de

calculos.

1.2 Iniciando y finalizando una sesion con MATLAB

MATLAB se arranca pulsando con el raton en el icono correspondiente, e inmediatamente aparece la pantalla de la

figura ??.

Cualquier comando que se escribe tras el cursor de MATLAB sera procesado cuando se presione la tecla [ENTER].

Por ejemplo, el comando que hay que ejecutar para salir de MATLAB es quit:

>> quit [ENTER]

Guıa Rapida de Matlabdvips . 4

1.3 El entorno grafico de MATLAB bajo Windows ma t

Si se necesita detener la ejecucion de un programa o de un comando MATLAB antes de su finalizacion normal es

necesario presionar simultaneamente la tecla [CTRL] y la tecla [C]. MATLAB detiene ası cualquier comando o programa

que estuviera ejecutandose en ese momento y devuelve el cursor a su estado original quedando preparado para ejecutar

el siguiente comando.

1.3 El entorno grafico de MATLAB bajo Windows

La ventana de trabajo de MATLAB es una clasica ventana de Windows en la que aparece un menu de opciones y unos

cuantos botones de acceso rapido.

El menu de opciones se compone de cinco submenus File, Edit , View, Window y Help, cada uno de ellos con

las siguientes opciones

• Menu File: Con esta opcion se puede, entre otras

cosas crear un nuevo elemento (bien un fichero

M-File, una figura o un modelo de Simulink);

abrir una nueva sesion, o un fichero M-File; gra-

bar, leer o mostrar el campo de trabajo (variables

utilizadas); seleccionar el directorio de trabajo;

seleccionar diversas preferencias, que van desde el

color de la pantalla hasta el tipo de datos con los

que trabaja por defecto; imprimir el documento

activo, una seleccion o elegir las preferencias de

impresion; los ultimos archivos utilizados; y aban-

donar el programa.

• Menu Edit : Posee las opciones de un edi-

tor clasico de textos para Windows, seleccionar

un texto (con los cursores o el raton), cortar

un texto, copiar o pegar lo que tengamos se-

leccionado en el portapapeles, deshacer la ultima

accion, seleccionar todo el documento o bien bor-

rar las variables de la sesion.

Guıa Rapida de Matlabdvips . 5

1.4 Entorno grafico de MATLAB para Linux ma t

• Menu Help: Muestra todas las ayudas que nos

ofrece MATLAB y sobre las que nos extendere-

mos algo mas en la ultima parte de esta intro-

duccion.

Diversas operaciones se pueden realizar a traves de los botones de acceso rapido, como abrir una nueva sesion,

imprimir un fichero, obtener ayuda, seleccionar un nuevo directorio de trabajo o ver el numero de variables que

estamos utilizando en este momento.

1.4 Entorno grafico de MATLAB para Linux

Senalemos para los usuarios de Linux que algunas versiones antiguas de MATLAB no incluyen un editor propio como

el descrito para Windows por lo que utilizaremos cualquiera de los que Linux tiene disponibles (joe, vi, kedit,...). En

este caso, la ventana de trabajo tendra una presentacion similar a la siguiente:

Destaquemos por ultimo que tanto bajo Windows como bajo Linux se puede utilizar cualquier editor que permita

grabar los ficheros en formato ASCII para elaborar nuestros programas.

Guıa Rapida de Matlabdvips . 6

Capıtulo 2

Breve Introduccion a la Programacion

en MATLAB

2.1 Principios con MATLAB

2.1.1 Entrada y salida en MATLAB

Al arrancar MATLAB aparecera el sımbolo del sistema (ademas de algunos mensajes)

>>

El sımbolo >> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de

MATLAB teclearemos:

>> quit [ENTER]

2.1.2 Aritmetica elemental

Comenzaremos viendo con varios ejemplos que las operaciones aritmeticas habituales se realizan del modo esperado

con los operadores

suma: +, resta: −, producto: ∗, division: /, y exponenciancion: ˆ.

Escribamos en linea de comandos lo siguiente:

>> 1+2 [ENTER] Suma de dos enteros.

ans = 3

>> sin(pi/2) [ENTER] Seno de π/2.

ans = 1

>> 2.45*3.1415 [ENTER] Producto de dos numeros reales.

ans = 7.6967

>> 2,34*3 [ENTER] Ponemos una coma en lugar de un punto

ans = 2

ans = 102 ¿Que ha hecho MATLAB?

>> 2E-2*3E8 [ENTER] Uso del exponente.

Guıa Rapida de Matlabdvips . 7

2.1 Principios con MATLAB ma t

ans = 6000000

>> log(10) [ENTER] Logaritmo neperiano.

ans = 2.3026

>> (3+2^3*i)+(-1+5*i) [ENTER] Suma de complejos.

ans = 2.0000+13.0000i

>> (1-2*i)*(2+2*i) [ENTER] Producto de complejos.

ans = 6.0000-2.0000i

Existen otras muchas funciones disponibles en MATLAB y que son analogas a las que maneja Derive, Maple u

otros; ası por ejemplo:

arco seno: asin(x), arco tangente: atan(x), raız cuadrada: sqrt(x), logaritmo en base 10: log10(x), . . .

Si no queremos que aparezca por pantalla el resultado de una operacion tendremos que poner al final de la linea

punto y coma ”;” .

>> tan(pi/4) [ENTER] Tangente de π/4.

ans = 1.0000

>> tan(pi/4); [ENTER] La misma operacion pero sin salida por pantalla.

>>

2.1.3 Diferentes formatos para los datos

Existen diferentes formatos de salida para los datos en MATLAB. Veamos algunos ejemplos.

>> d=1/33

d = 0.0303

>> format long, d [ENTER] Formato largo.

d = 0.03030303030303

>> format short e, d [ENTER] Formato corto con mantisa y exponente.

d = 3.0303e-002

>> format long e, d [ENTER] Formato largo con mantisa y exponente.

d = 3.030303030303030e-002

>> format rat, d [ENTER] Formato racional.

d = 1/33

Se puede realizar algunas ”operaciones” con alguna indeterminacion.

>> 1/0 [ENTER] Division por cero.

ans = Inf

>> 5*Inf [ENTER] Multiplicacion por infinito.

ans = Inf

Para la primera de ellas nos avisa que divide por cero.

Guıa Rapida de Matlabdvips . 8

2.2 Asignaciones ma t

2.2 Asignaciones

Uno de los elementos fundamentales en la programacion son la variables:

Variable: Objeto que puede tomar el mismo valor a lo largo de todo el programa o bien puede ir cambiando al

ejecutar diferentes acciones.

El nombre de cada variable puede ser el que el programador quiera siempre que no coincida con alguna palabra

clave de MATLAB, en cuyo caso nos informara mediante un mensaje de error. De todos modos es recomendable que

el nombre que elijamos para cada variable sea alusivo a su contenido o a su aplicacion.

Destaquemos un hecho importante: MATLAB distingue entre mayusculas y minusculas por lo que x y X no seran

las mismas variables ni lo seran tampoco Nodos, nodos y NODOS.

Para realizar la asignacion de valores a las variables en MATLAB no hace falta declarar el tipo de dato que se va a

asignar (entero, real, complejo o caracter) ni el tamano del mismo (escalar, vector o matriz del tamano que sea).

Seudocodigo: La asignacion de un valor a a una variable llamada VARIABLE escribiremos

VARIABLE ←− a

donde a puede ser una constante, el valor de otra variable o el valor de una expresion aritmetica.

1) Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden

realizar.

>> a=2 [ENTER] Asignacion del valor 2 a la variable a.

a = 2

>> x=a [ENTER] Asignacion del valor 2 a la variable x.

x = 2

>> x=x+2 [ENTER] Asignacion del valor 4 a la variable x.

x = 4

>> b=1:1:10 [ENTER] Asignamos a b el vector de datos [1,2,3,4,...,10]

b = 1 2 3 4 5 6 7 8 9 10

>> a+b [ENTER] Sumamos un escalar y un vector.

ans = 3 4 5 6 7 8 9 10 11 12 ¿Que ha hecho MATLAB?

>> a*b [ENTER] Producto de un vector y un escalar.

ans = 2 4 6 8 10 12 14 16 18 20

2) Si sumamos vectores de tamano diferente tenemos lo siguiente.

>> c=1:5:25 [ENTER] Declaramos el vector c.

c = 1 6 11 16 21

>> b+c [ENTER] Sumamos los vectores b y c.

??? Error using ==> +Matrix dimensions must be agree

3) Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente.

>> b=0:2:20 [ENTER] Declaramos el vector b.

b = 0 2 4 6 8 10 12 14 16 18 20

>> c=0:1:10 [ENTER] Declaramos el vector c.

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

>> b.*c [ENTER] Producto de dos vectores componente a componente.

ans = 0 2 8 18 ...200

Guıa Rapida de Matlabdvips . 9

2.2 Asignaciones ma t

>> b’*c [ENTER] Matriz resultado de multiplicar b traspuesto por c (ver

pantalla)

>> b*c’ [ENTER] Producto de b por c traspuesto (producto interior)

ans = 770

4) No solo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un

vector o el seno de un vector, etc... obteniendo el logaritmo o el seno de cada una de sus componentes.

>> b=1:10; [ENTER] Declaramos el vector b.

>> log(b) [ENTER] Logartimo del vector b.

ans = Columns 1 through 7 Siete primeras columnas.

0 0.6931 ...1.9459

Columns 8 through 10 Tres ultimas columnas.

2.0794 2.1972 2.3026

>> sin(b) [ENTER] Seno del vector b.

ans = Columns 1 through 7 Siete primeras columnas.

0.8415 0.9093 ...0.6570

Columns 8 through 10 Tres ultimas columnas.

0.98954 0.4121 -0.5440

>> c=1:1:5 [ENTER]

c = 1 2 3 4 5

>> 2.^c [ENTER] 2 elevado a las potencias que determina c.

ans = 2 4 8 16 32

>> c.^ 2 [ENTER] Las componentes de c elevadas al cuadrado.

ans = 1 4 9 16 25

Un punto delante de los operadores .*, .^ y ./ indica que las operaciones se realizan componente a componente

en los vectores o las matrices.

5) En relacion a la aritmetica matricial mostramos algunas de las funciones mas habituales.

>> A=[1 2 3;4 5 6;7 8 9] [ENTER] Definicion de la matriz A.

A = 1 2 3

4 5 6

7 8 9

>> A(2,2) [ENTER] Elemento (2,2) de la matriz A.

ans = 5

>> A(:,3) [ENTER] Muestra la tercera columna de la matriz A.

ans = 3

6

9

>> size(A) [ENTER] Tama~no de la matriz A.

ans = 3 3

>> B=[1 2 1;2 1 2;1 2 1] [ENTER]

B = 1 2 1

2 1 2

1 2 1

>> A*B [ENTER] Producto matricial habitual.

Guıa Rapida de Matlabdvips . 10

2.3 Ficheros *.m ma t

ans = 8 10 8

20 25 20

32 40 32

Un comando de uso frecuente es who que nos permite conocer el numero y nombre de las variables usadas a lo

largo del programa o de la sesion. Su formato es:

>> who [ENTER]

Your variables are:A u vfil x

ans vcol w y

donde las variables corresponden a otra ejecucion del programa.

El comando whos nos muestra, ademas del nombre de las variables, informacion adicional de cada variable, distin-

guiendo si es vector o escalar.

>> whos [ENTER]Name Size Bytes Class

A 3x4 96 double array

ans 4x1 32 double array

u 1x1 8 double array

vcol 4x1 32 double array

vfil 1x4 32 double array

w 1x1 8 double array

x 1x1 8 double array

y 1x1 8 double array

Grand total is 28 elements usign 224 bytes

Debemos tener en cuenta que MATLAB en cada sesion mantiene en memoria todas las variables utilizadas hasta

ese momento y que unicamente el comando clear hace que elimine el valor de todas las variables.

>> clear [ENTER]

Si ahora tecleamos who no se produce ninguna salida.

2.3 Ficheros *.m

Como ya hemos dicho la filosofıa de MATLAB se asemeja mas a la de un lenguaje de programacion que a la de un

software matematico de resolucion de problemas simbolicos. En concreto, permite ejecutar una secuencia de comandos

escritos en un fichero ASCII sin mas que hacer una llamada al mismo, como si se tratase de un programa en lenguaje

C, Fortran u otros, pero sin necesidad de ”linkar” y ”compilar” dicho fichero.

Estos ficheros se pueden editar con cualquier editor o procesador de textos, como el que incluye el propio MATLAB,

el usual Word (siempre que almacenemos el fichero sin formato), edit (de MSDOS), kedit, joe, vi,. . . , siempre que

permita guardalo en formato texto.

Un sencillo ejemplo nos pertimitira aclarar estas ideas.

1) En primer lugar abrimos un fichero con el editor elegido.

2) Tecleamos lo siguiente:

numerador=12^3 % Asignamos el valor 12^3 a la variable numerador.

denominador=3.2E-3 % Asignamos el valor 3.2E-3 a la variable denominador.

x = numerador/denominador % Calculamos la division de la anteriores variables.

Guıa Rapida de Matlabdvips . 11

2.4 Estructuras de control ma t

3) Grabamos el fichero en el directorio en el que hemos arrancado MATLAB con el nombre “prueba1.m”. Es

un error frecuente grabar el fichero en un directorio diferente al que tenemos fijado para MATLAB. Si no se

hubiese grabado en ese directorio podemos cambiar desde MATLAB el directorio de trabajo haciendo uso de los

comandos del sistema (para LINUX: ls, cd, mv,. . . para WINDOWS: dir, cd, move,. . . )

4) Volvemos a la ventana de MATLAB y tecleamos

>> prueba1

numerador = 1728

denominador = 0.0032

x = 540000

En lo sucesivo esta sera la forma de trabajar con MATLAB: escribir en un fichero la secuencia de comandos que

vamos a ejecutar. Con este planteamiento elaboraremos programas (secuencia de comandos) que nos permitan resolver

problemas con un cierto grado de complejidad.

2.4 Estructuras de control

Las estructuras de control permiten organizar adecuadamente las acciones a realizar por el procesador. Estas son de

tres tipos:

• Secuenciacion: Es la estructura de control mas sencilla y facil de utilizar y

consiste en la enumeracion consecutiva de acciones a realizar.

No existe seudocodigo explıcito para esta estructura aparte de

la propia escritura de las acciones

• Seleccion: Esta estructura actua sobre una proposicion o condicion boo-

leana con dos posibles valores mutuamente excluyentes: Ver-

dadero o Falso

Si C es la condicion y A y B son las acciones o secuencia de acciones

SEUDOCODIGO:

si C entonces

accion A

sino

accion B

finsi

CODIFICACION EN MATLAB:

if C

accion A

else

accion B

end

Como ejemplo escribamos el siguiente fichero

if n>2 % Si el valor de n es menor que 2 haz:

disp(’Has cometido un error’) % Muestra un mensaje por pantalla.

end

if n>0 & n<2 % Si n>0 Y n<2 entonces haz...

disp(’Has acertado’)

end

if n<-2 | n>10 % Si n<-2 O n>10 entonces haz...

Guıa Rapida de Matlabdvips . 12

2.4 Estructuras de control ma t

disp(’Es otra prueba’)

end

Observemos que la opcion else no es necesario utilizarla. Veamos otro ejemplo con la opcion else.

if n>0 & n<2 % Si n>0 y n<2 entonces haz...

disp(’Estas en el intervalo’)

else % en caso contrario haz...

disp(’No estas en el intervalo’)

end

Las estructuras de seleccion se pueden anidar de diferentes formas. Mostramos una de esas posibilidades.

SEUDOCODIGO:

si C1 entonces

accion A1

sino

si C2

accion A2

finsi

accion A3

finsi

CODIFICACION EN MATLAB:

if C1

accion A1

elseif C2

accion A2

else

accion A3

end

Como ejemplo podemos escribir el siguiente fichero.

if abs(x)<2 % Si el valor absoluto de x es menor que 2 haz

disp(’La variable x esta acotada’)

elseif x>-3 % Si no es as\’{\i} y si x>-3 haz

disp(’La variable no esta acotada’)

end

Existen otras estructuras de seleccion con fines mas especıficos como es la estructura switch que se puede

consultar en cualquier manual de MATLAB.

• Iterativa. La estructura iterativa responde al caso de las acciones consis-

tentes en la repeticion de una o de varias subacciones

Existen varios tipos de estructuras iterativas que se pueden englobar en una sola pero nosotros vamos a presentar

los casos particulares mas habituales:

1) Sin numero predeterminado de iteraciones y con la condicion al principio. Si C es la condicion y A es la

accion o secuencia de acciones:

SEUDOCODIGO:

mientras C hacer

accion A

finmientras

CODIFICACION EN MATLAB:

while C

accion A

end

Guıa Rapida de Matlabdvips . 13

2.4 Estructuras de control ma t

Proponemos el siguiente ejemplo

n=1;

while prod(1:n)<1e100

n=n+1;

disp(’Nos llegamos en’),n

end

2) Sin numero predeterminado de iteraciones y con la condicion al final. Si C es la condicion y A es la accion

o secuencia de acciones:

SEUDOCODIGO:

hacer

accion A

mientras C

CODIFICACION EN MATLAB:

while 1

accion A

if C,break, end

end

3) Con numero predeterminado de iteraciones. Esta estructura repite una accion o una secuencia de ellas un

numero fijo de veces que viene determinado por una variable contador que toma valores entre un valor

inicial vi y un valor final vf, cuando la variable contador se incrementa un valor paso que puede ser

negativo.

Si A es una accion o secuencia de acciones:

SEUDOCODIGO:

para contador=vi hasta vf incr. paso

hacer

accion A

finpara

CODIFICACION EN MATLAB:

for contador=vi,vf,paso

accion A

end

Como ejemplo editemos el fichero prueba.m con los siguientes comandos

for n=1:1:10 % Cuenta desde 1 hasta 10 de 1 en 1.

y(n)=n^2; % Declara un vector cuyas componentes son de la forma n^2.

x(n)=2*y(n); % Declara un vector cuyas componentes son de la forma 2*y_n.

end % Fin del bucle.

y,x % Muestra por pantalla los vectores declarados.

Ejecutamos en MATLAB el fichero prueba y obtenemos lo siguiente

>> prueba [ENTER]

y = 1 4 9 16...100

x = 2 8 18...200

A diferencia de lo que ocurre con algunos lenguajes de programacion y con la mayor parte del software

matematico, la variable contador puede recorrer los valores que queramos como se muestra en el siguiente

ejemplo (modificamos el fichero anterior).

for n=[1 3 7 2 5.5 3] % Recorre los valores 1 3 7 2 5.5 y 3 de n.

x(n)=2*n; % Declara un vector .

end % Fin del bucle.

Guıa Rapida de Matlabdvips . 14

2.5 Lectura y escritura de datos (Entrada/salida de datos) ma t

x % Muestra por pantalla los vectores declarados.

La ejecucion del fichero prueba muestra

>> prueba [ENTER]

x = 2 4 6 0 0 11 14

>> prueba [ENTER]

Destaquemos que el vector muestra los valores ordenados desde la primera componente hasta la ultima que

contiene la variable n (contador), en el caso de encontrarse ındices no enteros redondea (de todos modos

se avisa con un warning) y en el caso de faltar ındices estos se rellenan con valores nulos.

2.5 Lectura y escritura de datos (Entrada/salida de datos)

2.5.1 Escritura de datos

La escritura de datos nos permite enviar el valor de una o mas variables externamente, bien a la pantalla del ordenador,

bien a un fichero.

seudocodigo. Si el nombre de la variable es VARIABLE la accion escritura se escribe como

escribe VARIABLE

1) Para que el valor de VARIABLE aparezca por pantalla bastara teclear el nombre de la variable

>> VARIABLE [ENTER]

2) Para escribir el valor de una variable en un fichero con un formato establecido utilizaremos los siguientes comandos:

• Abrimos el fichero en el que vamos a guardar los datos:

>> fid=fopen(’nombre-fichero’,permisos)

donde

– fid es el identificador que Matlab utiliza para reconocer el fichero.

– nombre-fichero es el nombre con el que aparecera en nuestro directorio

– permiso es un cadena que indica la operacion a realizar con el fichero,

’r’ −→ Lectura

’w’ −→ Escritura (se crea si es necesario)

’a’ −→ Anadir a un fichero ya existente (se crea si es necesario)

’r+’ −→ Lectura y escritura

’w+’ −→ Trunca el fichero o lo crea para lectura o escritura

’a+’ −→ Lectura y anadir a un fichero ya existente (se crea si es necesario)

• Escribimos el contenido de la variable o variables datos con el formato que indiquemos en format con el

siguiente comando

>> fprintf(fid,format,datos)

• Cerramos el fichero abierto con el comando

>> fclose(fid)

En caso de que se produzca algun error al cerrar el fichero MATLAB devolvera el valor −1 y si no es ası

devolvera 0.

Guıa Rapida de Matlabdvips . 15

2.5 Lectura y escritura de datos (Entrada/salida de datos) ma t

Editemos un fichero que haga uso de los anteriores comandos

t=0:1:10 % Crea un vector con los datos 0,1,2,3,...,10.

y=t.^2 % Crea un vector con los datos 0,1,4,9,...,100.

fid=fopen(’parabola.dat’,’w’) % Crea un puntero a un fichero llamado

% parabola.dat para escribir en el (w)

x=[t;y]; % Crea la matriz de datos que vamos a escribir en

% el fichero.

fprintf(fid,’%1.1f % 2.6e’,x) % Escribe en el fichero los datos con el

% siguiente formato:

% La primera columna [un entero].[un decimal]

% La segunda [dos enteros].[6 decimales en

% modo exponencial]

fclose(fid) % Manda los datos al fichero fid

En los manuales se pueden encontrar mas detalles sobre el formato de los datos.

Cuando no sea necesario manejar directamente un fichero con los datos sino que unicamente necesitamos guardar

los datos para otra su uso en otra sesion, podemos utilizar el comando save. El formato se muestra en el siguiente

ejemplo:

>> a=[1 2 3;4 5 6]; Crea la variable a

>> b=2:2:10; Crea la variable b

>> save datos1 Guarda el valor de todas las variables en el fichero datos1.mat

>> save datos2 a Guarda en el fichero datos2 la variable a

>> clear eliminamos todas las variables

>> whos No hay variables declaradas

>> load datos2 El comando load lee el fichero de datos datos2.mat

>> a

a = 1 2 3

4 5 6

>> clear

>> load datos1

>> a,b

a = 1 2 3

4 5 6

b = 2 4 6 8 10

Otras opciones como el comando diary se pueden consultar en los manuales.

Guıa Rapida de Matlabdvips . 16

2.5 Lectura y escritura de datos (Entrada/salida de datos) ma t

2.5.2 Lectura de datos

La lectura de datos nos permite asignar un valor a una o a mas variables mediante acciones externas. bien desde el

teclado del ordenador o bien desde un fichero.

seudocodigo. Si el nombre de la variable es VARIABLE la accion lectura se escribe como

lee VARIABLE

1) El comando de MATLAB para la lectura de un dato desde el teclado es input que se utiliza como aparece en

el ejemplo

>> z=input(’El valor de la variable z es:\n’) [ENTER]

El valor de la variable z es:

12

z = 12

2) Para leer el valor de una variable en un fichero con un formato establecido se puede utilizar el comando load.

Mostremos el siguiente ejemplo: Dado el fichero data.dat

1 2 3

4 5 6

7 8 9

podemos teclear

>> load data.mat [ENTER] Carga los datos del fichero data.dat en la variable

data

>> data

data = 1 2 3

4 5 6

7 8 9

3) Otra opcion para leer el valor de una variable en un fichero con un formato establecido hace uso de los comandos

descritos para la apertura y el cierre de un fichero, y de otro para la lectura propiamente dicha, en concreto:

>> A=fscanf(fid,format,tama~no)

donde

• fid es el identificador del fichero.

• format es un cadena con las mismas opciones que fprintf.

• tama~no es un argumento optativo que permite limitar el numero de datos leidos. El valor que puede tomar

este argumento es uno de los siguientes

– N: Lee un vector de hasta N componentes.

– inf: Lee datos hasta el final del fichero.

– [N,M]: Lee una matriz de tamano N x M por columnas (M puede se inf).

En el siguiente ejemplo se muestra como se puede leer el fichero creado en el ejemplo anterior

Guıa Rapida de Matlabdvips . 17

2.6 Programacion modular: Funciones ma t

fid=fopen(’parabola.dat’,’r’) % Crea un puntero a un fichero llamado

% parabola.dat para leer de \’el (r)

z=fscanf(fid,’%1.1f %2.6e’,11) % Lee del fichero los datos con el

% siguiente formato:

% La primera columna [un entero].[un decimal]

% La segunda [dos enteros].[6 decimales en

% modo exponencial]

fclose(fid) % Cierra el fichero identificado por fid

2.6 Programacion modular: Funciones

En programacion, al realizar una operacion, aparecen con frecuencia los siguientes problemas:

• La tarea debe realizarse varias veces.

• Dicha tarea es realizada en varios programas.

• Aparece en el contexto de un programa muy extenso que conviene simplificar.

Para resolver este tipo de problemas se usan lo que se llaman funciones que no son mas que programas que son utilzados

por otros programas.

Cualquier programa puede considerarse como una funcion subceptible de ser usado por otro programa

La posibilidad de llamar a estas funciones tantas veces como sea necesario nos permite no tener que escribir el

programa cada vez que lo necesitemos. Por otra parte, las funciones nos permiten descomponer el programa en

subprogramas mas sencillos.

En relacion con el modo de definir funciones haremos las siguientes observaciones:

1) Se guarda como un fichero funcion.m cuyo nombre ha de coincidir con el de la funcion.

2) Ha de estar encabezado por la linea

function[salida1,...,salidaN]=nombre(entrada1,...,entradaM)

seguido por los comandos del programa.

3) La funcion termina su tarea con el ultimo comando del programa, sin necesidad de ningun comando especıfico,

aunque esta accion es posible con el comando return.

4) Desde la propia funcion se puede hacer llamadas a otras funciones o incluso a ella misma (lo que se conoce como

recursividad).

5) Las variables usadas en cada funcion toman un valor local. Por tanto, una variable con el mismo nombre en una

funcion y en el programa principal mantiene el valor que tome en cada uno de los contextos.

Escribimos un sencillo ejemplo que hace llamada a una funcion llamada factorial

m=input(’Da el numero de sumandos \n’);

x=0;

for n=1:1:m

x=x+1/factorial(n);

end

x

Guıa Rapida de Matlabdvips . 18

2.7 Otras Observaciones ma t

donde la funcion factorial viene definida por

function[k]=factorial(n)

k=1;

for m=2:1:n

k=k*m;

end

2.7 Otras Observaciones

Para terminar esta introduccion anadimos algunas observaciones mas.

1) Los sımbolos “,” “;” “:” sirven para: separar operaciones dentro de un lınea (“,”); para delimitar campos dentro

de un comando (“:”) o para evitar que el resultado de un comando no salga por pantalla (“;”).

>> 2+3; 3+4 [ENTER]

ans = 7

Los puntos “...” se usaran para continuar un comando cuando no nos quepa completo en un sola lınea.

2) Con las flechas ↑ y ↓ recuperamos las operaciones realizadas anteriormente.

3) Para obtener ayuda sobre MATLAB debemos de teclear cualquiera de los comandos

>> help [ENTER]

>> helpwin [ENTER] Aparece una ventana de ayuda en Windows.

4) El sımbolo “%” indica a MATLAB que no tenga en cuenta lo que se encuentra a continuacion en la misma lınea

(comentario). Esto vendra bien cuando queremos explicar los programas que hagamos.

5) Desde la lınea de comandos de MATLAB podemos ejecutar comandos propios del sistema (MSDOS, Linux,...)

como por ejemplo

>> dir

>> cd directorio

>> del fichero

Guıa Rapida de Matlabdvips . 19

Capıtulo 3

Graficos con MATLAB

3.1 Graficos de dos dimensiones

El usuario de MATLAB puede dibujar facilmente un conjunto de pares de puntos, y una forma de hacerlo es mediante

el comando plot.

3.1.1 El comando plot

El uso del comando plot es el siguiente

>> plot(argumentos)

y los argumentos que toma pueden ser

Argumentos Explicacion

plot(x) x ∈ IRnDibuja los pares de puntos (i, xi), 1 ≤ i ≤ n, unidos por segmentos.

plot(x,y) x, y ∈ IRnDibuja los pares de puntos (xi, yi), 1 ≤ i ≤ m, unidos por segmentos.

plot(z) z ∈ Cn Dibuja en el plano complejo los pares de puntos (<(zi),=(zi)), 1 ≤i ≤ n , unidos por segmentos.

plot(A) A ∈Mm×n

Para cada j, 1 ≤ j ≤ n, dibuja los pares de puntos (i, aij), 1 ≤ i ≤ m,

unidos por segmentos.

En la misma grafica, cada lınea se dibuja con un color y con un tipo

de lınea diferente.

plot(x,A) x ∈ IRn, A ∈Mm×n

Independientemente de que x sea un vector fila o columna, ejecuta

plot(x,y) donde y es una fila o columna de A, para la eleccion de la

fila y columna se tiene en cuenta la coincidencia de dimensiones.

En la misma grafica, cada lınea se dibuja con un color y con un tipo

de lınea diferente.

plot(A,x) x ∈ IRn, A ∈Mm×nEn las mismas condiciones que el caso anterior dibuja los pares orde-

nados siendo x el valor de las ordenadas

plot(A,B) A,B ∈Mm×n

Ejecuta plot(x,y), donde x es una columna de A e y es una columna

de B.

En la misma grafica, cada lınea se dibuja con un color y con un tipo

de lınea diferente.

Veamos algunos ejemplos. Al ejecutarlos por primera vez aparece una nueva ventana que es la ventana grafica, en

esta se muestra el dibujo realizado por plot (o cualquiera de los comandos que introduciremos), sin embargo, si vamos

Guıa Rapida de Matlabdvips . 20

3.1 Graficos de dos dimensiones ma t

realizando los ejemplos uno a uno sin cerrar la ventana grafica esta se oculta pasando a ser una ventana secundaria

en la que se van sustituyendo las graficas por las que actualmente dibujamos. Cada vez que queramos ver una grafica

tenemos que hacerla ventana principal ya que no se realiza automaticamente.Dibujemos el vector de ordenadas y el de abcisas:

>> x=[-4 -2 0 1 3 5]; [ENTER]

>> y=[16 4 0 1 9 25]; [ENTER]

>> plot(x,y); [ENTER]

−4 −3 −2 −1 0 1 2 3 4 50

5

10

15

20

25

Dibujemos un vector de numeros complejos:

>> z=[1 2+i 3 2-i 3-2*i]; [ENTER]

>> plot(z); [ENTER]

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3−2

−1.5

−1

−0.5

0

0.5

1

Para dibujar numeros complejos tambien se pueden utilizar los comandos polar, quiver, feather, compass, rose

y pol2cart. (consultar la seccion 3.2).Dibujemos una matriz:

>> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16

-0.5; 5 25 0.5]; [ENTER]

>> plot(A); [ENTER]

1 1.5 2 2.5 3 3.5 4 4.5 5−5

0

5

10

15

20

25

Guıa Rapida de Matlabdvips . 21

3.1 Graficos de dos dimensiones ma t

Si en el ejemplo anterior elegimos las ordenadas obtenemos:

>> x=[0 0.1 0.2 0.3 0.4]; [ENTER]

>> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16

-0.5; 5 25 0.5]; [ENTER]

>> plot(x,A); [ENTER]

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4−5

0

5

10

15

20

25

Tambien podemos dibujar diferentes funciones en el mismo

grafico.

>> x=0:0.1:2; [ENTER]

>> A=[sin(pi*x); 0.5+0.5*x]; [ENTER]

>> plot(x,A); [ENTER]

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.5

0

0.5

1

1.5

Podemos intercambiar los ejes sin mas que escribir

>> plot(A,x) [ENTER]

−1 −0.5 0 0.5 1 1.50

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

3.1.2 Opciones del comando plot

Existe una serie de opciones para realizar graficos con MATLAB entre las que destacamos las siguientes:

Explicacion

plot(x,y,cad)Dibuja la grafica de abcisas x y ordenadas y con las opciones de estilo

dadas por cad.

plot(x1,y1,cad1, x2,y2,cad2,...)

Dibuja la grafica de abcisas x1 y ordenadas y1 con las opciones de

estilo dadas por cad1, la grafica de abcisas x2 y ordenadas y2 con las

opciones de estilo dadas por cad2 y ası con el resto de ternas. Si se

omiten las opciones de estilo MATLAB escoge el color y estilo para

cada grafico.

Los estilos de lıneas y colores se determinan con una variable caracter de a lo sumo tres de caracteres que hemos

Guıa Rapida de Matlabdvips . 22

3.1 Graficos de dos dimensiones ma t

denotado por cad. Las ternas se construyen con un caracter de cada columna sin importar el orden. Ası por ejemplo,

cad=’ys-’ dibuja una lınea amarilla, solida y con cuadrados como marcadores, exactamente igual que cad=’s-y’ o

cad=’sy-’ aunque siempre es mejor ser homogeneos en cada uno de los usos de estos parametros. Los tamanos de los

sımbolos, las anchuras de las lıneas y otros aspectos del dibujo pueden ser modificados como ya veremos posteriormente.

Si no se especifica el estilo, MATLAB utiliza por defecto una lınea azul continua sin marcadores para los puntos

dibujados.

Marcadores Lıneas Colores

. punto - solida y amarillo

* estrella -- discontınua g verde

x cruz -. punto-raya m magenta

o cırculo : punteada b azul

+ mas c cyan

s cuadrado w blanco

d rombo r rojo

p pentagono k negro

h hexagono

v triangulo abajo

< triangulo izquierda

> triangulo derecha

^ triangulo arriba

Veamos algunos ejemplos.

Dibujamos una grafica con cırculos.

>> x=-pi:0.05:pi; [ENTER]

>> plot(x, sin(x).*cos(x),’o’);

[ENTER]

−4 −3 −2 −1 0 1 2 3 4−0.5

−0.4

−0.3

−0.2

−0.1

0

0.1

0.2

0.3

0.4

0.5

Tecleamos el siguiente fichero:

n=50; % Asignamos valores a las variables

a=0;

b=3;

x=linspace(a,b,n); % Construimos el vector x

e1=exp(-x.^2); % y los vectores de abcisas

e2=(x.^2).*exp(-x.^2);

e3=x.*exp(-x.^2);

e4=exp(-x);

plot(x,e1,’+’,x,e2,’*’,x,e3,’o’,x,e4,’x’); % Dibujamos las gr\’aficas

Guıa Rapida de Matlabdvips . 23

3.1 Graficos de dos dimensiones ma t

La ejecucion del fichero anterior desde la ventana de MATLAB

nos muestra como se pueden superponer varias graficas, en

concreto las de las funciones e−x2, x2 e−x2

, x e−x2y e−x,

diferenciandolas mediante distintos estilos de lınea.

0 0.5 1 1.5 2 2.5 30

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

3.1.3 Otros comandos

Concluimos la seccion con dos comandos graficos de uso frecuente en MATLAB. El primero de ellos es el comando

errorbar, que nos permite incorporar a la grafica, mediante barras verticales, el error cometido. Este comando se

usa como el comando plot, pero con un argumento mas que indica el margen de error. En concreto:

Argumentos Explicacion

errorbar(x,y,e,cad)

x, y, e ∈ IRn,

cad es una

variable cadena

Ejecuta plot(x,y,cad) superponiendo las barras de error

dadas por el vector e (de valores positivos) simetricamente

por encima y por debajo de la grafica. El argumento cad es

opcional.

errorbar(x,y,u,e,cad)

x, y, e ∈ IRn,

cad es una

variable cadena

Ejecuta plot(x,y,cad), superponiendo en la grafica corre-

spondiente las barras de error dadas por los vectores positivos

u (las cotas superiores) y l (las cotas inferiores).

En este ejemplo generamos una serie de datos con cotas de

error de un 15%. Mostramos la grafica con los errores como

sigue

>> x=linspace(0,10,50); [ENTER]

>> y=exp(sin(x)); [ENTER]

>> delta=0.15*y; [ENTER]

>> errorbar(x,y,delta); [ENTER]

−2 0 2 4 6 8 10 120

0.5

1

1.5

2

2.5

3

3.5

El segundo de los comandos es fplot, que nos permite dibujar funciones, especificadas mediante ’fcn’. Estas

pueden ser predefinidas por MATLAB o definidas por el usuario, en este caso ’fcn’ indica una referencia a un M-file

de nombre fcn.m. Mas concretamente,

Guıa Rapida de Matlabdvips . 24

3.2 Graficos con numeros complejos ma t

Argumentos Explicacion

fplot(’fcn’, lim, cad)lim ∈ IR2,

’fcn’, cad cadenas

Dibuja el grafico de la funcion especificada en la cadena

fcn en el intervalo de abcisas determinado por lim.

La cadena cad que indica el estilo de lınea es opcional.

fplot(’fcn’, lim, cad)lim ∈ IR4,

’fcn’, cad cadenas

Idem que el anterior pero lim determina tambien las

ordenadas.

fplot(’fcn’, lim, cad,

tol)

lim ∈ IR(2 o 4),

tol ∈ IR,’fcn’, cad cadenas

En las mismas condiciones, pero especificando la pre-

cision con tol que por defecto es 2e− 3.

Dibujemos la funcion seno en el intervalo [0, 10]:

>> fplot(’sin(x^2)’, [0 10]) [ENTER]

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

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Destaquemos que MATLAB obtiene automaticamente la escala de los ejes de la grafica, utilizando el mınimo y el

maximo de los datos, tanto en el eje de las ordenadas como en el de las abcisas. Para modificar dicha escala podemos

utilizar el comando axis (ver seccion 3.4).

3.2 Graficos con numeros complejos

polar(theta,r)Dibuja en coordenadas polares. Los elementos del vector tetha son los

angulos en radianes, y los elementos del vector r son las distancias al origen.

pol2cart(theta,r)Convierte las coordenadas polares dadas por theta y r en coordenadas car-

tesianas.

Vamos a ver dos ejemplos.

>> r = linspace(0,2); [ENTER]

>> theta = linspace(0,10*pi); [ENTER]

>> [x,y] = pol2cart(theta,r); [ENTER]

>> z = x+i*y; [ENTER]

>> plot(z); [ENTER]

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

Guıa Rapida de Matlabdvips . 25

3.2 Graficos con numeros complejos ma t

En el segundo de los ejemplos dibujaremos la funcion

r = ecost − 2 cos 4 t + sin(

t5

12

)

tanto en coordenadas polares como en coordenadas cartesianas.

>> t = linspace(0,22*pi,1100);[ENTER]

>> r = exp(cos(t))-2*cos(4*t)+sin(t.5/12);[ENTER]

>> polar(t,r);[ENTER]

>> [x,y] = pol2cart(t,r);[ENTER]

>> plot(x,y);[ENTER]

2.5272

5.0543

30

210

60

240

90

270

120

300

150

330

180 0

−3 −2 −1 0 1 2 3 4−4

−2

0

2

4

Un vector de numeros complejos pueden ser dibujado tambien con los comandos quiver, feather, compass y

rose, tal y como se detalla a continuacion.

quiver(x,y)Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento

y magnitud del numero complejo que tiene ese par de coordenadas reales.

quiver(x,y,dx,dy)Dibuja una flecha en las coordenadas (xi, yi) con el argumento y magnitud

dados por (dxi, dyi).

quiver(x,y, ...,s)El parametro s indica la escala con la que se dibujan las flechas, que por

defecto toma el valor 1.

feather(z)Dibuja flechas mostrando las magnitudes y argumentos de los elementos de

la matriz compleja z, estas flechas parten de puntos equidistantes del eje x.

compass(Z)Como feather pero en este caso todas ellas tienen como origen el origen de

coordenadas.

rose(v,n)

Dibuja un histograma de angulos, es decir, un histograma circular mostrando

la frecuencia de los angulos dados en el vector v; se utilizan n intervalos. En

el caso de no especificar n, el valor por defecto es 36.

Veamos algunos ejemplos. Sea Z la matriz compleja definida como:

Z =

1 + i 2− i 3− 5 i

−4 + 3 i 5− 5 i i

−1− i 3 + 3 i −1

Los siguientes comandos producen en la misma ventana las diferentes graficas.

>> Z=[1+i 2-i 3-5*i; -4+3*i 5-5*i i ;-1-i 3+3*i -1]; [ENTER]

>> clf; [ENTER]

>> subplot(2,2,1); quiver(real(Z),imag(Z)); title(’quiver’); [ENTER]

>> subplot(2,2,2); feather(Z); title(’feather’); [ENTER]

>> subplot(2,2,3); compass(Z); title(’compass’); [ENTER]

>> subplot(2,2,4); rose(angle(Z(:))); title(’rose’); [ENTER]

Guıa Rapida de Matlabdvips . 26

3.3 Graficos en otros sistemas coordenados ma t

0 1 2 3 40

0.5

1

1.5

2

2.5

3

3.5quiver

−5 0 5 10−6

−4

−2

0

2

4feather

compass

3.5355

7.0711

30

210

60

240

90

270

120

300

150

330

180 0

rose

1

2

30

210

60

240

90

270

120

300

150

330

180 0

3.3 Graficos en otros sistemas coordenados

El comando plot dibuja graficos en coordenadas cartesianas; sin embargo, tambien es posible utilizar otros sistemas

de coordenadas.

semilogx(x,y)

Utiliza coordenadas logarıtmicas en el eje x. El resultado es el mismo que

utilizar plot(log10(x),y) pero no produce ningun error si tenemos que

calcular log10 0.

semilogy(x,y)Es el mismo comando anterior, pero esta vez la escala logarıtmica esta en el

eje y.

loglog(x,y) Dibuja ambos ejes en escala logarıtmica.

Como ejemplo dibujemos un grafico en un sistema de coordenadas logarıtmicas y lo comparamos con el mismo

grafico en coordenadas cartesianas.

Guıa Rapida de Matlabdvips . 27

3.4 Controlando los graficos ma t

>> x=linspace(0,7); [ENTER]

>> y=exp(x); [ENTER]

>> subplot(2,1,1); plot(x,y); [ENTER]

>> subplot(2,1,2); semilogy(x,y);

[ENTER]

0 1 2 3 4 5 6 70

200

400

600

800

1000

1200

0 1 2 3 4 5 6 710

0

101

102

103

104

3.4 Controlando los graficos

Los graficos en MATLAB son objetos y los comandos que mostramos en esta seccion son algunos de los que se utilizan

para definir y modificar esos objetos y el entorno en el que se crean.

figure(gfc) Permite mostrar la ventana grafica actual y crear nuevas ventanas graficas.

clf Borra el contenido la ultima ventana grafica utilizada.

delete(n) Borra la ventana grafica n.

clc Borra la ventana de comandos sin borrar la memoria.

home Mueve el cursor hacia la esquina izquierda superior de la ventana de comandos.

hold onPermite superponer graficos hasta que se desactiva la opcion con el comando

hold off.

hold off Desactiva la opcion hold on.

hold Intercambia las opciones hold on a hold off y viceversa.

isholdEs un comando logico que devuelve 1 si para el actual grafico esta activada

la opcion hold on o 0 en caso contrario.

Un comando de uso muy frecuente es subplot, que se utiliza para dibujar en la misma ventana grafica varios

dibujos. Este comando no dibuja nada, pero permite dividir la ventana grafica en varias subventanas y dibujar en cada

una de ellas con cualquiera de los comandos vistos anteriormente y de los que veremos posteriormente.

subplot(m,n,p)

Divide la ventana grafica en m filas y n columnas y hace que la subventana

p sea la actual. Las ventanas se numeran desde la izquierda a la derecha y

desde arriba hacia abajo. Tambien puede ser utilizado como subplot(mnp).

subplot Pasa la ventana grafica a su estado por defecto (subplot(1,1,1)) .

Los siguientes comandos dibujan la funcion f(x) = −x · sin x, en la ventana superior izquierda, su derivada en

la ventana superior derecha, una aproximacion de la derivada en la ventana inferior izquierda y el error relativo en la

ventana inferior derecha.

>> x=linspace(-10,10,1000); [ENTER]

>> y11=(-x).*sin(x); [ENTER]

>> y12=(-x).*cos(x)-sin(x); [ENTER]

Guıa Rapida de Matlabdvips . 28

3.4 Controlando los graficos ma t

>> y21=diff(y11)./(x(2)-x(1)); [ENTER]

>> y22=(y21-y12(1:999))./norm(y12); [ENTER]

>> subplot(2,2,1); plot(x,y11); title(’La funcion’); [ENTER]

>> subplot(2,2,2); plot(x,y12); title(’La derivada’); [ENTER]

>> subplot(2,2,3); plot(x(1:999),y21); title(’Aproximacion a la derivada’) [ENTER]

>> subplot(2,2,4); plot(x(1:999),y22); title(’Error relativo cometido’) [ENTER]

−10 −5 0 5 10−8

−6

−4

−2

0

2

4

6La funcion

−10 −5 0 5 10−10

−5

0

5

10La derivada

−10 −5 0 5 10−10

−5

0

5

10Aproximacion a la derivada

−10 −5 0 5 10−4

−2

0

2

4

6

8x 10

−4 Error relativo cometido

Las subventanas definidas por el comando subplot pueden ser de diferentes tamanos dentro de la misma ventana

como muestra el siguiente ejemplo.

Editamos un fichero M-file para calcular el fractal de Mandelbrot y mostrarlo de tres formas diferentes. El programa

parte de una red de puntos definida por el usuario en el plano complejo e itera con cada numero ξ de la red de acuerdo

con el siguiente algoritmo:

z0 = 0

zi+1 = z2i + ξ.

El programa asigna al punto de la red que estamos calculando el numero de iteraciones (con un maximo de 100) que

hacen falta para que los terminos de la sucesion disten del lımite menos que una cantidad ε > 0. Se genera de esta

manera una matriz mandelbrot del mismo tamano que la red.

function y = mandelb(renum,imnum) % Programa Mandelbrot

epsilon=1e-14;

renum=input(’renum: ’); % Lee el numeros de nodos en el eje real

imnum=input(’imnum: ’); % Lee el numeros de nodos en el eje imaginario

remin=-2; remax=1 ; immin=-1.5; immax=1.5; % Define los parametros de la red

reval1= linspace(remin,remax,renum);

imval1= linspace(immin,immax,imnum); % Define vectores del tama\~no correcto

[Reval, Imval]=meshgrid (reval1,imval1); % Define la red de puntos

Imvalreal=Imval;

Guıa Rapida de Matlabdvips . 29

3.4 Controlando los graficos ma t

Imval=Imval*i;

Cgrid=Reval+Imval;

for reind=1:renum

disp([’reind=’,int2str(reind)]); % Indica en que nodo estamos

for imind= 1:imnum

c=Cgrid(reind,imind);

numc=0;

zold=0.0+0.0*i;

z=zold^2+c;

while(abs(z) <= 2) & (abs(z-zold) >= epsilon) & ...

(numc < 100)

numc=numc+1;

zold=z;

z=zold^2+c;

end

Mandelbrot(reind,imind)= numc;

end

end

% Mostramos la matriz de Mandelbrot de tres formas diferentes

clf; % Borra la figura

%whitebg(’k’); % Fondo negro

subplot(2,2,1); % Esquina superior izquierda

mesh(reval1,imval1,Mandelbrot); % Dibuja la red en tres dimensiones

axis([-2 1 -1.5 1.5 0 100]) % Cambia los limites de los ejes

subplot(2,2,2);

contour(reval1, imval1, Mandelbrot, 100) % Dibuja la red como un contorno

subplot(2,1,2); % Figura inferior, dibuja solo una

surf(Reval,Imvalreal, Mandelbrot); % Dibuja la red como una superficie

view(2); % Punto de vista abajo.

shading flat; % Determina que cada ret\’{\i}culo tiene

un color colormap(flipud(jet)); % Define el mapa de colores.

colorbar; axis([-2 1 -1.5 1.5]); % Dibuja la barra de colores al lado del gr\’afico

Guıa Rapida de Matlabdvips . 30

3.4 Controlando los graficos ma t

−2−1

01

−10

1

0

50

100

−2 −1 0 1−1.5

−1

−0.5

0

0.5

1

1.5

−2 −1.5 −1 −0.5 0 0.5 1−1.5

−1

−0.5

0

0.5

1

1.5

0

20

40

60

80

100

Los ejes de cada dibujo son escalados automaticamente para mostrar todos los puntos en la ventana. Puede ocurrir

que no se vean algunos de los puntos, porque coinciden con los ejes, pues bien, el comando axis nos permite modificar

la escala de los ejes.

axis

Devuelve los lımites del dibujo actual en un vector fila. Para graficos de dos

dimensiones tiene los elementos [xmin xmax ymin ymax] y para graficos de

tres dimensiones [xmin xmax ymin ymax zmin zmax].

axis(v)

Establece la escala de los ejes conforme al vector vque sera [xmin xmax ymin ymax] en dos dimensiones o

[xmin xmax ymin ymax zmin zmax] en tres dimensiones (en escala lo-

garıtmica, tambien se utilizan valores actuales, no logarıtmicos).

axis(axis)Bloquea la escala cuando se anaden dibujos posteriores a uno que se ha

mantenido con el comando hold.

axis(cad)

Obtenemos diferentes resultados dependiendo de la cadena cad utilizada:

• ’auto’ Vuelve a la escala automatica.

• ’equal’ Da la misma escala en ambos ejes.

• ’ij’ Intercambia la parte positiva y negativa del eje y.

• ’xy’ Deshace el anterior.

• ’image’ Igual que equal pero se ajusta al dibujo.

• ’square’ Modifica la ventana grafica para hacer que la caja del dibujo

sea cuadrada.

• ’normal’ Modifica la ventana grafica para que la caja del dibujo vuelva

al tamano habitual.

• ’off’ No se muestran los ejes.

• ’on’ Deshace el comando anterior.

Tambien podemos cambiar la escala por medio del raton y ello es posible gracias al comando zoom que se utiliza

como se muestra a continuacion.

Guıa Rapida de Matlabdvips . 31

3.4 Controlando los graficos ma t

zoom on

Permite agrandar la ventana con el boton izquierdo del raton, inhabilitandolo

con el boton derecho. Tambien permite seleccionar un area para visualizarla

mejor.

zoom off Deshace el comando anterior.

zoom Intercambia las posiciones de zoom.

zoom out Establece la escala.

Con los siguientes comandos representaremos el cırculo unidad en diferentes escalas:

>> t=0:0.2:2*pi+0.2; [ENTER]

>> x=sin(t); [ENTER]

>> y=cos(t); [ENTER]

>> subplot(3,1,1); [ENTER]

>> plot(x,y,’-’); [ENTER]

>> subplot(3,1,2); [ENTER]

>> plot(x,y,’-’); [ENTER]

>> axis square; [ENTER]

>> subplot(3,1,3); [ENTER]

>> plot(x,y,’-’); [ENTER]

>> axis normal; [ENTER]

>> grid; [ENTER]

>> axis([-2 2 -3 3]); [ENTER]

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1−1

−0.5

0

0.5

1

−1 0 1−1

−0.5

0

0.5

1

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2

−2

0

2

En en el ejemplo anterior hemos utilizado el comando grid que describimos a continuacion.

grid on Dibuja una red en la ventana grafica.

grid off Borra la red de la ventana grafica.

grid Intercambia las posiciones de grid.

En muchas ocasiones necesitamos incluir texto en la ventana grafica para lo que podemos utilzar varios comandos.

Guıa Rapida de Matlabdvips . 32

3.4 Controlando los graficos ma t

title(txt) Escribe la variable cadena txt como un tıtulo centrado encima del grafico.

xlabel(txt),

ylabel(txt),

zlabel(txt)

Escribe la variable cadena txt como una etiqueta bajo el eje x, y y z respec-

tivamente.

text(x,y,txt)

Escribe la variable cadena txt en la posicion (x, y) de la ventana grafica.

Las coordenadas x e y estan proporcionadas en las mismas unidades en las

que esta dibujado el grafico. Si x e y son vectores, la variable cadena se

escribe en todos los pares de puntos (xi, yi). Si txt es un vector de variable

cadenas con el mismo numero de filas que x e y, se escribe una de ellas en

cada una de las posiciones.

gtext(txt)

Escribe la variable cadena txt en la posicion de la ventana de graficos que

elija el usuario. Una cruz indica la posicion donde se quiere colocar el texto

y es seleccionada mediante las teclas de desplazamiento o mediante el raton.

legend(st1,st2, ...)

Escribe en un pequeno recuadro, las variables cadenas st1, st2, etc, al lado

de los estilos de linea utilizados en cada una de las graficas. Este pequeno

recuadro puede moverse mediante el raton.

legend(l1,st1,

l2,st2, ...)Escribe una leyenda pero se especifican los estilos de lınea.

legend off Elimina la leyenda del dibujo actual.

Tambien hay comandos que convierten los numeros en variable cadenas, num2str, int2str, sprintf, ... que

pueden ser utiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto.

El siguiente programa dibuja un camino aleatorio (mediante la funcion rand). Este camino se puede considerar

como una simulacion del movimiento de una partıcula en el aire.

function y=particle(n)

% Camino aleatorio. Una particula empieza en el origen, y se mueve

% aleatoriamente hacia otra direccion en cada paso.

x=cumsum(rand(n,1)-0.5); % Valores aleatorios de x

y=cumsum(rand(n,1)-0.5); % Valores aleatorios de x

clf;

plot(x,y);

hold on;

plot(x(1),y(1),’o’,x(n),y(n),’o’);

axs=axis;

scale=axs(2)-axs(1);

text(x(1)+scale/30,y(1),’Inicio’);

text(x(n)+scale/30,y(n),’Fin’);

hold off;

xlabel(’x’); ylabel(’y’); title(’Random walk’);

El resultado es el siguiente grafico.

Guıa Rapida de Matlabdvips . 33

3.4 Controlando los graficos ma t

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

−3

−2

−1

0

1

2

Inicio

Fin

x

y

Random walk

Los comandos ginput y waitforbuttonpress proporcionan al programador de MATLAB herramientas para crear

programas interactivos simples.

[x,y]=ginput

Lee las coordenadas desde la ventana de graficos. Aparece un cursor que se

maneja bien con el raton o bien con las teclas de desplazamiento vertical y

horizontal. Presionado una tecla o un boton del raton se envıan las coorde-

nadas a MATLAB que las almacena en los vectores x e y. El proceso termina

cuando se presiona la tecla [RETURN].

[x,y]=ginput(n) Lee n coordenadas de la ventana grafica.

waitforbuttonpressDetiene el dibujo de graficos hasta que se presiona una tecla o un boton del

raton.

El siguiente programa dibuja un grafico con puntos especificados por el usuario. Cuando el dibujo termina, el

programa espera que el usuario haga clic en la figura antes de borrarlo.

n=figure; % nueva ventana grafica;

disp(’Para dibujar una poligonal en la figura:’);

disp(’presiona el boton izqdo para empezar,’);

disp(’Para parar presiona el boton dcho’);

[x,y,t]=ginput(1);

plot(x,y,’o’)

xx=x;yy=y;

hold; axis([0 1 0 1]); % superponer el grafico y se establecen

% los ejes

while t~=3

[x,y,t]=ginput(1);

plot(x,y,’o’)

xx=[xx x];

yy=[yy y];

end

clf; line(xx,yy);

disp(’Aprieta en la figura cuando este terminado’)

waitforbuttonpress

delete(n);

Guıa Rapida de Matlabdvips . 34

3.5 Dibujando curvas de nivel ma t

3.5 Dibujando curvas de nivel

Las curvas de nivel de una funcion en dos variables se pueden dibujar en dos y tres dimensiones gracias al comando

contour en el primero de los casos y al comando contour3 en segundo. Estos dos comandos solo pueden ser utilizados

sobre una red rectangular previamente definida.

contour(Z,n,cad)

Dibuja las curvas de nivel de la matriz Z, en n niveles. Si no se especifica

n se dibujan 10 niveles. Los elementos se interpretan como niveles sobre el

plano XY .

cad es opcional y especifica el estilo de linea.

contour(Z,v) Dibuja los niveles especificados en el vector v.

contour(x,y,Z,n,v)En las mismas condiciones que el comando anterior, pero se especifica la red

sobre la que se va a dibujar la grafica x × y y la escala de los ejes.

contourcCalcula la matriz C de contorno sin dibujar las lineas de contorno, utilizandose

los mismos parametros que en los casos anteriores.

contour3Dibuja las curvas de nivel en tres dimensiones utilizandose los mismos

parametros que en los casos anteriores.

clabel(C)

Escribe los valores de los niveles que representan las curvas de nivel. Las po-

siciones son aleatorias. C es la matriz que devuelven los comandos contour

y contour3.

Se pueden especificar los niveles, con un vector v y tambien se puede realizar

manualmente indicandolo con la etiqueta ’manual’.

Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una funcion de dos

variables.

>> [x,y]=meshgrid(-3:1/8:3);

[ENTER]

>> Z=peaks(x,y).*sin(x); [ENTER]

>> subplot(2,1,1); [ENTER]

>> v1=-4:-1; [ENTER]

>> v2=0:4; [ENTER]

>> contour(Z,v1,’k-’); [ENTER]

>> hold on; [ENTER]

>> contour(Z,v2,’k--’); [ENTER]

>> hold off; [ENTER]

>> subplot(2,1,2); [ENTER]

>> C=contour(Z); [ENTER]

>> clabel(C); [ENTER]

5 10 15 20 25 30 35 40 45

10

20

30

40

5 10 15 20 25 30 35 40 45

10

20

30

40 −3

−3

−2

−2

−2

−1

−1

−1

0

00

01

1

1

2

2

3

3

Como puede verse hemoos utilizado el comando peaks que genera una matriz trasladando y reescalando la distri-

bucion gaussiana en dos dimensiones.

Guıa Rapida de Matlabdvips . 35

3.5 Dibujando curvas de nivel ma t

En ocasiones puede ser necesario definir una determinada red para dibujar las curvas de nivel de una matriz Z. El

dominio se define mediante dos vectores x e y de longitudes n y m, respectivamente, para los valores de la red. En la

siguiente tabla se muestran los comandos que nos permieten construir dichas redes, incluso en tres dimensiones, sobre

un cilindro o sobre una esfera.

[U,V]=meshgrid(x,y)Comando que obtiene la red adecuada para hacer graficas tridimensionales a

partir de los vectores x e y.

[U,V,W]=meshgrid(x,y,z) Obtiene una red tridimensional.

[X,Y,Z]=cylinder(r,n)

Devuelve las matrices correspondientes para la superficie de un cilindro o un

cono. Los radios del cilindro se toman del vector r, que contienen los radios

en n puntos equidistantes en el eje del cilindro. Si no se especifica n, se

utiliza n = 20.

[x,y,z]=sphere(n) Devuelve n coordenadas igualmente espaciadas sobre una esfera unidad.

Como ejemplo de uso del comando meshgrid dibujaremos las curvas de nivel de las siguientes funciones:

1) f(x, y) = sin x sin y , x, y ∈ [0, π]× [0, π].

2) f(x, y) = x− 0.5 x3 + 0.2 y2 + 1 , x, y ∈ [−3, 3]× [−3, 3].

3) f(x, y) =sin

√x2 + y2

x2 + y2, x, y ∈ [−8, 8]× [−8, 8].

La primera parte del programa genera la red y evalua la funcion, la segunda parte dibuja las lıneas de contorno.

x=0:0.2:3*pi;

y=0:0.25:5*pi;

[XX,YY]=meshgrid(x,y);

z1=sin(XX).*sin(YY);

x=-3:0.25:3;

y=x;

[XX,YY]=meshgrid(x,y);

z2=XX-0.5*XX.^3+0.2*YY.^2+1;

x=-8:0.5:8;

y=x;

[XX,YY]=meshgrid(x,y);

r=sqrt(XX.^2+YY.^2)+eps;

z3=sin(r)./r;

clf

subplot(2,2,1); contour(z1);

title(’sen(x)*sen(y)’);

subplot(2,2,2); contour(x,y,z3);

title(’sen(r)/r’);

subplot(2,2,3); contour3(z2,15);

title(’x-0.5 x^3 + 0.2 y^2 + 1’);

subplot(2,2,4); contour3(x,y,z3);

title(’sen(r)/r’);

Guıa Rapida de Matlabdvips . 36

3.6 Graficos en 3-D ma t

El resultado es el siguiente grafico.

10 20 30 40

10

20

30

40

50

60

sen(x)*sen(y)

−5 0 5−8

−6

−4

−2

0

2

4

6

8sen(r)/r

510

1520

25

510

1520

25−10

0

10

20

x−0.5 x3 + 0.2 y2 + 1

−50

5

−50

5

−0.5

0

0.5

1

sen(r)/r

Una informacion mas completa de las curvas de nivel la podemos conseguir si ademas dibujamos el gradiente de la

superficie, que se obtiene gracias a la funcion gradient.

>> [X,Y]=meshgrid(-pi/2:0.1:pi/2,-pi:0.2:pi);

[ENTER]

>> Z=abs(sin(Y).*cos(X)); [ENTER]

>> [DZDX,DZDY]=gradient(Z,.1,0.2);

[ENTER]

>> contour(Z); [ENTER]

>> hold on; [ENTER]

>> quiver(DZDX,DZDY); [ENTER]

>> hold off; [ENTER]

5 10 15 20 25 30

5

10

15

20

25

30

3.6 Graficos en 3-D

Existen varios comandos que nos permiten dibujar superficies en tres dimensiones. El primero de ellos es el comando

plot3.

Guıa Rapida de Matlabdvips . 37

3.6 Graficos en 3-D ma t

plot3(x1,y1,z1,cad)

Dibuja un grafico 3-D que pasa por las coordenadas de los vectores x1, y1,

z1. La seleccion del estilo de lınea es opcional y se elige con cad. Todos

los vectores deben tener la misma longitud. Este comando permite dibujar

varios graficas a la vez en la misma ventana grafica.

plot3(X,Y,Z)Dibuja graficos para cada columna de las matrices X, Y y Z, las cuales deben

tener el mismo tamano.

El ejemplo siguiente muestra la simulacion de un camino aleatorio en tres dimensiones.

>> x=cumsum(rand(1,n)-0.5);

[ENTER]

>> y=cumsum(rand(1,n)-0.5);

[ENTER]

>> z=cumsum(rand(1,n)-0.5);

[ENTER]

>> plot3(x,y,z); [ENTER]

>> text(x(1), y(1), z(1),

’Inicio’); [ENTER]

>> text(x(n), y(n), z(n),

’Fin’); [ENTER]

−2

−1

0

1

2

−1

0

1

2

3−3

−2.5

−2

−1.5

−1

−0.5

0

0.5

Inicio

Fin

El texto de las figuras en tres dimensiones se inserta de la misma forma que en dos dimensiones, tal y como se

puede ver en el ejemplo anterior.

El segundo comando que presentamos es el comando mesh y algunas de sus variantes. Con este comando debemos

tener en cuenta las mismas consideraciones que para dibujar las curvas de nivel.

mesh(Z)

mesh(Z,C)

mesh(U,V,Z,C)

Dibuja la matriz Z como tercera coordenada sobre una red rectangular y

conecta los puntos adyacentes creando una superficie.

Si se especifica la matriz C cada punto se dibuja en el color especificado por

cada elemento de la matriz.

Si se especifican los valores de U y V, dibuja la matriz Z sobre los nodos de

la red formada por U y V.

meshc(...)Dibuja, con las mismas consideraciones que el caso anterior, una superficie

incluyendo las curvas de nivel bajo el grafico.

meshz(...) Dibuja una superficie incluyendo una red de referencia en el plano XY .

hidden on-offMantiene las lıneas traseras escondidas o no dependiedo que escribamos on

u off. Si solo se escribe el comando hidden cambia de uno a otro.

Escribamos un programa de MATLAB para dibujar la superficie de las siguientes funciones:

1) f(x, y) = sin x sin y , (x, y) ∈ [0, π]× [0, π].

2) f(x, y) = x− 0.5 x3 + 0.2 y2 + 1 , (x, y) ∈ [−3, 3]× [−3, 3].

Guıa Rapida de Matlabdvips . 38

3.6 Graficos en 3-D ma t

3) f(x, y) =sin

√x2 + y2

x2 + y2, (x, y) ∈ [−8, 8]× [−8, 8].

x=0:0.2:3*pi;

y=0:0.25:5*pi;

[XX,YY]=meshgrid(x,y);

z1=sin(XX).*sin(YY);

x=-3:0.25:3;

y=x;

[XX,YY]=meshgrid(x,y);

z2=XX-0.5*XX.^3+0.2*YY.^2+1;

x=-8:0.5:8;

y=x;

[XX,YY]=meshgrid(x,y);

r=sqrt(XX.^2+YY.^2)+eps;

z3=sin(r)./r;

clf

subplot(2,2,1); mesh(z1);

title(’sin(x)*sin(y)’);

subplot(2,2,2); meshz(z2);

title(’x-0.5*x^3+0.2*+y^2+1’);

subplot(2,2,3); waterfall(z2);

title(’x-0.5*x^3+0.2*+y^2+1’);

subplot(2,2,4); meshc(z3);

title(’sin(r)/r)’);

El resultado es el siguiente grafico

020

4060

0

50

100−1

0

1

sin(x)*sin(y)

010

2030

0

20

40−10

0

10

20

x−0.5*x3+0.2*+y2+1

010

2030

0

20

40−10

0

10

20

x−0.5*x3+0.2*+y2+1

020

40

0

20

40−1

0

1

sin(r)/r)

Guıa Rapida de Matlabdvips . 39

3.6 Graficos en 3-D ma t

Mostramos a continuacion otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el

caso anterior, creamos la red y luego evaluamos la funcion.

surf(X,Y,Z, C)

Dibuja la superficie especificada por la red X e Y, que toma los valores de

Z. Si no se especifica la red, se dibuja en una red uniforme. Los colores se

definen por los elementos de la matriz Al igual que fill pero en tres C, si

no se especifican se utiliza la matriz Z.

surfc(X,Y,Z, C) Del mismo modo que surf excepto que dibuja las curvas de nivel.

surfl(X,Y,Z, ls,r)

Del mismo modo que surf excepto que situa un foco de luz en el punto dado

por el vector ls. El vector r nos proporciona el tipo de luz que puede ser de

los siguientes tipos: ambiente, difusion, especular e interior .

[Nx,Ny,Nz] =

surfnorm(X,Y,Z)

Del mismo modo que surf pero dibuja las normales a la superficie si no

se especifican los vectores Nx, Ny y Nz. En el caso de que se especifiquen

solamente se almacenan los vectores normales.

diffuse(Nx,Ny,Nz,ls)Devuelve el reflejo de una superficie difusa con componentes normales dadas

por los vectores Nx, Ny y Nz. El vector ls nos da la posicion de la luz.

specular(Nx,Ny,Nz,ls,v) Al igual que diffuse pero con reflejo especular.

pcolor(X,Y,Z)Dibuja colores determinados como valores de los elementos de Z. Si se espe-

cifican X e Y es igual que aplicar surf(X,Y,Z); view(2)

fill(x,y,c)Dibuja el polıgono con esquinas dadas por los vectores x e y. El polıgono se

rellena con el color dado por c.

fill3(x,y,z,c) dimensiones.

Las escalas de color usadas por los comandos pueden ser ajustadas (seccion 3.7).

Dibujemos la funcion f(r) =sin r

rcon las curvas de nivel en el plano XY .

>> x=-8:0.5:8; y=x; [ENTER]

>> [XX,YY]=meshgrid(x,y);

[ENTER]

>> R=sqrt(XX.^2+YY.^2)+eps;

[ENTER]

>> Z=sin(R)./R; [ENTER]

>> surfc(XX,YY,Z);

title(’sin(r)/r’);

[ENTER]−10

−5

0

5

10

−10

−5

0

5

10−0.5

0

0.5

1

sin(r)/r

Repitamos el ejemplo anadiendo los vectores normales mediante el comando surfnorm.

Guıa Rapida de Matlabdvips . 40

3.6 Graficos en 3-D ma t

>> clf; [ENTER]

>> x=-8:0.5:8; y=x; [ENTER]

>> [XX,YY]=meshgrid(x,y);

[ENTER]

>> R=sqrt(XX.^2+YY.^2)+eps;

[ENTER]

>> Z=sin(R)./R; [ENTER]

>> surfnorm(XX,YY,Z);

title(’sin(r)/r’);

[ENTER]

−10

−5

0

5

10

−10

−5

0

5

10−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

1.2

sin(r)/r

En los ejemplos siguientes mostramos las diferencias entre los comandos surf y surfl utilizando diferentes luces.

[X,Y]=meshgrid(-3:1/8:3);

Z=peaks(X,Y).*sin(X);

[Nx,Ny,Nz]=surfnorm(Z);

s=[-3 -3 2]; % posicion de la fuente de luz

k1=[0,1,0,0]; % difusion

k2=[0,0,1,1]; % especular

subplot(2,2,1);

surfl(X,Y,Z,s); shading interp;

colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off;

subplot(2,2,2);

surfl(X,Y,Z,s,k1); shading interp;

colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off;

subplot(2,2,3);

surfl(X,Y,Z,s,k2); shading interp;

colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off;

subplot(2,2,4);

DD=diffuse(Nx,Ny,Nz,s);

surf(X,Y,Z,DD); shading interp;

colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off;

Guıa Rapida de Matlabdvips . 41

3.6 Graficos en 3-D ma t

Todas estas superficies se pueden ver en escala de grises utilizando el comando shading interp.

Los comandos surf y mesh pueden ser utilizados para dibujar una funcion en una red no uniforme. Ahora podemos

incluir las matrices con las coordenadas para llamar a la rutina grafica.

En muchas ocasiones un grafico puede ser mas facil de visualizar si lo podemos observar desde un punto de vista

diferente.

view(v,h)Establece el punto de vista. El escalar v determina el angulo azimutal y el

escalar h el angulo de elevacion.

[v,h]=view Devuelve el punto de vista actual, angulo azimutal y el angulo de elevacion.

view(r) Establece el visor en la posicion r=[x y z].

view(n)Devuelve los valores estandar de angulos de vision (con n = 2 en dimension

dos y con n = 3 los de dimension tres).

view Devuelve la matriz de vision (de dimension 4× 4).

view(T) Se utiliza T como matriz de vision.

viewmtx(v,h,s,r)Devuelve la matriz de vision (que define el punto de vista y la direccion de

vista).

Con el comando view obtenemos una superficie ya conocida pero desde un punto de vista distinto.

−8 −6 −4 −2 0 2 4 6 8−0.5

0

0.5

1sin(r)/r

Tambien es posible utilizar el comando view en dos dimensiones. Ası, si utilizamos en un grafico de dos dimensiones

el comando view([1 0.6 0.35]) muestra como el cırculo se puede dibujar en tres dimensiones.

Guıa Rapida de Matlabdvips . 42

3.7 Control del color ma t

−1

−0.5

0

0.5

1

−1−0.5

00.5

1

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Para investigar las funciones de tres variables graficamente, ya que no podemos representarlas, MATLAB posee el

comando slice.

slice(V, xs, ys, zs, nx)

Dibuja capas de la funcion de tres variables definida por la matriz V . La matriz

V esta compuesta de nx capas, evaluada sobre tres matrices obtenidas a

partir de meshgrid con tres argumentos. Los vectores xs, ys y zs especifican

que capas se dibujan.

Probamos el comando con la funcion f(x, y, z) = x2+y2+z2 y vemos lo que aparece en el cubo [−1, 1]× [−1, 1]×[−1, 1]. Para ello definimos la red y evaluamos la funcion en la red (podemos decidir que capas vamos a dibujar).

>> [x,y,z]=meshgrid(-1:.1:1,-1:.1:1,-1:.1:1);

[ENTER]

>> v=x.^2+y.^2+z.^2; [ENTER]

>> slice(v,[11],[11],[1 11]);

[ENTER]

05

1015

2025

0

5

10

15

20

250

5

10

15

20

25

Senalemos que existen otros muchos comandos para realizar y modificar graficos como es el comando rot90 que

nos permite rotarlos sobre la matriz definida.

3.7 Control del color

En MATLAB el usuario puede controlar los colores y la iluminacion de las graficas en tres dimensiones.

Guıa Rapida de Matlabdvips . 43

3.7 Control del color ma t

shading type

Redibuja la superficie con las siguientes propiedades de acuerdo con el tipo:

• faceted dibuja la red en la supeficie (opcion por defecto).

• interp utiliza colores interpolados en la superficie.

• flat todas las caras se dibujan en colores constantes desde las esquinas

de las caras.

Dibujamos de nuevo una figura ya conocida pero con los colores interpolados utilizando el comando anterior.

−10

−5

0

5

10

−10

−5

0

5

10−0.5

0

0.5

1

sin(r)/r

MATLAB utiliza mapas de colores para dibujar las superficies. Un mapa de color es una matriz m × 3 en la cual

las filas forman los colores, especificados por la cantidad de rojo (primera columna), verde (segunda columna) y azul

(tercera columna); ası el mapa caracteriza m colores.

El color sobre la superficie se especifica mediante un ındice del mapa de colores. Este ındice se calcula habitual-

mente en relacion al maximo y el mınimo de la superficie. El comando colormap se utiliza para decidir que mapa de

colores utiliza MATLAB.

colormap(Cm)Situa como mapa de colores actual a Cm. Si no se especifica se devuelve en

una matriz la tabla del grafico actual.

colorbar(’horiz’)Dibuja una barra horizontal de escala de colores en la ventana de graficos

actual. Si no se especifica la dibuja vertical.

Hay 11 mapas de colores predefinidos en MATLAB:

gray(m) m tonos de grises.

hsv(m) m tonos de colores brillantes.

hot(m) m tonos de colores calientes.

cool(m) m tonos de colores frıos.

bone(m) m tonos de colores hueso.

copper(m) m tonos de colores copper.

pink(m) m tonos de colores en rosa.

flag(m) m tonos de colores de banderas (EE.UU.).

prism(m) rojo, naranja, amarillo, verde, azul y violeta.

jet(m) m tonos de colores de hsv frıos y calientes.

white(m) mapa blanco de colores.

Anadamos a la figura anterior la barra de colores.

Guıa Rapida de Matlabdvips . 44

3.8 Copia de la ventana grafica ma t

Hay otros comandos que tambien manipulan el color.

rgb2hsv(Cm)Devuelve un mapa de colores hsv de un mapa de colores rgb. El comando

inverso es hsv2rgb(Cm).

rgbplot(Cm) Dibuja las columnas del mapa de colores Cm.

caxis(v)

Hace que el intervalo de colores actual se situe entre los valores del vector v.

Si no se especifica v devuelve el intervalo habitual. Si se especifica ’auto’

retorna a la escala automatica.

spinmat(t,s)Rota el mapa de colores durante t segundos usando el paso s (los valores

por defecto son s=1 y t=3. Si se utiliza inf se cambia para siempre.

brighten(Cm,s) Da brillo al grafico si 0 < s < 1 y se oscurece si −1 < s < 0.

nt=brighten(Cm,s) Devuelve el mapa de colores brillante u oscurecido, pero no redibuja.

whitebg Cambia el fondo entre blanco y negro.

whitebg(’cad’)Establece el color del fondo de acuerdo a una cadena de tipo de lınea, mar-

cador y color, o con un vector rgb.

3.8 Copia de la ventana grafica

Es posible obtener copias de las ventanas graficas bien a impresion o bien a fichero.

print ficheroManda a fichero.ps la ventana actual. Si no se especifica va directamente

a la impresora. Se pueden consultar diferentes impresoras.

print -deps ficheroSe graba en un archivo de formato encapsulado fichero.eps. Para enviarlo

posteriormente a otros documentos.

[str, dev] =printopt Nos da la cadena y salida utilizada por print.

orient cadena

Establece la orientacion que utiliza MATLAB en la siguiente print. Si

cadena es lanscape se imprime en apaisado. Si es portrait se imprime en

vertical. Si es tall se imprime en vertical y a una escala que llena el papel.

Si no se especifica devuelve la orientacion actual en una cadena.

Guıa Rapida de Matlabdvips . 45

Bibliografıa

[1] Oscar Angulo, Eduardo Cuesta, Cesar Gutierrez, Carmen Martınez,Guıa Rapida de MATLAB,

IICE, 2001.

[2] Adrian Biran, Moshe Breinner, MATLAB for Engineers, Addison-Wesley, 1997.

[3] S.J. Chapman, MATLAB Programming for engineers, Brooks & Cole, 2000.

[4] Walter Gander, Jiri Hrebicek, Solving Problems in Scientific Computing Using MAPLE and MATLAB,

Springer, 1997.

[5] Mathews and Fink, Metodos Numericos con MATLAB, Prentice Hall, 2000.

[6] Eva Part-Enander, Anders Sjoberg, The MATLAB handbook, Addison-Wesley, 1996.

[7] Cesar Perez, Matematica Informatizada con MATLAB, ra-ma, 1996.

[8] Peregrina Quintela, Introduccion a MATLAB y sus aplicaciones, Universidad de Santiago de Compostela,

1997.

[9] Redfern, D, The MATLAB 5 handbook, Springer, 1997.

[10] Kermit Sigmon, MATLAB Primer (Fifth Edition), CRC Press, 1998 .

[11] Aprenda MATLAB 5.3, como si estuviera en primero, Universidad de Navarra, 1999.

[12] www.mathworks.com

Guıa Rapida de Matlabdvips . 46