Professional Documents
Culture Documents
apida de Matlab
Oscar
Angulo, Eduardo Cuesta,
Pr
ologo
Este libro inicia una serie de guas dedicadas a MATLAB.
El objetivo de esta gua 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 dedicaci
on muy exhaustiva a su explicaci
on. Hemos
pretendido mostrar en esta gua los comandos y estructuras b
asicas de MATLAB de una manera clara y concisa con
algunos ejemplos que hemos considerado interesantes. Pretendemos as mismo que esta gua sea una gua 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 compa
neros y alumnos a los cuales les queremos mostrar nuestro agradecimiento.
Valladolid, diciembre de 2001
Los Autores
Gu
a R
apida de Matlabdvips .
m
at
.
No est
a permitida la reproducci
on total o parcial de esta gua, ni su tratamiento inform
atico, ni la transmisi
on de
ninguna forma o por cualquier medio, ya sea electr
onico, mec
anico, por fotocopia, por registro u otros m
etodos, ni
su pr
estamo, alquiler o cualquier otra forma de cesi
on de uso del ejemplar, sin el permiso previo y por escrito de los
titulares del Copyright.
Gu
a R
apida de Matlabdvips .
Contenidos
1 Introducci
on a MATLAB
1.1
Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
1.3
El entorno gr
afico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4
Entorno gr
afico de MATLAB para Linux
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Breve Introducci
on a la Programaci
on en MATLAB
2.1
2.1.2
Aritm
etica elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4
Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5
Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2
Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6
Programaci
on modular: Funciones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7
Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Gr
aficos con MATLAB
3.1
Gr
aficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
El comando
3.1.2
3.1.3
Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
Gr
aficos con n
umeros complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3
Gr
aficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4
Controlando los gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5
3.6
Gr
aficos en 3-D
3.7
3.8
Copia de la ventana gr
afica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gu
a R
apida de Matlabdvips .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
4
5
6
7
7
7
7
8
9
11
12
15
15
17
18
19
20
20
20
22
24
25
27
28
35
37
43
45
Captulo 1
Introducci
on a MATLAB
1.1
Comentarios previos
Comencemos destacando que la filosofa del entorno MATLAB no es la de otros paquetes de matem
aticas usuales,
tales como Derive, Maple o Mathematica.
Su filosofa se asemeja m
as a la de un lenguaje de programaci
on que al de un paquete est
andar de matem
aticas
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 programaci
on:
(a) No hay que definir el tipo de las variables que se van a utilizar, ni el tama
no de las mismas.
(b) No hay que compilar los programas, como ocurre en los entornos de programaci
on.
(c) Se pueden utilizar extenssimas libreras de funciones ya definidas.
actico de vectores y matrices.
(d) Presenta un manejo muy pr
2) Frente a un lenguaje de programaci
on no presenta incovenientes destacables.
Adem
as 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 inform
aticos son, entre otros:
(a) Al no estar pensado para el trabajo en linea de comandos no presenta ning
un men
u de acceso r
apido a
procedimientos de uso frecuente (como el que tiene por ejemplo Derive).
(b) No posee una librera de c
alculo simb
olico 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 m
as optimizados para este tipo de
c
alculos.
1.2
??.
>>
quit:
quit [ENTER]
Gu
a R
apida de Matlabdvips .
m
at
1.3 El entorno gr
afico de MATLAB bajo Windows
1.3
El entorno gr
afico de MATLAB bajo Windows
Menu Edit :
tor cl
asico de textos para Windows, seleccionar
un texto (con los cursores o el rat
on), cortar
un texto, copiar o pegar lo que tengamos seleccionado en el portapapeles, deshacer la
ultima
acci
on, seleccionar todo el documento o bien borrar las variables de la sesi
on.
Gu
a R
apida de Matlabdvips .
1.4 Entorno gr
afico de MATLAB para Linux
m
at
1.4
Entorno gr
afico de MATLAB para Linux
Se
nalemos 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 presentaci
on 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 R
apida de Matlabdvips .
Captulo 2
Breve Introducci
on a la Programaci
on
en MATLAB
2.1
2.1.1
>>
El smbolo
>> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de
MATLAB teclearemos:
>>
2.1.2
quit [ENTER]
Aritm
etica elemental
>>
1+2 [ENTER]
ans =
>>
>>
>>
Seno de /2.
2.45*3.1415 [ENTER]
ans =
>>
sin(pi/2) [ENTER]
ans =
Producto de dos n
umeros reales.
7.6967
2,34*3 [ENTER]
ans =
ans =
102
2E-2*3E8 [ENTER]
Gu
a R
apida de Matlabdvips .
m
at
ans =
>>
log(10) [ENTER]
ans =
>>
Logaritmo neperiano.
2.3026
(3+2^3*i)+(-1+5*i) [ENTER]
ans =
>>
6000000
Suma de complejos.
2.0000+13.0000i
(1-2*i)*(2+2*i) [ENTER]
ans =
Producto de complejos.
6.0000-2.0000i
asin(x), arco tangente: atan(x), raz cuadrada: sqrt(x), logaritmo en base 10: log10(x), . . .
>>
tan(pi/4) [ENTER]
ans =
>>
Tangente de /4.
1.0000
tan(pi/4); [ENTER]
La misma operaci
on pero sin salida por pantalla.
>>
2.1.3
Existen diferentes formatos de salida para los datos en MATLAB. Veamos algunos ejemplos.
>>
d=1/33
d=
>>
>>
>>
3.0303e-002
Formato largo.
0.03030303030303
>>
0.0303
3.030303030303030e-002
Formato racional.
1/33
>>
1/0 [ENTER]
ans =
>>
Inf
5*Inf [ENTER]
ans =
Divisi
on por cero.
Multiplicaci
on por infinito.
Inf
Gu
a R
apida de Matlabdvips .
m
at
2.2 Asignaciones
2.2
Asignaciones
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 informar
a 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 aplicaci
on.
Destaquemos un hecho importante: MATLAB distingue entre may
usculas y min
usculas por lo que
las mismas variables ni lo ser
an tampoco
x y X no seran
donde
a puede ser una constante, el valor de otra variable o el valor de una expresi
on aritm
etica.
1) Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden
realizar.
>>
a=2 [ENTER]
a=
>>
1 2 3 4 5 6 7 8 9 10
a+b [ENTER]
ans =
>>
Asignaci
on del valor 4 a la variable x.
b=1:1:10 [ENTER]
b=
>>
Asignaci
on del valor 2 a la variable x.
x=x+2 [ENTER]
x=
>>
x=a [ENTER]
x=
>>
Asignaci
on del valor 2 a la variable a.
3 4 5 6 7 8 9 10 11 12
a*b [ENTER]
ans =
2 4 6 8 10 12 14 16 18 20
>>
c=1:5:25 [ENTER]
>>
b+c [ENTER]
??? Error using ==> +
Matrix dimensions must be agree
c=
Declaramos el vector c.
1 6 11 16 21
Sumamos los vectores b y c.
3) Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente.
>>
b=0:2:20 [ENTER]
b=
>>
>>
0 2 4 6 8 10 12 14 16 18 20
c=0:1:10 [ENTER]
c=
Declaramos el vector b.
Declaramos el vector c.
0 1 2 3 4 5 6 7 8 9 10
0 2 8 18 ...200
Gu
a R
apida de Matlabdvips .
m
at
2.2 Asignaciones
>>
b*c [ENTER]
pantalla)
>>
b*c [ENTER]
ans =
770
olo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un
4) No s
vector o el seno de un vector, etc... obteniendo el logaritmo o el seno de cada una de sus componentes.
>>
b=1:10; [ENTER]
>>
log(b) [ENTER]
ans =
>>
Tres
ultimas columnas.
Seno del vector b.
Columns 1 through 7
0.8415 0.9093 ...0.6570
Columns 8 through 10
0.98954 0.4121 -0.5440
1 2 3 4 5
2.^c [ENTER]
ans =
>>
c=1:1:5 [ENTER]
c=
>>
Columns 1 through 7
0 0.6931 ...1.9459
Columns 8 through 10
2.0794 2.1972 2.3026
sin(b) [ENTER]
ans =
>>
Declaramos el vector b.
Logartimo del vector b.
2 4 8 16 32
c.^ 2 [ENTER]
ans =
1 4 9 16 25
>>
>>
>>
3
6
9
Tama~
no de la matriz A.
3 3
>>
size(A) [ENTER]
ans =
>>
A(:,3) [ENTER]
ans =
>>
1 2 3
4 5 6
7 8 9
A(2,2) [ENTER]
ans =
Definici
on de la matriz A.
1 2 1
2 1 2
1 2 1
A*B [ENTER]
Gu
a R
apida de Matlabdvips .
10
m
at
ans =
8 10 8
20 25 20
32 40 32
who que nos permite conocer el numero y nombre de las variables usadas a lo
>>
who [ENTER]
Your variables are:
A
u
vfil x
ans vcol w
y
>>
whos [ENTER]
Name Size Bytes
A
ans
u
vcol
vfil
w
x
y
3x4
4x1
1x1
4x1
1x4
1x1
1x1
1x1
96
32
8
32
32
8
8
8
Class
double
double
double
double
double
double
double
double
array
array
array
array
array
array
array
array
>>
clear [ENTER]
Si ahora tecleamos
2.3
Ficheros *.m
numerador=12^3
denominador=3.2E-3
11
m
at
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:
>> prueba1
numerador = 1728
denominador =
x=
0.0032
540000
En lo sucesivo
esta ser
a 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
stas son de
Las estructuras de control permiten organizar adecuadamente las acciones a realizar por el procesador. E
tres tipos:
Seleccion: Esta estructura actua sobre una proposicion o condicion booleana con dos posibles valores mutuamente excluyentes: Verdadero o Falso
Si C es la condici
on y A y B son las acciones o secuencia de acciones
SEUDOCODIGO:
EN MATLAB:
CODIFICACION
si C entonces
if C
acci
on A
acci
on A
else
sino
acci
on B
acci
on B
finsi
end
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
disp(Has acertado)
end
if n<-2 | n>10
Gu
a R
apida de Matlabdvips .
12
m
at
SEUDOCODIGO:
EN MATLAB:
CODIFICACION
si C1 entonces
acci
on A1
if C1
sino
acci
on A1
si C2
elseif C2
acci
on A2
finsi
acci
on A2
else
acci
on A3
finsi
acci
on A3
end
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
SEUDOCODIGO:
EN MATLAB:
CODIFICACION
mientras C hacer
while C
acci
on A
finmientras
Gu
a R
apida de Matlabdvips .
acci
on A
end
13
m
at
n=1;
while prod(1:n)<1e100
n=n+1;
disp(Nos llegamos en),n
end
2) Sin n
umero predeterminado de iteraciones y con la condici
on al final. Si C es la condici
on y A es la acci
on
o secuencia de acciones:
EN MATLAB:
CODIFICACION
SEUDOCODIGO:
while 1
hacer
acci
on A
acci
on A
mientras C
if C,break, end
end
3) Con n
umero predeterminado de iteraciones. Esta estructura repite una acci
on o una secuencia de ellas un
n
umero fijo de veces que viene determinado por una variable
inicial
negativo.
Si A es una acci
on o secuencia de acciones:
SEUDOCODIGO:
para
hacer
EN MATLAB:
CODIFICACION
for
contador=vi,vf,paso
acci
on A
acci
on A
finpara
end
for n=1:1:10
y(n)=n^2;
x(n)=2*y(n);
end
%
%
%
%
y,x
>>
prueba [ENTER]
y = 1 4 9 16...100
x=
2 8 18...200
contador puede recorrer los valores que queramos como se muestra en el siguiente
14
m
at
La ejecuci
on del fichero prueba muestra
>>
prueba [ENTER]
x=
2 4 6 0 0 11 14
contiene la variable
se avisa con un
2.5
2.5.1
>>
VARIABLE
VARIABLE [ENTER]
2) Para escribir el valor de una variable en un fichero con un formato establecido utilizaremos los siguientes comandos:
fid=fopen(nombre-fichero,permisos)
donde
r+
w+
a+
Escribimos el contenido de la variable o variables datos con el formato que indiquemos en format con el
siguiente comando
>>
fprintf(fid,format,datos)
fclose(fid)
1 y si no es as
devolver
a 0.
Gu
a R
apida de Matlabdvips .
15
m
at
t=0:1:10
y=t.^2
fid=fopen(parabola.dat,w)
x=[t;y];
fprintf(fid,%1.1f
% 2.6e,x) %
%
%
%
%
fclose(fid)
ejemplo:
>>
Crea la variable a
>>
b=2:2:10;
Crea la variable b
>>
save datos1
>>
save datos2 a
>>
clear
>>
whos
>>
load datos2
>>
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
Gu
a R
apida de Matlabdvips .
16
m
at
2.5.2
Lectura de datos
VARIABLE
el ejemplo
>>
12
2) Para leer el valor de una variable en un fichero con un formato establecido se puede utilizar el comando
Mostremos el siguiente ejemplo: Dado el fichero
load.
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 opci
on 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
Gu
a R
apida de Matlabdvips .
17
m
at
2.6 Programaci
on modular: Funciones
fid=fopen(parabola.dat,r)
z=fscanf(fid,%1.1f
%
%
%
%
fclose(fid)
2.6
Programaci
on modular: Funciones
En programaci
on, al realizar una operaci
on, aparecen con frecuencia los siguientes problemas:
subprogramas m
as sencillos.
En relaci
on con el modo de definir funciones haremos las siguientes observaciones:
1) Se guarda como un fichero
function[salida1,...,salidaN]=nombre(entrada1,...,entradaM)
seguido por los comandos del programa.
on termina su tarea con el
ultimo comando del programa, sin necesidad de ning
un comando especfico,
3) La funci
aunque
esta acci
on es posible con el comando
return.
factorial
18
m
at
donde la funci
on
function[k]=factorial(n)
k=1;
for m=2:1:n
k=k*m;
end
2.7
Otras Observaciones
>>
3) Para obtener ayuda sobre MATLAB debemos de teclear cualquiera de los comandos
>>
help [ENTER]
>>
helpwin [ENTER]
>>
dir
>>
cd directorio
>>
del fichero
Gu
a R
apida de Matlabdvips .
19
Captulo 3
Gr
aficos con MATLAB
3.1
Gr
aficos de dos dimensiones
3.1.1
plot.
El comando plot
>>
plot es el siguiente
plot(argumentos)
Argumentos
Explicaci
on
plot(x)
plot(x,y)
x IR
x, y IRn
plot(z)
z Cn
plot(A)
A Mmn
plot(x,A)
x IRn , A Mmn
plot(A,x)
x IRn , A Mmn
En las mismas condiciones que el caso anterior dibuja los pares ordeEjecuta
plot(A,B)
A,B Mmn
nados siendo
de
B.
En la misma gr
afica, cada lnea se dibuja con un color y con un tipo
de lnea diferente.
Veamos algunos ejemplos. Al ejecutarlos por primera vez aparece una nueva ventana que es la ventana gr
afica, en
esta se muestra el dibujo realizado por
Gu
a R
apida de Matlabdvips .
20
m
at
3.1 Gr
aficos de dos dimensiones
>>
>>
>>
plot(x,y); [ENTER]
20
15
10
0
4
Dibujemos un vector de n
umeros complejos:
>>
>>
plot(z); [ENTER]
2.8
0.5
0.5
1.5
1.2
Para dibujar n
umeros complejos tambi
en se pueden utilizar los comandos
y
1.4
1.6
1.8
2.2
2.4
2.6
25
>>
20
>>
plot(A); [ENTER]
15
10
Gu
a R
apida de Matlabdvips .
1.5
2.5
3.5
4.5
21
m
at
3.1 Gr
aficos de dos dimensiones
>>
>>
>>
plot(x,A); [ENTER]
25
20
15
10
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
1.5
Tambi
en podemos dibujar diferentes funciones en el mismo
gr
afico.
>>
x=0:0.1:2; [ENTER]
>>
>>
plot(x,A); [ENTER]
0.5
0.5
0.2
0.4
0.6
0.8
1.2
1.4
1.6
1.8
1.8
1.6
>>
1.4
plot(A,x) [ENTER]
1.2
0.8
0.6
0.4
0.2
0
1
3.1.2
0.5
0.5
1.5
plot(x,y,cad)
Dibuja la gr
afica de abcisas
dadas por
cad.
plot(x1,y1,cad1, x2,y2,cad2,...)
Gu
a R
apida de Matlabdvips .
22
m
at
3.1 Gr
aficos de dos dimensiones
.
*
x
o
+
s
d
p
h
v
<
>
^
punto
estrella
cruz
crculo
Lneas
--.
:
Colores
s
olida
discontnua
punto-raya
punteada
m
as
cuadrado
rombo
pent
agono
y
g
m
b
c
w
r
k
amarillo
verde
magenta
azul
cyan
blanco
rojo
negro
hex
agono
tri
angulo abajo
tri
angulo izquierda
tri
angulo derecha
tri
angulo arriba
>>
x=-pi:0.05:pi; [ENTER]
0.4
>>
plot(x, sin(x).*cos(x),o);
[ENTER]
0.3
0.2
0.1
0.1
0.2
0.3
0.4
0.5
4
n=50;
a=0;
b=3;
x=linspace(a,b,n);
e1=exp(-x.^2);
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);
Gu
a R
apida de Matlabdvips .
% Construimos el vector x
% y los vectores de abcisas
23
m
at
3.1 Gr
aficos de dos dimensiones
La ejecuci
on del fichero anterior desde la ventana de MATLAB
0.9
0.8
ex , x2 ex , x ex y ex ,
0.7
diferenci
andolas mediante distintos estilos de lnea.
0.6
0.5
0.4
0.3
0.2
0.1
3.1.3
0.5
1.5
2.5
Otros comandos
Concluimos la secci
on con dos comandos gr
aficos 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 m
as que indica el margen de error. En concreto:
Argumentos
errorbar(x,y,e,cad)
x, y, e IRn ,
cad es una
variable cadena
errorbar(x,y,u,e,cad)
x, y, e IRn ,
cad es una
variable cadena
Explicaci
on
opcional.
Ejecuta
3.5
>>
x=linspace(0,10,50); [ENTER]
>>
y=exp(sin(x)); [ENTER]
>>
delta=0.15*y; [ENTER]
>>
errorbar(x,y,delta); [ENTER]
2.5
1.5
0.5
0
2
10
12
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. M
as concretamente,
El segundo de los comandos es
Gu
a R
apida de Matlabdvips .
24
m
at
3.2 Gr
aficos con n
umeros complejos
Argumentos
Explicaci
on
lim IR2 ,
fcn, cad cadenas
Dibuja el gr
afico de la funci
on especificada en la cadena
lim IR4 ,
fcn, cad cadenas
lim IR(2 o 4) ,
tol IR,
fcn, cad cadenas
Dibujemos la funci
on seno en el intervalo
>>
cisi
on con
[0, 10]:
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
10
3.2
Gr
aficos con n
umeros complejos
polar(theta,r)
pol2cart(theta,r)
>>
r = linspace(0,2); [ENTER]
>>
>>
>>
z = x+i*y; [ENTER]
>>
plot(z); [ENTER]
1.5
0.5
0.5
1.5
2
2
Gu
a R
apida de Matlabdvips .
1.5
0.5
0.5
1.5
25
m
at
3.2 Gr
aficos con n
umeros complejos
r=e
cost
2 cos 4 t + sin
t5
12
>>
t = linspace(0,22*pi,1100);[ENTER]
>>
r = exp(cos(t))-2*cos(4*t)+sin(t.5 /12);[ENTER]
>>
polar(t,r);[ENTER]
5.0543
60
2.5272
150
180
210
>>
[x,y] = pol2cart(t,r);[ENTER]
>>
plot(x,y);[ENTER]
30
330
240
300
270
4
3
Un vector de n
umeros complejos pueden ser dibujado tambi
en con los comandos
Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento
y magnitud del n
umero complejo que tiene ese par de coordenadas reales.
la matriz compleja
Como
coordenadas.
Dibuja un histograma de
angulos, es decir, un histograma circular mostrando
rose(v,n)
el caso de no especificar
Veamos algunos ejemplos. Sea
v ; se utilizan n intervalos. En
n, el valor por defecto es 36.
la frecuencia de los
angulos dados en el vector
1+i
2 i 3 5i
Z = 4 + 3 i 5 5 i
i
1 i 3 + 3 i
1
>>
>>
clf; [ENTER]
>>
>>
>>
>>
Gu
a R
apida de Matlabdvips .
26
m
at
3.3 Gr
aficos en otros sistemas coordenados
quiver
feather
3.5
2.5
2
1.5
1
4
0.5
0
120
compass
90 7.0711
60
3.5355
150
330
300
270
60
1
150
240
10
rose
90 2
30
210
120
180
3.3
6
5
30
180
210
330
240
300
270
Gr
aficos en otros sistemas coordenados
El comando
plot dibuja graficos en coordenadas cartesianas; sin embargo, tambien es posible utilizar otros sistemas
de coordenadas.
Utiliza coordenadas logartmicas en el eje x. El resultado es el mismo que
semilogx(x,y)
semilogy(x,y)
loglog(x,y)
Gu
a R
apida de Matlabdvips .
27
m
at
>>
x=linspace(0,7); [ENTER]
>>
y=exp(x); [ENTER]
>>
>>
subplot(2,1,2); semilogy(x,y);
[ENTER]
1200
1000
800
600
400
200
0
10
10
10
10
10
3.4
Controlando los gr
aficos
Los gr
aficos en MATLAB son objetos y los comandos que mostramos en esta secci
on son algunos de los que se utilizan
para definir y modificar esos objetos y el entorno en el que se crean.
figure(gfc)
clf
delete(n)
clc
home
hold on
hold off
hold
ishold
n.
hold off.
hold on.
Intercambia las opciones hold on a hold off y viceversa.
Desactiva la opci
on
Es un comando l
ogico que devuelve 1 si para el actual gr
afico est
a activada
la opci
on
hold on
o 0 en caso contrario.
subplot(m,n,p)
subplot
>>
x=linspace(-10,10,1000); [ENTER]
>>
y11=(-x).*sin(x); [ENTER]
>>
y12=(-x).*cos(x)-sin(x); [ENTER]
Gu
a R
apida de Matlabdvips .
28
m
at
>>
y21=diff(y11)./(x(2)-x(1)); [ENTER]
>>
y22=(y21-y12(1:999))./norm(y12); [ENTER]
>>
>>
>>
>>
La derivada
10
4
5
2
0
0
2
4
6
8
10
10
10
10
Aproximacion a la derivada
10
x 10
10
6
5
4
0
2
0
5
2
10
10
10
4
10
10
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 n
umero de la red de acuerdo
Editamos un fichero
z0
zi+1
= 0
= zi2 + .
100) que
> 0. Se genera de esta
function
y = mandelb(renum,imnum)
epsilon=1e-14;
renum=input(renum:
imnum=input(imnum:
);
);
Gu
a R
apida de Matlabdvips .
% Programa Mandelbrot
29
m
at
Imval=Imval*i;
Cgrid=Reval+Imval;
for reind=1:renum
disp([reind=,int2str(reind)]);
for imind= 1:imnum
c=Cgrid(reind,imind);
numc=0;
zold=0.0+0.0*i;
z=zold^2+c;
%
%
%
%
subplot(2,2,2);
contour(reval1, imval1, Mandelbrot, 100)
subplot(2,1,2);
surf(Reval,Imvalreal, Mandelbrot);
view(2);
shading flat;
un color colormap(flipud(jet));
Gu
a R
apida de Matlabdvips .
Borra la figura
Fondo negro
Esquina superior izquierda
Dibuja la red en tres dimensiones
30
m
at
1.5
1
100
0.5
50
0
0.5
0
1
0
1
1.5
2
1.5
100
80
0.5
60
0
40
0.5
20
1
1.5
2
1.5
0.5
0.5
axis
tres dimensiones
axis(v)
gartmica, tambi
en se utilizan valores actuales, no logartmicos).
axis(axis)
hold.
cad utilizada:
normal Modifica la ventana grafica para que la caja del dibujo vuelva
al tama
no habitual.
Gu
a R
apida de Matlabdvips .
31
m
at
zoom on
con el bot
on derecho. Tambi
en permite seleccionar un
area para visualizarla
mejor.
zoom off
zoom
zoom out
zoom.
Establece la escala.
>>
t=0:0.2:2*pi+0.2; [ENTER]
>>
x=sin(t); [ENTER]
>>
y=cos(t); [ENTER]
0.5
>>
subplot(3,1,1); [ENTER]
>>
plot(x,y,-); [ENTER]
>>
subplot(3,1,2); [ENTER]
>>
plot(x,y,-); [ENTER]
>>
>>
subplot(3,1,3); [ENTER]
>>
plot(x,y,-); [ENTER]
>>
>>
grid; [ENTER]
>>
0
0.5
1
1
0.6
0.4
0.2
0.2
0.4
0.6
0.8
0.5
0
0.5
1
1
2
0
2
2
1.5
0.5
0.5
1.5
grid.
Gu
a R
apida de Matlabdvips .
grid on
grid off
grid
0.8
32
m
at
title(txt)
xlabel(txt),
ylabel(txt),
zlabel(txt)
tivamente.
Las coordenadas
text(x,y,txt)
gtext(txt)
legend(st1,st2, ...)
legend(l1,st1,
l2,st2, ...)
legend off
Tambi
en hay comandos que convierten los n
umeros en variable cadenas,
pueden ser
utiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto.
El siguiente programa dibuja un camino aleatorio (mediante la funci
on
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 gr
afico.
Gu
a R
apida de Matlabdvips .
33
m
at
Random walk
2
1
Fin
Inicio
4
9
Los comandos
[x,y]=ginput
x e y. El proceso termina
[x,y]=ginput(n)
waitforbuttonpress
Lee
Detiene el dibujo de gr
aficos hasta que se presiona una tecla o un bot
on del
rat
on.
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]);
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 R
apida de Matlabdvips .
34
m
at
3.5
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.
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.
Dibuja los niveles especificados en el vector v.
Dibuja las curvas de nivel de la matriz
contour(Z,n,cad)
contour(Z,v)
contour(x,y,Z,n,v)
contourc
contour3
clabel(C)
contour3.
manualmente indic
andolo con la etiqueta manual.
Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una funci
on 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]
40
>>
v2=0:4; [ENTER]
30
>>
contour(Z,v1,k-); [ENTER]
20
>>
10
>>
contour(Z,v2,k--); [ENTER]
>>
>>
subplot(2,1,2); [ENTER]
>>
>>
C=contour(Z); [ENTER]
clabel(C); [ENTER]
10
15
20
25
35
1
40
40
45
40
45
2 3
1
30
0
1
0
20
2
1
10
1 0
0
5
30
10
15
20
25
30
35
buci
on gaussiana en dos dimensiones.
Gu
a R
apida de Matlabdvips .
35
m
at
Z . El
x e y de longitudes n y m, respectivamente, para los valores de la red. En la
En ocasiones puede ser necesario definir una determinada red para dibujar las curvas de nivel de una matriz
dominio se define mediante dos vectores
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)
[X,Y,Z]=cylinder(r,n)
[x,y,z]=sphere(n)
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 R
apida de Matlabdvips .
36
m
at
3.6 Gr
aficos en 3-D
El resultado es el siguiente gr
afico.
sen(x)*sen(y)
sen(r)/r
8
60
6
50
40
2
0
30
2
20
10
6
10
20
30
40
x0.5 x3 + 0.2 y2 + 1
sen(r)/r
20
10
0.5
10
25
0.5
20
15
10
10
15
20
25
0
5
Una informaci
on m
as completa de las curvas de nivel la podemos conseguir si adem
as dibujamos el gradiente de la
superficie, que se obtiene gracias a la funci
on
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]
>>
>>
quiver(DZDX,DZDY); [ENTER]
>>
30
25
20
15
10
3.6
10
15
20
25
30
Gr
aficos en 3-D
Existen varios comandos que nos permiten dibujar superficies en tres dimensiones. El primero de ellos es el comando
plot3.
Gu
a R
apida de Matlabdvips .
37
m
at
3.6 Gr
aficos en 3-D
x1, y1,
z1. La seleccion del estilo de lnea es opcional y se elige con cad. Todos
Dibuja un gr
afico 3-D que pasa por las coordenadas de los vectores
plot3(x1,y1,z1,cad)
los vectores deben tener la misma longitud. Este comando permite dibujar
varios gr
aficas a la vez en la misma ventana gr
afica.
plot3(X,Y,Z)
Dibuja gr
aficos para cada columna de las matrices
>>
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]
>>
>>
0.5
0
0.5
Inicio
1
1.5
2
Fin
2.5
3
3
2
1
1
0
0
1
1
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
tener en cuenta las mismas consideraciones que para dibujar las curvas de nivel.
Dibuja la matriz
mesh(Z)
mesh(Z,C)
mesh(U,V,Z,C)
meshc(...)
meshz(...)
hidden on-off
U y V.
Dibuja, con las mismas consideraciones que el caso anterior, una superficie
incluyendo las curvas de nivel bajo el gr
afico.
Dibuja una superficie incluyendo una red de referencia en el plano
XY .
on
2)
Gu
a R
apida de Matlabdvips .
38
m
at
3.6 Gr
aficos en 3-D
3)
f (x, y) =
p
sin x2 + y 2
, (x, y) [8, 8] [8, 8].
x2 + y 2
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 gr
afico
x0.5*x3+0.2*+y2+1
sin(x)*sin(y)
20
10
0
0
1
100
10
40
60
50
30
20
40
0
20
20
0
x0.5*x3+0.2*+y2+1
10
0
sin(r)/r)
20
10
0
0
10
40
1
40
30
20
20
0
Gu
a R
apida de Matlabdvips .
10
0
40
20
20
0
39
m
at
3.6 Gr
aficos en 3-D
Mostramos a continuaci
on otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el
caso anterior, creamos la red y luego evaluamos la funci
on.
surf(X,Y,Z, C)
surfc(X,Y,Z, C)
surfl(X,Y,Z, ls,r)
[Nx,Ny,Nz] =
surfnorm(X,Y,Z)
diffuse(Nx,Ny,Nz,ls)
f (r) =
sin r
con las curvas de nivel en el plano XY .
r
sin(r)/r
>>
>>
[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]
0.5
0.5
10
10
5
5
0
0
5
5
10
10
Repitamos el ejemplo a
nadiendo los vectores normales mediante el comando
Gu
a R
apida de Matlabdvips .
surfnorm.
40
m
at
3.6 Gr
aficos en 3-D
>>
clf; [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]
sin(r)/r
1.2
1
0.8
0.6
0.4
0.2
0
0.2
0.4
10
10
5
5
0
0
5
5
10
10
[X,Y]=meshgrid(-3:1/8:3);
Z=peaks(X,Y).*sin(X);
[Nx,Ny,Nz]=surfnorm(Z);
s=[-3 -3 2];
k1=[0,1,0,0];
k2=[0,0,1,1];
subplot(2,2,1);
surfl(X,Y,Z,s); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
subplot(2,2,2);
surfl(X,Y,Z,s,k1); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
subplot(2,2,3);
surfl(X,Y,Z,s,k2); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
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))
Gu
a R
apida de Matlabdvips .
41
m
at
3.6 Gr
aficos en 3-D
shading interp.
surf y mesh pueden ser utilizados para dibujar una funcion en una red no uniforme. Ahora podemos
view(v,h)
escalar
[v,h]=view
view(r)
h el angulo de elevacion.
r=[x y z].
view(n)
dos y con
view
view(T)
Se utiliza
n = 2 en dimension
viewmtx(v,h,s,r)
Con el comando
4 4).
view obtenemos una superficie ya conocida pero desde un punto de vista distinto.
sin(r)/r
1
0.5
0.5
8
Tambi
en es posible utilizar el comando
el comando
view([1 0.6 0.35]) muestra como el crculo se puede dibujar en tres dimensiones.
Gu
a R
apida de Matlabdvips .
42
m
at
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
0.5
1
1
0.5
0
0.5
0.5
slice.
[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]
25
20
15
10
0
25
20
25
15
20
15
10
10
5
0
Se
nalemos que existen otros muchos comandos para realizar y modificar gr
aficos como es el comando
rot90 que
3.7
Gu
a R
apida de Matlabdvips .
43
m
at
shading type
flat todas las caras se dibujan en colores constantes desde las esquinas
de las caras.
sin(r)/r
0.5
0.5
10
10
5
5
0
0
5
5
10
10
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 habitualmente en relaci
on al m
aximo y el mnimo de la superficie. El comando
colormap(Cm)
colorbar(horiz)
Sit
ua como mapa de colores actual a
gray(m)
hsv(m)
hot(m)
cool(m)
bone(m)
copper(m)
pink(m)
flag(m)
prism(m)
jet(m)
white(m)
m
m
m
m
m
m
m
m
tonos de grises.
tonos de colores brillantes.
tonos de colores calientes.
tonos de colores fros.
tonos de colores hueso.
tonos de colores copper.
tonos de colores en rosa.
tonos de colores de banderas (EE.UU.).
A
nadamos a la figura anterior la barra de colores.
Gu
a R
apida de Matlabdvips .
44
m
at
rgb2hsv(Cm)
rgbplot(Cm)
hsv2rgb(Cm).
Cm.
v.
v devuelve el intervalo habitual. Si se especifica auto
caxis(v)
Si no se especifica
spinmat(t,s)
brighten(Cm,s)
nt=brighten(Cm,s)
whitebg
whitebg(cad)
3.8
rgb.
Copia de la ventana gr
afica
print fichero
print -deps fichero
[str, dev] =printopt
orient cadena
Manda a
print.
Establece la orientaci
on 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 orientaci
on actual en una cadena.
Gu
a R
apida de Matlabdvips .
45
Bibliografa
[1]
sar Gutie
rrez, Carmen Martnez,Gua R
Oscar Angulo, Eduardo Cuesta, Ce
apida de MATLAB,
IICE, 2001.
[2]
[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]
[7]
[8]
[9]
[10]
[11]
[12] www.mathworks.com
Gu
a R
apida de Matlabdvips .
46