guia rapida de matlab (comandos basicos, graficacion y programacion)
Post on 26-May-2015
69.364 Views
Preview:
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
top related