Está en la página 1de 47

Guı́a Rápida de Matlab

Óscar Angulo, Eduardo Cuesta,


César Gutiérrez y Marı́a del Carmen Martı́nez

diciembre de 2001
Prólogo

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 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.

Valladolid, diciembre de 2001


Los Autores

Guı́a Rápida de Matlabdvips . 1


m
at

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-

Imprime: Servicio Reprografı́a COPIPAUMA

Guı́a Rápida de Matlabdvips . 2


Contenidos

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

2 Breve Introducción a la Programación en MATLAB 7


2.1 Principios con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Entrada y salida en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Aritmética elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.3 Diferentes formatos para los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Lectura y escritura de datos (Entrada/salida de datos) . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.1 Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.2 Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6 Programación modular: Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7 Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Gráficos con MATLAB 20


3.1 Gráficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.1 El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.2 Opciones del comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.3 Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Gráficos con números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3 Gráficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Controlando los gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Dibujando curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.6 Gráficos en 3-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7 Control del color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.8 Copia de la ventana gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Guı́a Rápida de Matlabdvips . 3


Capı́tulo 1

Introducción a MATLAB

1.1 Comentarios previos


Comencemos destacando que la filosofı́a del entorno MATLAB no es la de otros paquetes de matemáticas usuales,
tales como Derive, Maple o Mathematica.
Su filosofı́a se asemeja más a la de un lenguaje de programación que al de un paquete estándar de matemáticas
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ón:

(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.

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

(d) Presenta un manejo muy práctico de vectores y matrices.

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.

1.2 Iniciando y finalizando una sesión con MATLAB


MATLAB se arranca pulsando con el ratón en el icono correspondiente, e inmediatamente aparece la pantalla de la
figura ??.
Cualquier comando que se escribe tras el cursor de MATLAB será 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 Rápida de Matlabdvips . 4


1.3 El entorno gráfico de MATLAB bajo Windows m
at

Si se necesita detener la ejecución de un programa o de un comando MATLAB antes de su finalización normal es


necesario presionar simultáneamente la tecla [CTRL] y la tecla [C]. MATLAB detiene ası́ cualquier comando o programa
que estuviera ejecutándose en ese momento y devuelve el cursor a su estado original quedando preparado para ejecutar
el siguiente comando.

1.3 El entorno gráfico de MATLAB bajo Windows


La ventana de trabajo de MATLAB es una clásica ventana de Windows en la que aparece un menú de opciones y unos
cuantos botones de acceso rápido.
El menú de opciones se compone de cinco submenús File , Edit , View, Window y Help , cada uno de ellos con
las siguientes opciones

• Menú File : Con esta opción se puede, entre otras


cosas crear un nuevo elemento (bien un fichero
M-File, una figura o un modelo de Simulink);
abrir una nueva sesión, 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 selección o elegir las preferencias de
impresión; los últimos archivos utilizados; y aban-
donar el programa.

• Menú Edit : Posee las opciones de un edi-


tor clásico de textos para Windows, seleccionar
un texto (con los cursores o el ratón), cortar
un texto, copiar o pegar lo que tengamos se-
leccionado en el portapapeles, deshacer la última
acción, seleccionar todo el documento o bien bor-
rar las variables de la sesión.

Guı́a Rápida de Matlabdvips . 5


1.4 Entorno gráfico de MATLAB para Linux m
at

• Menú Help : Muestra todas las ayudas que nos


ofrece MATLAB y sobre las que nos extendere-
mos algo más en la última parte de esta intro-
ducción.

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.

1.4 Entorno gráfico de MATLAB para Linux


Señalemos 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ón similar a la siguiente:
Destaquemos por último 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ápida de Matlabdvips . 6


Capı́tulo 2

Breve Introducción a la Programación


en MATLAB

2.1 Principios con MATLAB


2.1.1 Entrada y salida en MATLAB
Al arrancar MATLAB aparecerá el sı́mbolo del sistema (además 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 Aritmética elemental


Comenzaremos viendo con varios ejemplos que las operaciones aritméticas habituales se realizan del modo esperado
con los operadores

suma: +, resta: −, producto: ∗, división: /, y exponencianción: ˆ.

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 números reales.
ans = 7.6967
>> 2,34*3 [ENTER] Ponemos una coma en lugar de un punto
ans = 2
ans = 102 ¿Qué ha hecho MATLAB?
>> 2E-2*3E8 [ENTER] Uso del exponente.

Guı́a Rápida de Matlabdvips . 7


2.1 Principios con MATLAB m
at

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 ”;” .

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


ans = 1.0000
>> tan(pi/4); [ENTER] La misma operación 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 indeterminación.

>> 1/0 [ENTER] División por cero.


ans = Inf
>> 5*Inf [ENTER] Multiplicación por infinito.
ans = Inf

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

Guı́a Rápida de Matlabdvips . 8


2.2 Asignaciones m
at

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.

>> a=2 [ENTER] Asignación del valor 2 a la variable a.


a= 2
>> x=a [ENTER] Asignación del valor 2 a la variable x.
x= 2
>> x=x+2 [ENTER] Asignación 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 ¿Qué 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 tamaño 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 Rápida de Matlabdvips . 9


2.2 Asignaciones m
at

>> 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 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.

>> 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 últimas 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 últimas 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 relación a la aritmética matricial mostramos algunas de las funciones más habituales.

>> A=[1 2 3;4 5 6;7 8 9] [ENTER] Definición 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 Rápida de Matlabdvips . 10


2.3 Ficheros *.m m
at

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:

>> who [ENTER]


Your variables are:
A u vfil x
ans vcol w y
donde las variables corresponden a otra ejecución del programa.
El comando whos nos muestra, además del nombre de las variables, información 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
Grand total is 28 elements usign 224 bytes
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
Debemos tener en cuenta que MATLAB en cada sesión mantiene en memoria todas las variables utilizadas hasta
ese momento y que únicamente 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 más a la de un lenguaje de programación que a la de un
software matemático de resolución de problemas simbólicos. En concreto, permite ejecutar una secuencia de comandos
escritos en un fichero ASCII sin más 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 pertimitirá 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 Rápida de Matlabdvips . 11


2.4 Estructuras de control 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: 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 é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.

2.4 Estructuras de control


Las estructuras de control permiten organizar adecuadamente las acciones a realizar por el procesador. Éstas son de
tres tipos:

• Secuenciación: Es la estructura de control más sencilla y fácil de utilizar y


consiste en la enumeración consecutiva de acciones a realizar.
No existe seudocódigo explı́cito para esta estructura aparte de
la propia escritura de las acciones

• Selección: Esta estructura actúa sobre una proposición o condición boo-


leana con dos posibles valores mutuamente excluyentes: Ver-
dadero o Falso
Si C es la condición y A y B son las acciones o secuencia de acciones

SEUDOCÓDIGO: CODIFICACIÓN EN MATLAB:


si C entonces if C
acción A acción A
sino else
acción B acción B
finsi 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 Rápida de Matlabdvips . 12


2.4 Estructuras de control m
at

disp(’Es otra prueba’)


end

Observemos que la opcion else no es necesario utilizarla. Veamos otro ejemplo con la opción 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 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

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 selección con fines más 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 repetición 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 más habituales:

1) Sin número predeterminado de iteraciones y con la condición al principio. Si C es la condición y A es la


acción o secuencia de acciones:

SEUDOCÓDIGO: CODIFICACIÓN EN MATLAB:


mientras C hacer while C
acción A acción A
finmientras end

Guı́a Rápida de Matlabdvips . 13


2.4 Estructuras de control m
at

Proponemos el siguiente ejemplo

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

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 programación y con la mayor parte del software
matemático, 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 Rápida de Matlabdvips . 14


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

x % Muestra por pantalla los vectores declarados.

La ejecución 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 última 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 éstos 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 más variables externamente, bien a la pantalla del ordenador,
bien a un fichero.
seudocódigo. Si el nombre de la variable es VARIABLE la acción escritura se escribe como

escribe VARIABLE

1) Para que el valor de VARIABLE aparezca por pantalla bastará 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 aparecerá en nuestro directorio
– permiso es un cadena que indica la operación a realizar con el fichero,
’r’ −→ Lectura
’w’ −→ Escritura (se crea si es necesario)
’a’ −→ Añadir 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 añadir 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 algún error al cerrar el fichero MATLAB devolverá el valor −1 y si no es ası́
devolverá 0.

Guı́a Rápida de Matlabdvips . 15


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

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 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:

>> 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 Rápida de Matlabdvips . 16


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

2.5.2 Lectura de datos


La lectura de datos nos permite asignar un valor a una o a más variables mediante acciones externas. bien desde el
teclado del ordenador ó bien desde un fichero.
seudocódigo. Si el nombre de la variable es VARIABLE la acción 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 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

• 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 número 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 tamaño 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 Rápida de Matlabdvips . 17


2.6 Programación modular: Funciones m
at

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 Programación modular: Funciones


En programación, al realizar una operación, 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 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:

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

2) Ha de estar encabezado por la linea

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

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


x=0;
for n=1:1:m
x=x+1/factorial(n);
end
x

Guı́a Rápida de Matlabdvips . 18


2.7 Otras Observaciones m
at

donde la función 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 introducción añadimos algunas observaciones más.

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 (“;”).

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


ans = 7

Los puntos “...” se usarán 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 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

Guı́a Rápida de Matlabdvips . 19


Capı́tulo 3

Gráficos con MATLAB

3.1 Gráficos de dos dimensiones


El usuario de MATLAB puede dibujar fácilmente 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 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

Guı́a Rápida de Matlabdvips . 20


3.1 Gráficos de dos dimensiones m
at

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

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


20
>> y=[16 4 0 1 9 25]; [ENTER]
>> plot(x,y); [ENTER]
15

10

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

Dibujemos un vector de números complejos:


1

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

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

-0.5; 5 25 0.5]; [ENTER]


>> plot(A); [ENTER] 15

10

−5
1 1.5 2 2.5 3 3.5 4 4.5 5

Guı́a Rápida de Matlabdvips . 21


3.1 Gráficos de dos dimensiones m
at

Si en el ejemplo anterior elegimos las ordenadas obtenemos: 25

20

>> 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 15

-0.5; 5 25 0.5]; [ENTER]


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

−5
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4

1.5

También podemos dibujar diferentes funciones en el mismo


gráfico. 1

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


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

−0.5

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

Podemos intercambiar los ejes sin más que escribir 1.8

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

3.1.2 Opciones del comando plot


Existe una serie de opciones para realizar gráficos con MATLAB entre las que destacamos las siguientes:

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

Guı́a Rápida de Matlabdvips . 22


3.1 Gráficos de dos dimensiones m
at

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.

Marcadores Lı́neas Colores


. punto - sólida y amarillo
* estrella -- discontı́nua g verde
x cruz -. punto-raya m magenta
o cı́rculo : punteada b azul
+ más c cyan
s cuadrado w blanco
d rombo r rojo
p pentágono k negro
h hexágono
v triángulo abajo
< triángulo izquierda
> triángulo derecha
^ triángulo arriba

Veamos algunos ejemplos.

Dibujamos una gráfica con cı́rculos.


0.5

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


0.4

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

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 Rápida de Matlabdvips . 23


3.1 Gráficos de dos dimensiones m
at

La ejecución del fichero anterior desde la ventana de MATLAB


0.9

nos muestra como se pueden superponer varias gráficas, en 0.8

2 2 2
concreto las de las funciones e−x , x2 e−x , x e−x y e−x , 0.7

diferenciándolas mediante distintos estilos de lı́nea. 0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.5 1 1.5 2 2.5 3

3.1.3 Otros comandos


Concluimos la sección con dos comandos gráficos de uso frecuente en MATLAB. El primero de ellos es el comando
errorbar, que nos permite incorporar a la gráfica, mediante barras verticales, el error cometido. Este comando se
usa como el comando plot, pero con un argumento más que indica el margen de error. En concreto:

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).

En este ejemplo generamos una serie de datos con cotas de 3.5

error de un 15%. Mostramos la gráfica con los errores como


sigue 3

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


2.5

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

>> delta=0.15*y; [ENTER] 1.5

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


1

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,

Guı́a Rápida de Matlabdvips . 24


3.2 Gráficos con números complejos m
at

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

Dibujemos la función seno en el intervalo [0, 10]: 1

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

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).

3.2 Gráficos con números complejos


Dibuja en coordenadas polares. tetha son los
Los elementos del vector
polar(theta,r)
r son las distancias al origen.
ángulos en radianes, y los elementos del vector
Convierte las coordenadas polares dadas por theta y r en coordenadas car-
pol2cart(theta,r)
tesianas.

Vamos a ver dos ejemplos.

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

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

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

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

>> plot(z); [ENTER]


0

−0.5

−1

−1.5

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

Guı́a Rápida de Matlabdvips . 25


3.2 Gráficos con números complejos m
at

En el segundo de los ejemplos dibujaremos la función


µ ¶
cost t5
r=e − 2 cos 4 t + sin
12
tanto en coordenadas polares como en coordenadas cartesianas.
90 5.0543
120 60

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

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

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

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

Los siguientes comandos producen en la misma ventana las diferentes gráficas.

>> 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 Rápida de Matlabdvips . 26


3.3 Gráficos en otros sistemas coordenados m
at

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

150 3.5355 30 150 1 30

180 0 180 0

210 330 210 330

240 300 240 300


270 270

3.3 Gráficos en otros sistemas coordenados


El comando plot dibuja gráficos en coordenadas cartesianas; sin embargo, también es posible utilizar otros sistemas
de coordenadas.

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


semilogx(x,y) utilizarplot(log10(x),y) pero no produce ningún error si tenemos que
calcular log10 0.
Es el mismo comando anterior, pero esta vez la escala logarı́tmica está en el
semilogy(x,y)
eje y.
loglog(x,y) Dibuja ambos ejes en escala logarı́tmica.

Como ejemplo dibujemos un gráfico en un sistema de coordenadas logarı́tmicas y lo comparamos con el mismo
gráfico en coordenadas cartesianas.

Guı́a Rápida de Matlabdvips . 27


3.4 Controlando los gráficos m
at

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


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

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

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

[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

3.4 Controlando los gráficos


Los gráficos en MATLAB son objetos y los comandos que mostramos en esta sección 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 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.

Divide la ventana gráfica en m filas y n columnas y hace que la subventana


subplot(m,n,p) p sea la actual. Las ventanas se numeran desde la izquierda a la derecha y
desde arriba hacia abajo. También puede ser utilizado como subplot(mnp).
subplot Pasa la ventana gráfica a su estado por defecto (subplot(1,1,1)) .

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.

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


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

Guı́a Rápida de Matlabdvips . 28


3.4 Controlando los gráficos m
at

>> 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]
La funcion La derivada
6 10

4
5
2

0
0
−2

−4
−5
−6

−8 −10
−10 −5 0 5 10 −10 −5 0 5 10

Aproximacion a la derivada −4 Error relativo cometido


x 10
10 8

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.

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 Rápida de Matlabdvips . 29


3.4 Controlando los gráficos m
at

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 Rápida de Matlabdvips . 30


3.4 Controlando los gráficos m
at

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:

• ’auto’ Vuelve a la escala automática.

• ’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.


axis(cad)
• ’square’ Modifica la ventana gráfica para hacer que la caja del dibujo
sea cuadrada.

• ’normal’ Modifica la ventana gráfica para que la caja del dibujo vuelva
al tamaño habitual.

• ’off’ No se muestran los ejes.

• ’on’ Deshace el comando anterior.

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.

Guı́a Rápida de Matlabdvips . 31


3.4 Controlando los gráficos m
at

Permite agrandar la ventana con el botón izquierdo del ratón, inhabilitándolo


zoom on con el botón derecho. También permite seleccionar un área 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] 1

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

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

−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

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

0
>> axis square; [ENTER] −0.5

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


−1 0 1

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


2
>> axis normal; [ENTER]
0
>> grid; [ENTER]
−2
>> axis([-2 2 -3 3]); [ENTER] −2 −1.5 −1 −0.5 0 0.5 1 1.5 2

En en el ejemplo anterior hemos utilizado el comando grid que describimos a continuación.

grid on Dibuja una red en la ventana gráfica.


grid off Borra la red de la ventana gráfica.
grid Intercambia las posiciones de grid.
En muchas ocasiones necesitamos incluir texto en la ventana gráfica para lo que podemos utilzar varios comandos.

Guı́a Rápida de Matlabdvips . 32


3.4 Controlando los gráficos m
at

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.

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áfico.

Guı́a Rápida de Matlabdvips . 33


3.4 Controlando los gráficos m
at

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.

Lee las coordenadas desde la ventana de gráficos. Aparece un cursor que se


maneja bien con el ratón o bien con las teclas de desplazamiento vertical y
[x,y]=ginput horizontal. Presionado una tecla o un botón del ratón 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 gráfica.
Detiene el dibujo de gráficos hasta que se presiona una tecla o un botón del
waitforbuttonpress
ratón.

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.

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 Rápida de Matlabdvips . 34


3.5 Dibujando curvas de nivel m
at

3.5 Dibujando curvas de nivel


Las curvas de nivel de una función 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 sólo pueden ser utilizados
sobre una red rectangular previamente definida.

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
contour(Z,n,cad)
plano XY .
cad es opcional y especifica el estilo de linea.
contour(Z,v) Dibuja los niveles especificados en el vector v.
En las mismas condiciones que el comando anterior, pero se especifica la red
contour(x,y,Z,n,v)
sobre la que se va a dibujar la gráfica x × y y la escala de los ejes.
Calcula la matriz C de contorno sin dibujar las lineas de contorno, utilizándose
contourc
los mismos parámetros que en los casos anteriores.
Dibuja las curvas de nivel en tres dimensiones utilizándose los mismos
contour3
parámetros que en los casos anteriores.
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
clabel(C) y contour3.
Se pueden especificar los niveles, con un vector v y también se puede realizar
manualmente indicándolo con la etiqueta ’manual’.

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

>> hold off; [ENTER]


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

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.

Guı́a Rápida de Matlabdvips . 35


3.5 Dibujando curvas de nivel m
at

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.

Comando que obtiene la red adecuada para hacer gráficas tridimensionales a


[U,V]=meshgrid(x,y)
partir de los vectores x e y.
[U,V,W]=meshgrid(x,y,z) Obtiene una red tridimensional.
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
[X,Y,Z]=cylinder(r,n)
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 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’);

Guı́a Rápida de Matlabdvips . 36


3.6 Gráficos en 3-D m
at

El resultado es el siguiente gráfico.

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

x−0.5 x3 + 0.2 y2 + 1 sen(r)/r

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

>> hold on; [ENTER]


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

>> hold off; [ENTER]


15

10

5 10 15 20 25 30

3.6 Gráficos 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ápida de Matlabdvips . 37


3.6 Gráficos en 3-D m
at

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.

El ejemplo siguiente muestra la simulación 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] 0.5

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

’Inicio’); [ENTER] −0.5


Inicio

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

’Fin’); [ENTER] −1.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.

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


conecta los puntos adyacentes creando una superficie.
mesh(Z)
Si se especifica la matriz C cada punto se dibuja en el color especificado por
mesh(Z,C)
cada elemento de la matriz.
mesh(U,V,Z,C)
Si se especifican los valores de U y V, dibuja la matriz Z sobre los nodos de
la red formada por U y V.
Dibuja, con las mismas consideraciones que el caso anterior, una superficie
meshc(...)
incluyendo las curvas de nivel bajo el gráfico.
meshz(...) Dibuja una superficie incluyendo una red de referencia en el plano XY .
Mantiene las lı́neas traseras escondidas o no dependiedo que escribamos on
hidden on-off
u off. Si sólo 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 y 2 + 1 , (x, y) ∈ [−3, 3] × [−3, 3].

Guı́a Rápida de Matlabdvips . 38


3.6 Gráficos en 3-D m
at

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)’);

El resultado es el siguiente gráfico

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

Guı́a Rápida de Matlabdvips . 39


3.6 Gráficos en 3-D m
at

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.

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
surf(X,Y,Z, C)
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.
Del mismo modo que surf excepto que sitúa un foco de luz en el punto dado
surfl(X,Y,Z, ls,r) por el vector ls. El vector r nos proporciona el tipo de luz que puede ser de
los siguientes tipos: ambiente , difusión , especular e interior .
Del mismo modo que surf pero dibuja las normales a la superficie si no
[Nx,Ny,Nz] =
se especifican los vectores Nx, Ny y Nz. En el caso de que se especifiquen
surfnorm(X,Y,Z)
solamente se almacenan los vectores normales.
Devuelve el reflejo de una superficie difusa con componentes normales dadas
diffuse(Nx,Ny,Nz,ls)
por los vectores Nx, Ny y Nz. El vector ls nos da la posición de la luz.
specular(Nx,Ny,Nz,ls,v) Al igual que diffuse pero con reflejo especular.
Dibuja colores determinados como valores de los elementos de Z. Si se espe-
pcolor(X,Y,Z)
cifican X e Y es igual que aplicar surf(X,Y,Z); view(2)
Dibuja el polı́gono con esquinas dadas por los vectores x e y. El polı́gono se
fill(x,y,c)
rellena con el color dado por c.
fill3(x,y,z,c) dimensiones.

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

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


0.5
>> [XX,YY]=meshgrid(x,y);
[ENTER]
0
>> R=sqrt(XX.^2+YY.^2)+eps;
[ENTER]
>> Z=sin(R)./R; [ENTER] −0.5
10

>> surfc(XX,YY,Z); 5 10

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

[ENTER] −5
−5
−10 −10

Repitamos el ejemplo añadiendo los vectores normales mediante el comando surfnorm.

Guı́a Rápida de Matlabdvips . 40


3.6 Gráficos en 3-D m
at

>> clf; [ENTER]


>> x=-8:0.5:8; y=x; [ENTER]
>> [XX,YY]=meshgrid(x,y); sin(r)/r
[ENTER]
>> R=sqrt(XX.^2+YY.^2)+eps;
[ENTER] 1.2

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

>> surfnorm(XX,YY,Z); 0.8

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);

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 Rápida de Matlabdvips . 41


3.6 Gráficos en 3-D m
at

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.

Establece el punto de vista. El escalar v determina el ángulo azimutal y el


view(v,h)
escalar h el ángulo de elevación.
[v,h]=view Devuelve el punto de vista actual, ángulo azimutal y el ángulo de elevación.
view(r) Establece el visor en la posición r=[x y z].
Devuelve los valores estándar de ángulos de visión (con n = 2 en dimensión
view(n)
dos y con n = 3 los de dimensión tres).
view Devuelve la matriz de visión (de dimensión 4 × 4).
view(T) Se utiliza T como matriz de visión.
Devuelve la matriz de visión (que define el punto de vista y la dirección de
viewmtx(v,h,s,r)
vista).

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.

Guı́a Rápida de Matlabdvips . 42


3.7 Control del color m
at

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.

Dibuja capas de la función de tres variables definida por la matriz V . La matriz


V está compuesta de nx capas, evaluada sobre tres matrices obtenidas a
slice(V, xs, ys, zs, nx)
partir de meshgrid con tres argumentos. Los vectores xs, ys y zs especifican
que capas se dibujan.

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.

3.7 Control del color


En MATLAB el usuario puede controlar los colores y la iluminación de las gráficas en tres dimensiones.

Guı́a Rápida de Matlabdvips . 43


3.7 Control del color m
at

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

• faceted dibuja la red en la supeficie (opción por defecto).

shading type • 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.
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.

Sitúa como mapa de colores actual a Cm. Si no se especifica se devuelve en


colormap(Cm)
una matriz la tabla del gráfico actual.
Dibuja una barra horizontal de escala de colores en la ventana de gráficos
colorbar(’horiz’)
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.

Añadamos a la figura anterior la barra de colores.

Guı́a Rápida de Matlabdvips . 44


3.8 Copia de la ventana gráfica m
at

Hay otros comandos que también manipulan el color.

Devuelve un mapa de colores hsv de un mapa de colores rgb. El comando


rgb2hsv(Cm)
inverso es hsv2rgb(Cm).
rgbplot(Cm) Dibuja las columnas del mapa de colores Cm.
v.
Hace que el intervalo de colores actual se sitúe entre los valores del vector
caxis(v) Si no se especifica v devuelve el intervalo habitual. Si se especifica ’auto’
retorna a la escala automática.
Rota el mapa de colores durante t segundos usando el paso s (los valores
spinmat(t,s)
por defecto son s=1 y t=3. Si se utiliza inf se cambia para siempre.
brighten(Cm,s) Da brillo al gráfico 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.
Establece el color del fondo de acuerdo a una cadena de tipo de lı́nea, mar-
whitebg(’cad’)
cador y color, o con un vector rgb.

3.8 Copia de la ventana gráfica


Es posible obtener copias de las ventanas gráficas bien a impresión o bien a fichero.

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


print fichero
a la impresora. Se pueden consultar diferentes impresoras.
Se graba en un archivo de formato encapsulado fichero.eps. Para enviarlo
print -deps fichero
posteriormente a otros documentos.
[str, dev] =printopt Nos da la cadena y salida utilizada por print.
Establece la orientación que utiliza MATLAB en la siguiente print. Si
cadena es lanscape se imprime en apaisado. Si es portrait se imprime en
orient cadena
vertical. Si es tall se imprime en vertical y a una escala que llena el papel.
Si no se especifica devuelve la orientación actual en una cadena.

Guı́a Rápida de Matlabdvips . 45


Bibliografı́a

[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.

[7] Cesar Perez, Matemática Informatizada con MATLAB, ra-ma, 1996.

[8] Peregrina Quintela, Introducción 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 Rápida de Matlabdvips . 46

También podría gustarte