Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Rapida Matlab PDF
Guia Rapida Matlab PDF
diciembre de 2001
Prólogo
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 dedicación muy exhaustiva a su explicación. Hemos
pretendido mostrar en esta guı́a los comandos y estructuras básicas 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 compañeros y alumnos a los cuales les queremos mostrar nuestro agradecimiento.
No está permitida la reproducción total o parcial de esta guı́a, ni su tratamiento informático, ni la transmisión de
ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, ni
su préstamo, alquiler o cualquier otra forma de cesión de uso del ejemplar, sin el permiso previo y por escrito de los
titulares del Copyright.
Angulo Torga, Óscar; Cuesta Montero, Eduardo; Gutiérrez Vaquero, César; Martı́nez Martı́nez, Marı́a del Carmen:
Profesores del Departamento de Matemática Aplicada a la Técnica; Valladolid, 2001.
UNIVERSIDAD DE VALLADOLID. INSTITUTO DE INVESTIGACIÓN DE CIENCIAS DE LA EDUCACIÓN.
ISBN: 84-
1 Introducción a MATLAB 4
1.1 Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Iniciando y finalizando una sesión con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 El entorno gráfico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Entorno gráfico de MATLAB para Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Introducción a MATLAB
(a) No hay que definir el tipo de las variables que se van a utilizar, ni el tamaño de las mismas.
(b) No hay que compilar los programas, como ocurre en los entornos de programación.
2) Frente a un lenguaje de programación no presenta incovenientes destacables. Además 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áticos son, entre otros:
(a) Al no estar pensado para el trabajo en linea de comandos no presenta ningún menú de acceso rápido a
procedimientos de uso frecuente (como el que tiene por ejemplo Derive).
(b) No posee una librerı́a de cálculo simbólico propio por lo que recurre a comandos de Maple. No obstante,
este no es el fin último de este programa y hay otros en el mercado más optimizados para este tipo de
cálculos.
Diversas operaciones se pueden realizar a través de los botones de acceso rápido, como abrir una nueva sesión,
imprimir un fichero, obtener ayuda, seleccionar un nuevo directorio de trabajo o ver el número de variables que
estamos utilizando en este momento.
>>
El sı́mbolo >> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de
MATLAB teclearemos:
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 análogas 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 operación tendremos que poner al final de la linea
punto y coma ”;” .
>> 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
2.2 Asignaciones
Uno de los elementos fundamentales en la programación 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 informará 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ón.
Destaquemos un hecho importante: MATLAB distingue entre mayúsculas y minúsculas por lo que x y X no serán
las mismas variables ni lo serán tampoco Nodos, nodos y NODOS.
Para realizar la asignación de valores a las variables en MATLAB no hace falta declarar el tipo de dato que se va a
asignar (entero, real, complejo o carácter) ni el tamaño del mismo (escalar, vector o matriz del tamaño que sea).
Seudocódigo: La asignación 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 expresión aritmética.
1) Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden
realizar.
3) Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente.
4) No sólo 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.
Un punto delante de los operadores .*, .^ y ./ indica que las operaciones se realizan componente a componente
en los vectores o las matrices.
ans = 8 10 8
20 25 20
32 40 32
Un comando de uso frecuente es who que nos permite conocer el número y nombre de las variables usadas a lo
largo del programa o de la sesión. Su formato es:
2) Tecleamos lo siguiente:
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,. . . )
>> prueba1
numerador = 1728
denominador = 0.0032
x= 540000
En lo sucesivo ésta será 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.
Observemos que la opcion else no es necesario utilizarla. Veamos otro ejemplo con la opción else.
Las estructuras de selección se pueden anidar de diferentes formas. Mostramos una de esas posibilidades.
SEUDOCÓDIGO:
si C1 entonces CODIFICACIÓN EN MATLAB:
acción A1 if C1
sino acción A1
si C2 elseif C2
acción A2 acción A2
finsi else
acción A3 acción A3
finsi end
Existen otras estructuras de selección con fines más especı́ficos como es la estructura switch que se puede
consultar en cualquier manual de MATLAB.
n=1;
while prod(1:n)<1e100
n=n+1;
disp(’Nos llegamos en’),n
end
2) Sin número predeterminado de iteraciones y con la condición al final. Si C es la condición y A es la acción
o secuencia de acciones:
CODIFICACIÓN EN MATLAB:
SEUDOCÓDIGO: while 1
hacer acción A
acción A if C,break, end
mientras C end
3) Con número predeterminado de iteraciones. Esta estructura repite una acción o una secuencia de ellas un
número 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 acción o secuencia de acciones:
SEUDOCÓDIGO:
para contador=vi hasta vf incr. paso CODIFICACIÓN EN MATLAB:
hacer for contador=vi,vf,paso
acción A acción A
finpara end
escribe VARIABLE
1) Para que el valor de VARIABLE aparezca por pantalla bastará teclear el nombre de la variable
2) Para escribir el valor de una variable en un fichero con un formato establecido utilizaremos los siguientes comandos:
>> fprintf(fid,format,datos)
• Cerramos el fichero abierto con el comando
>> fclose(fid)
En caso de que se produzca algún error al cerrar el fichero MATLAB devolverá el valor −1 y si no es ası́
devolverá 0.
En los manuales se pueden encontrar más detalles sobre el formato de los datos.
Cuando no sea necesario manejar directamente un fichero con los datos sino que únicamente necesitamos guardar
los datos para otra su uso en otra sesión, podemos utilizar el comando save. El formato se muestra en el siguiente
ejemplo:
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
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 opción 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
En el siguiente ejemplo se muestra como se puede leer el fichero creado en el ejemplo anterior
Para resolver este tipo de problemas se usan lo que se llaman funciones que no son más que programas que son utilzados
por otros programas.
Cualquier programa puede considerarse como una función 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 más sencillos.
En relación con el modo de definir funciones haremos las siguientes observaciones:
function[salida1,...,salidaN]=nombre(entrada1,...,entradaM)
seguido por los comandos del programa.
3) La función termina su tarea con el último comando del programa, sin necesidad de ningún comando especı́fico,
aunque ésta acción es posible con el comando return.
4) Desde la propia función se puede hacer llamadas a otras funciones o incluso a ella misma (lo que se conoce como
recursividad).
5) Las variables usadas en cada función toman un valor local. Por tanto, una variable con el mismo nombre en una
función 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 función llamada factorial
function[k]=factorial(n)
k=1;
for m=2:1:n
k=k*m;
end
1) Los sı́mbolos “,” “;” “:” sirven para: separar operaciones dentro de un lı́nea (“,”); para delimitar campos dentro
de un comando (“:”) ó para evitar que el resultado de un comando no salga por pantalla (“;”).
Los puntos “...” se usarán para continuar un comando cuando no nos quepa completo en un sola lı́nea.
3) Para obtener ayuda sobre MATLAB debemos de teclear cualquiera de los comandos
4) El sı́mbolo “%” indica a MATLAB que no tenga en cuenta lo que se encuentra a continuación en la misma lı́nea
(comentario). Esto vendrá 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
>> plot(argumentos)
Argumentos Explicación
n
plot(x) x ∈ IR Dibuja los pares de puntos (i, xi ), 1 ≤ i ≤ n, unidos por segmentos.
plot(x,y) x, y ∈ IRn Dibuja los pares de puntos (xi , yi ), 1 ≤ i ≤ m, unidos por segmentos.
Dibuja en el plano complejo los pares de puntos (<(zi ), =(zi )), 1 ≤
plot(z) z ∈ Cn
i ≤ n , unidos por segmentos.
Para cada j , 1 ≤ j ≤ n, dibuja los pares de puntos (i, aij ), 1 ≤ i ≤ m,
unidos por segmentos.
plot(A) A ∈ Mm×n
En la misma gráfica, cada lı́nea se dibuja con un color y con un tipo
de lı́nea diferente.
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 elección de la
plot(x,A) x ∈ IRn , A ∈ Mm×n fila y columna se tiene en cuenta la coincidencia de dimensiones.
En la misma gráfica, cada lı́nea se dibuja con un color y con un tipo
de lı́nea diferente.
En las mismas condiciones que el caso anterior dibuja los pares orde-
plot(A,x) x ∈ IRn , A ∈ Mm×n
nados siendo x el valor de las ordenadas
Ejecuta plot(x,y), donde x es una columna de A e y es una columna
de B.
plot(A,B) A,B ∈ Mm×n
En la misma gráfica, 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 gráfica, en
esta se muestra el dibujo realizado por plot (o cualquiera de los comandos que introduciremos), sin embargo, si vamos
realizando los ejemplos uno a uno sin cerrar la ventana gráfica ésta se oculta pasando a ser una ventana secundaria
en la que se van sustituyendo las gráficas por las que actualmente dibujamos. Cada vez que queramos ver una gráfica
tenemos que hacerla ventana principal ya que no se realiza automáticamente.
Dibujemos el vector de ordenadas y el de abcisas: 25
10
0
−4 −3 −2 −1 0 1 2 3 4 5
0.5
>> z=[1 2+i 3 2-i 3-2*i]; [ENTER]
>> plot(z); [ENTER] 0
−0.5
−1
−1.5
−2
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
Para dibujar números complejos también se pueden utilizar los comandos polar, quiver, feather, compass, rose
y pol2cart. (consultar la sección 3.2).
Dibujemos una matriz: 25
10
−5
1 1.5 2 2.5 3 3.5 4 4.5 5
20
−5
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4
1.5
−0.5
−1
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
1.6
1.4
>> plot(A,x) [ENTER]
1.2
0.8
0.6
0.4
0.2
0
−1 −0.5 0 0.5 1 1.5
Explicación
Dibuja la gráfica de abcisas x y ordenadas y con las opciones de estilo
plot(x,y,cad)
dadas por cad.
Dibuja la gráfica de abcisas x1 y ordenadas y1 con las opciones de
estilo dadas porcad1, la gráfica de abcisas x2 y ordenadas y2 con las
plot(x1,y1,cad1, x2,y2,cad2,...) 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 gráfico.
Los estilos de lı́neas y colores se determinan con una variable caracter de a lo sumo tres de caracteres que hemos
denotado por cad. Las ternas se construyen con un carácter de cada columna sin importar el orden. Ası́ por ejemplo,
cad=’ys-’ dibuja una lı́nea amarilla, sólida y con cuadrados como marcadores, exactamente igual que cad=’s-y’ o
cad=’sy-’ aunque siempre es mejor ser homógeneos en cada uno de los usos de estos parámetros. Los tamaños 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.
0.3
>> plot(x, sin(x).*cos(x),’o’);
0.2
[ENTER]
0.1
−0.1
−0.2
−0.3
−0.4
−0.5
−4 −3 −2 −1 0 1 2 3 4
2 2 2
concreto las de las funciones e−x , x2 e−x , x e−x y e−x , 0.7
0.5
0.4
0.3
0.2
0.1
0
0 0.5 1 1.5 2 2.5 3
Argumentos Explicación
Ejecuta plot(x,y,cad) superponiendo las barras de error
x, y, e ∈ IRn ,
dadas por el vectore (de valores positivos) simétricamente
errorbar(x,y,e,cad) cad es una
por encima y por debajo de la gráfica. El argumento cad es
variable cadena
opcional.
x, y, e ∈ IRn , Ejecuta plot(x,y,cad), superponiendo en la gráfica corre-
errorbar(x,y,u,e,cad) cad es una spondiente las barras de error dadas por los vectores positivos
variable cadena u (las cotas superiores) y l (las cotas inferiores).
0.5
0
−2 0 2 4 6 8 10 12
El segundo de los comandos esfplot, 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ás concretamente,
Argumentos Explicación
Dibuja el gráfico de la función especificada en la cadena
lim ∈ IR2 ,
fplot(’fcn’, lim, cad) fcn en el intervalo de abcisas determinado por lim.
’fcn’, cad cadenas
La cadena cad que indica el estilo de lı́nea es opcional.
lim ∈ IR4 , Idem que el anterior pero lim determina también las
fplot(’fcn’, lim, cad)
’fcn’, cad cadenas ordenadas.
lim ∈ IR(2 ó 4) ,
fplot(’fcn’, lim, cad, En las mismas condiciones, pero especificando la pre-
tol ∈ IR,
tol) cisión con tol que por defecto es 2e − 3.
’fcn’, cad cadenas
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 1 2 3 4 5 6 7 8 9 10
Destaquemos que MATLAB obtiene automáticamente la escala de los ejes de la gráfica, utilizando el mı́nimo y el
máximo 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 sección 3.4).
−0.5
−1
−1.5
−2
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
240 300
>> [x,y] = pol2cart(t,r);[ENTER] 270
>> plot(x,y);[ENTER] 4
−2
−4
−3 −2 −1 0 1 2 3 4
Un vector de números complejos pueden ser dibujado también con los comandos quiver, feather, compass y
rose, tal y como se detalla a continuación.
Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento
quiver(x,y)
y magnitud del número complejo que tiene ese par de coordenadas reales.
Dibuja una flecha en las coordenadas (xi , yi ) con el argumento y magnitud
quiver(x,y,dx,dy)
dados por (dxi , dyi ).
El parámetro s indica la escala con la que se dibujan las flechas, que por
quiver(x,y, ...,s)
defecto toma el valor 1.
Dibuja flechas mostrando las magnitudes y argumentos de los elementos de
feather(z)
la matriz complejaz , estas flechas parten de puntos equidistantes del eje x.
Como feather pero en este caso todas ellas tienen como origen el origen de
compass(Z)
coordenadas.
Dibuja un histograma de ángulos, es decir, un histograma circular mostrando
rose(v,n) la frecuencia de los ángulos 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:
1+i 2 − i 3 − 5i
Z = −4 + 3 i 5 − 5 i i
−1 − i 3 + 3 i −1
>> 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]
quiver feather
3.5 4
3
2
2.5
2 0
1.5 −2
1
−4
0.5
0 −6
0 1 2 3 4 −5 0 5 10
compass
90 7.0711 rose
90 2
120 60 120 60
180 0 180 0
Como ejemplo dibujemos un gráfico en un sistema de coordenadas logarı́tmicas y lo comparamos con el mismo
gráfico en coordenadas cartesianas.
[ENTER]
400
200
0
0 1 2 3 4 5 6 7
4
10
3
10
2
10
1
10
0
10
0 1 2 3 4 5 6 7
figure(gfc) Permite mostrar la ventana gráfica actual y crear nuevas ventanas gráficas.
clf Borra el contenido la última ventana gráfica utilizada.
delete(n) Borra la ventana gráfica 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.
Permite superponer gráficos hasta que se desactiva la opción con el comando
hold on
hold off.
hold off Desactiva la opciónhold on.
hold Intercambia las opciones hold on a hold off y viceversa.
Es un comando lógico que devuelve 1 si para el actual gráfico está activada
ishold
la opción hold on ó 0 en caso contrario.
Un comando de uso muy frecuente es subplot, que se utiliza para dibujar en la misma ventana gráfica varios
dibujos. Este comando no dibuja nada, pero permite dividir la ventana gráfica en varias subventanas y dibujar en cada
una de ellas con cualquiera de los comandos vistos anteriormente y de los que veremos posteriormente.
Los siguientes comandos dibujan la función f (x) = −x · sin x, en la ventana superior izquierda, su derivada en
la ventana superior derecha, una aproximación de la derivada en la ventana inferior izquierda y el error relativo en la
ventana inferior derecha.
4
5
2
0
0
−2
−4
−5
−6
−8 −10
−10 −5 0 5 10 −10 −5 0 5 10
6
5
4
0 2
0
−5
−2
−10 −4
−10 −5 0 5 10 −10 −5 0 5 10
Las subventanas definidas por el comando subplot pueden ser de diferentes tamaños dentro de la misma ventana
como muestra el siguiente ejemplo.
Editamos un ficheroM-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úmero ξ de la red de acuerdo
con el siguiente algoritmo:
z0 = 0
zi+1 = zi2 + ξ.
El programa asigna al punto de la red que estamos calculando el número de iteraciones (con un máximo de 100) que
hacen falta para que los términos de la sucesión disten del lı́mite menos que una cantidad ε > 0. Se genera de esta
manera una matriz mandelbrot del mismo tamaño que la red.
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
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;
Mandelbrot(reind,imind)= numc;
end
end
subplot(2,2,2);
contour(reval1, imval1, Mandelbrot, 100) % Dibuja la red como un contorno
colorbar; axis([-2 1 -1.5 1.5]); % Dibuja la barra de colores al lado del gr\’afico
1.5
100 1
0.5
50
0
−0.5
0
1 1 −1
0 0
−1 −1 −1.5
−2 −2 −1 0 1
1.5 100
1 80
0.5
60
0
40
−0.5
−1 20
−1.5 0
−2 −1.5 −1 −0.5 0 0.5 1
Los ejes de cada dibujo son escalados automáticamente 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.
Devuelve los lı́mites del dibujo actual en un vector fila. Para gráficos de dos
axis dimensiones tiene los elementos [xmin xmax ymin ymax ] y para gráficos de
tres dimensiones [xmin xmax ymin ymax zmin zmax ].
Establece la escala de los ejes conforme al vector v
que será [xmin xmax ymin ymax ] en dos dimensiones o
axis(v)
[xmin xmax ymin ymax zmin zmax ] en tres dimensiones (en escala lo-
garı́tmica, también se utilizan valores actuales, no logarı́tmicos).
Bloquea la escala cuando se añaden dibujos posteriores a uno que se ha
axis(axis)
mantenido con el comando hold.
Obtenemos diferentes resultados dependiendo de la cadena cad utilizada:
• ’normal’ Modifica la ventana gráfica para que la caja del dibujo vuelva
al tamaño habitual.
También podemos cambiar la escala por medio del ratón y ello es posible gracias al comando zoom que se utiliza
como se muestra a continuación.
−0.5
>> plot(x,y,’-’); [ENTER] −1
−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1
>> subplot(3,1,2); [ENTER] 1
0
>> axis square; [ENTER] −0.5
title(txt) Escribe la variable cadena txt como un tı́tulo centrado encima del gráfico.
xlabel(txt),
Escribe la variable cadena txt como una etiqueta bajo el eje x, y y z respec-
ylabel(txt),
tivamente.
zlabel(txt)
Escribe la variable cadena txt en la posición (x, y) de la ventana gráfica.
Las coordenadas x e y están proporcionadas en las mismas unidades en las
que está dibujado el gráfico. Si x e y son vectores, la variable cadena se
text(x,y,txt)
escribe en todos los pares de puntos (xi , yi ). Si txt es un vector de variable
cadenas con el mismo número de filas que x e y, se escribe una de ellas en
cada una de las posiciones.
Escribe la variable cadena txt en la posición de la ventana de gráficos que
gtext(txt) elija el usuario. Una cruz indica la posición donde se quiere colocar el texto
y es seleccionada mediante las teclas de desplazamiento o mediante el ratón.
Escribe en un pequeño recuadro, las variables cadenas st1, st2, etc, al lado
legend(st1,st2, ...) de los estilos de linea utilizados en cada una de las gráficas. Este pequeño
recuadro puede moverse mediante el ratón.
legend(l1,st1,
Escribe una leyenda pero se especifican los estilos de lı́nea.
l2,st2, ...)
legend off Elimina la leyenda del dibujo actual.
También hay comandos que convierten los números en variable cadenas, num2str, int2str, sprintf, ... que
pueden ser útiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto.
El siguiente programa dibuja un camino aleatorio (mediante la función rand). Este camino se puede considerar
como una simulación 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.
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;
Random walk
2
Fin
0
Inicio
−1
y
−2
−3
−4
−9 −8 −7 −6 −5 −4 −3 −2 −1 0
x
Los comandos ginput y waitforbuttonpress proporcionan al programador de MATLAB herramientas para crear
programas interactivos simples.
El siguiente programa dibuja un gráfico con puntos especificados por el usuario. Cuando el dibujo termina, el
programa espera que el usuario haga clic en la figura antes de borrarlo.
[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);
Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una función de dos
variables.
>> [x,y]=meshgrid(-3:1/8:3);
[ENTER]
>> Z=peaks(x,y).*sin(x); [ENTER]
>> subplot(2,1,1); [ENTER]
40
>> v1=-4:-1; [ENTER]
30
>> v2=0:4; [ENTER]
20
>> contour(Z,v1,’k-’); [ENTER]
10
>> hold on; [ENTER]
>> contour(Z,v2,’k--’); [ENTER] 5 10 15 20 25 30 35 40 45
1
>> C=contour(Z); [ENTER] 30 2 0
−1 3
>> clabel(C); [ENTER] 20 0 −2
1 −3 −1 0
−2
10
0
5 10 15 20 25 30 35 40 45
Como puede verse hemoos utilizado el comando peaks que genera una matriz trasladando y reescalando la distri-
bución gaussiana en dos dimensiones.
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.
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 y 2 + 1 , x, y ∈ [−3, 3] × [−3, 3].
p
sin x2 + y 2
3) f (x, y) = , x, y ∈ [−8, 8] × [−8, 8].
x2 + y 2
La primera parte del programa genera la red y evalúa la función, 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’);
sen(x)*sen(y) sen(r)/r
8
60
6
50
4
40 2
30 0
−2
20
−4
10 −6
−8
10 20 30 40 −5 0 5
20 1
10 0.5
0 0
−10 −0.5
25
20 25 5
15 20 0 5
10 15 0
5 10 −5
5 −5
Una información más completa de las curvas de nivel la podemos conseguir si además dibujamos el gradiente de la
superficie, que se obtiene gracias a la función 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); 30
[ENTER]
>> contour(Z); [ENTER] 25
10
5 10 15 20 25 30
Dibuja un gráfico 3-D que pasa por las coordenadas de los vectores x1, y1,
z1. La selección del estilo de lı́nea es opcional y se elige con cad. Todos
plot3(x1,y1,z1,cad)
los vectores deben tener la misma longitud. Este comando permite dibujar
varios gráficas a la vez en la misma ventana gráfica.
Dibuja gráficos para cada columna de las matrices X, Y y Z, las cuales deben
plot3(X,Y,Z)
tener el mismo tamaño.
>> 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
−2
Fin
−2.5
−3
3
2 2
1
1
0
0
−1
−1 −2
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.
p
sin x2 + y 2
3) f (x, y) = , (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)’);
sin(x)*sin(y) x−0.5*x3+0.2*+y2+1
1 20
10
0
0
−1 −10
100 40
60 30
50 40 20 20
20 10
0 0 0 0
x−0.5*x3+0.2*+y2+1 sin(r)/r)
20 1
10
0
0
−10 −1
40 40
30 40
20 20 20
10 20
0 0 0 0
Mostramos a continuación otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el
caso anterior, creamos la red y luego evaluamos la función.
Las escalas de color usadas por los comandos pueden ser ajustadas (sección 3.7).
sin r
Dibujemos la función f (r) = con las curvas de nivel en el plano XY .
r
sin(r)/r
>> surfc(XX,YY,Z); 5 10
title(’sin(r)/r’); 0
0
5
[ENTER] −5
−5
−10 −10
0.6
title(’sin(r)/r’);
0.4
[ENTER]
0.2
−0.2
−0.4
10
5 10
5
0
0
−5
−5
−10 −10
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);
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;
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 función en una red no uniforme. Ahora podemos
incluir las matrices con las coordenadas para llamar a la rutina gráfica.
En muchas ocasiones un gráfico puede ser más fácil de visualizar si lo podemos observar desde un punto de vista
diferente.
Con el comando view obtenemos una superficie ya conocida pero desde un punto de vista distinto.
sin(r)/r
1
0.5
−0.5
−8 −6 −4 −2 0 2 4 6 8
También es posible utilizar el comando view en dos dimensiones. Ası́, si utilizamos en un gráfico de dos dimensiones
el comando view([1 0.6 0.35]) muestra como el cı́rculo se puede dibujar en tres dimensiones.
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
−1 −0.5
−1 0
−0.5
0 0.5
0.5
1 1
Para investigar las funciones de tres variables gráficamente, ya que no podemos representarlas, MATLAB posee el
comando slice.
Probamos el comando con la función f (x, y, z) = x2 +y 2 +z 2 y vemos lo que aparece en el cubo [−1, 1]×[−1, 1]×
[−1, 1]. Para ello definimos la red y evaluamos la función 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]); 25
[ENTER] 20
15
10
0
25
20 25
15 20
10 15
10
5
5
0 0
Señalemos que existen otros muchos comandos para realizar y modificar gráficos como es el comando rot90 que
nos permite rotarlos sobre la matriz definida.
• 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.
sin(r)/r
0.5
−0.5
10
5 10
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 habitual-
mente en relación al máximo y el mı́nimo de la superficie. El comando colormap se utiliza para decidir que mapa de
colores utiliza MATLAB.
[1] Oscar Angulo, Eduardo Cuesta, César Gutiérrez, Carmen Martı́nez,Guı́a Rápida 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, Métodos Numéricos con MATLAB, Prentice Hall, 2000.
[6] Eva Part-Enander, Anders Sjoberg, The MATLAB handbook, Addison-Wesley, 1996.
[8] Peregrina Quintela, Introducción a MATLAB y sus aplicaciones, Universidad de Santiago de Compostela,
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