You are on page 1of 47

Gua R

apida de Matlab

Oscar
Angulo, Eduardo Cuesta,

Cesar Gutierrez y Mara del Carmen Martnez


diciembre de 2001

Pr
ologo
Este libro inicia una serie de guas dedicadas a MATLAB.
El objetivo de esta gua es servir de apoyo para el manejo de MATLAB en las asignaturas en las que se emplea el citado
software y en las que las limitaciones de tiempo no permiten una dedicaci
on muy exhaustiva a su explicaci
on. Hemos
pretendido mostrar en esta gua los comandos y estructuras b
asicas de MATLAB de una manera clara y concisa con
algunos ejemplos que hemos considerado interesantes. Pretendemos as mismo que esta gua sea una gua viva que siga
evolucionando con el tiempo, como lo ha hecho hasta ahora, gracias a la experiencia en el uso docente de MATLAB y
gracias a las sugerencias de compa
neros y alumnos a los cuales les queremos mostrar nuestro agradecimiento.
Valladolid, diciembre de 2001
Los Autores

Gu
a R
apida de Matlabdvips .

m
at
.

No est
a permitida la reproducci
on total o parcial de esta gua, ni su tratamiento inform
atico, ni la transmisi
on de
ninguna forma o por cualquier medio, ya sea electr
onico, mec
anico, por fotocopia, por registro u otros m
etodos, ni
su pr
estamo, alquiler o cualquier otra forma de cesi
on de uso del ejemplar, sin el permiso previo y por escrito de los
titulares del Copyright.

Angulo Torga, Oscar;


Cuesta Montero, Eduardo; Guti
errez Vaquero, C
esar; Martnez Martnez, Mara del Carmen:
Profesores del Departamento de Matem
atica Aplicada a la T
ecnica; Valladolid, 2001.
DE CIENCIAS DE LA EDUCACION.

UNIVERSIDAD DE VALLADOLID. INSTITUTO DE INVESTIGACION


ISBN: 84Imprime: Servicio Reprografa COPIPAUMA

Gu
a R
apida de Matlabdvips .

Contenidos
1 Introducci
on a MATLAB
1.1

Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

Iniciando y finalizando una sesi


on con MATLAB

1.3

El entorno gr
afico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Entorno gr
afico de MATLAB para Linux

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Breve Introducci
on a la Programaci
on en MATLAB
2.1

Principios con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


2.1.1

Entrada y salida en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.2

Aritm
etica elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.3

Diferentes formatos para los datos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2

Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3

Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4

Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5

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


2.5.1

Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5.2

Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.6

Programaci
on modular: Funciones

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.7

Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Gr
aficos con MATLAB
3.1

Gr
aficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1.1

El comando

3.1.2

Opciones del comando

3.1.3

Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2

Gr
aficos con n
umeros complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.3

Gr
aficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.4

Controlando los gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5

Dibujando curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.6

Gr
aficos en 3-D

3.7

Control del color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.8

Copia de la ventana gr
afica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Gu
a R
apida de Matlabdvips .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
4
5
6
7
7
7
7
8
9
11
12
15
15
17
18
19
20
20
20
22
24
25
27
28
35
37
43
45

Captulo 1

Introducci
on a MATLAB
1.1

Comentarios previos

Comencemos destacando que la filosofa del entorno MATLAB no es la de otros paquetes de matem
aticas usuales,
tales como Derive, Maple o Mathematica.
Su filosofa se asemeja m
as a la de un lenguaje de programaci
on que al de un paquete est
andar de matem
aticas
pues, aunque podemos ejecutar desde la linea de comandos mediante los nombres de dichos operaciones como en los
paquetes mencionados, lo habitual con MATLAB es crear un fichero de texto externo que contenga la secuencia de
comandos que se desea ejecutar y llamar a este programa desde MATLAB.
Algunas de las ventajas e inconvenientes de MATLAB son:
1) Ventajas que el entorno MATLAB tiene frente a un lenguaje de programaci
on:
(a) No hay que definir el tipo de las variables que se van a utilizar, ni el tama
no de las mismas.
(b) No hay que compilar los programas, como ocurre en los entornos de programaci
on.
(c) Se pueden utilizar extenssimas libreras de funciones ya definidas.
actico de vectores y matrices.
(d) Presenta un manejo muy pr
2) Frente a un lenguaje de programaci
on no presenta incovenientes destacables.

Adem
as las sentencias y las

estructuras que se manejan son muy similares a las que se usan en el entorno de C.
Algunos de los inconvenientes frente a otros paquetes inform
aticos son, entre otros:
(a) Al no estar pensado para el trabajo en linea de comandos no presenta ning
un men
u de acceso r
apido a
procedimientos de uso frecuente (como el que tiene por ejemplo Derive).
(b) No posee una librera de c
alculo simb
olico propio por lo que recurre a comandos de Maple. No obstante,
este no es el fin
ultimo de este programa y hay otros en el mercado m
as optimizados para este tipo de
c
alculos.

1.2

Iniciando y finalizando una sesi


on con MATLAB

MATLAB se arranca pulsando con el rat


on en el icono correspondiente, e inmediatamente aparece la pantalla de la
figura

??.

Cualquier comando que se escribe tras el cursor de MATLAB ser


a 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
apida de Matlabdvips .

m
at

1.3 El entorno gr
afico de MATLAB bajo Windows

Si se necesita detener la ejecuci


on de un programa o de un comando MATLAB antes de su finalizaci
on normal es
necesario presionar simult
aneamente la tecla [CTRL] y la tecla [C]. MATLAB detiene as cualquier comando o programa
que estuviera ejecut
andose en ese momento y devuelve el cursor a su estado original quedando preparado para ejecutar
el siguiente comando.

1.3

El entorno gr
afico de MATLAB bajo Windows

La ventana de trabajo de MATLAB es una cl


asica ventana de Windows en la que aparece un men
u de opciones y unos
cuantos botones de acceso r
apido.
El men
u de opciones se compone de cinco submen
us

File , Edit , View, Window y Help , cada uno de ellos con

las siguientes opciones

Menu File : Con esta opcion se puede, entre otras


cosas crear un nuevo elemento (bien un fichero
M-File, una figura o un modelo de Simulink);
abrir una nueva sesi
on, o un fichero M-File; grabar, 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
on o elegir las preferencias de
impresi
on; los
ultimos archivos utilizados; y abandonar el programa.

Menu Edit :

Posee las opciones de un edi-

tor cl
asico de textos para Windows, seleccionar
un texto (con los cursores o el rat
on), cortar
un texto, copiar o pegar lo que tengamos seleccionado en el portapapeles, deshacer la
ultima
acci
on, seleccionar todo el documento o bien borrar las variables de la sesi
on.

Gu
a R
apida de Matlabdvips .

1.4 Entorno gr
afico de MATLAB para Linux

m
at

Menu Help : Muestra todas las ayudas que nos


ofrece MATLAB y sobre las que nos extenderemos algo m
as en la
ultima parte de esta introducci
on.

Diversas operaciones se pueden realizar a trav


es de los botones de acceso r
apido, como abrir una nueva sesi
on,
imprimir un fichero, obtener ayuda, seleccionar un nuevo directorio de trabajo o ver el n
umero de variables que
estamos utilizando en este momento.

1.4

Entorno gr
afico de MATLAB para Linux

Se
nalemos para los usuarios de Linux que algunas versiones antiguas de MATLAB no incluyen un editor propio como
el descrito para Windows por lo que utilizaremos cualquiera de los que Linux tiene disponibles (joe, vi, kedit,...). En
este caso, la ventana de trabajo tendra una presentaci
on similar a la siguiente:
Destaquemos por
ultimo que tanto bajo Windows como bajo Linux se puede utilizar cualquier editor que permita
grabar los ficheros en formato ASCII para elaborar nuestros programas.

Gu
a R
apida de Matlabdvips .

Captulo 2

Breve Introducci
on a la Programaci
on
en MATLAB
2.1
2.1.1

Principios con MATLAB


Entrada y salida en MATLAB

Al arrancar MATLAB aparecer


a el smbolo del sistema (adem
as de algunos mensajes)

>>
El smbolo

>> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de

MATLAB teclearemos:

>>

2.1.2

quit [ENTER]

Aritm
etica elemental

Comenzaremos viendo con varios ejemplos que las operaciones aritm


eticas habituales se realizan del modo esperado
con los operadores
suma:

+, resta: , producto: , division: /, y exponenciancion: .

Escribamos en linea de comandos lo siguiente:

>>

1+2 [ENTER]
ans =

>>
>>

>>

Seno de /2.

2.45*3.1415 [ENTER]
ans =

>>

sin(pi/2) [ENTER]
ans =

Suma de dos enteros.

Producto de dos n
umeros reales.

7.6967

2,34*3 [ENTER]
ans =

ans =

102

2E-2*3E8 [ENTER]

Gu
a R
apida de Matlabdvips .

Ponemos una coma en lugar de un punto


Qu
e ha hecho MATLAB?
Uso del exponente.
7

m
at

2.1 Principios con MATLAB

ans =
>>

log(10) [ENTER]
ans =

>>

Logaritmo neperiano.

2.3026

(3+2^3*i)+(-1+5*i) [ENTER]
ans =

>>

6000000

Suma de complejos.

2.0000+13.0000i

(1-2*i)*(2+2*i) [ENTER]
ans =

Producto de complejos.

6.0000-2.0000i

Existen otras muchas funciones disponibles en MATLAB y que son an


alogas a las que maneja Derive, Maple u
otros; as por ejemplo:
arco seno:

asin(x), arco tangente: atan(x), raz cuadrada: sqrt(x), logaritmo en base 10: log10(x), . . .

Si no queremos que aparezca por pantalla el resultado de una operaci


on tendremos que poner al final de la linea
punto y coma ; .

>>

tan(pi/4) [ENTER]
ans =

>>

Tangente de /4.

1.0000

tan(pi/4); [ENTER]

La misma operaci
on pero sin salida por pantalla.

>>

2.1.3

Diferentes formatos para los datos

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

>>

d=1/33
d=

>>

format long, d [ENTER]


d=

>>

>>

Formato corto con mantisa y exponente.

3.0303e-002

format long e, d [ENTER]


d=

Formato largo.

0.03030303030303

format short e, d [ENTER]


d=

>>

0.0303

Formato largo con mantisa y exponente.

3.030303030303030e-002

format rat, d [ENTER]


d=

Formato racional.

1/33

Se puede realizar algunas operaciones con alguna indeterminaci


on.

>>

1/0 [ENTER]
ans =

>>

Inf

5*Inf [ENTER]
ans =

Divisi
on por cero.
Multiplicaci
on por infinito.

Inf

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

Gu
a R
apida de Matlabdvips .

m
at

2.2 Asignaciones

2.2

Asignaciones

Uno de los elementos fundamentales en la programaci


on 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
a mediante un mensaje de error. De todos modos es recomendable que
el nombre que elijamos para cada variable sea alusivo a su contenido o a su aplicaci
on.
Destaquemos un hecho importante: MATLAB distingue entre may
usculas y min
usculas por lo que
las mismas variables ni lo ser
an tampoco

x y X no seran

Nodos, nodos y NODOS.

Para realizar la asignaci


on 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
acter) ni el tama
no del mismo (escalar, vector o matriz del tama
no que sea).
Seudoc
odigo: La asignaci
on 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
on aritm
etica.

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

>>

a=2 [ENTER]
a=

>>

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

1 2 3 4 5 6 7 8 9 10

a+b [ENTER]
ans =

>>

Asignaci
on del valor 4 a la variable x.

b=1:1:10 [ENTER]
b=

>>

Asignaci
on del valor 2 a la variable x.

x=x+2 [ENTER]
x=

>>

x=a [ENTER]
x=

>>

Asignaci
on del valor 2 a la variable a.

3 4 5 6 7 8 9 10 11 12

a*b [ENTER]
ans =

Sumamos un escalar y un vector.


Qu
e ha hecho MATLAB?

Producto de un vector y un escalar.

2 4 6 8 10 12 14 16 18 20

2) Si sumamos vectores de tama


no diferente tenemos lo siguiente.

>>

c=1:5:25 [ENTER]

>>

b+c [ENTER]
??? Error using ==> +
Matrix dimensions must be agree

c=

Declaramos el vector c.

1 6 11 16 21
Sumamos los vectores b y c.

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

>>

b=0:2:20 [ENTER]
b=

>>
>>

0 2 4 6 8 10 12 14 16 18 20

c=0:1:10 [ENTER]
c=

Declaramos el vector b.
Declaramos el vector c.

0 1 2 3 4 5 6 7 8 9 10

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


ans =

0 2 8 18 ...200

Gu
a R
apida de Matlabdvips .

m
at

2.2 Asignaciones

>>

b*c [ENTER]
pantalla)

>>

b*c [ENTER]
ans =

Matriz resultado de multiplicar b traspuesto por c (ver


Producto de b por c traspuesto (producto interior)

770

olo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un
4) No s
vector o el seno de un vector, etc... obteniendo el logaritmo o el seno de cada una de sus componentes.

>>

b=1:10; [ENTER]

>>

log(b) [ENTER]
ans =

>>

Tres
ultimas columnas.
Seno del vector b.

Columns 1 through 7
0.8415 0.9093 ...0.6570
Columns 8 through 10
0.98954 0.4121 -0.5440

Siete primeras columnas.


Tres
ultimas columnas.

1 2 3 4 5

2.^c [ENTER]
ans =

>>

Siete primeras columnas.

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

>>

Columns 1 through 7
0 0.6931 ...1.9459
Columns 8 through 10
2.0794 2.1972 2.3026

sin(b) [ENTER]
ans =

>>

Declaramos el vector b.
Logartimo del vector b.

2 4 8 16 32

c.^ 2 [ENTER]
ans =

2 elevado a las potencias que determina c.


Las componentes de c elevadas al cuadrado.

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
on a la aritm
etica matricial mostramos algunas de las funciones m
as habituales.

>>

A=[1 2 3;4 5 6;7 8 9] [ENTER]


A=

>>
>>

3
6
9
Tama~
no de la matriz A.

3 3

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


B=

>>

Muestra la tercera columna de la matriz A.

size(A) [ENTER]
ans =

>>

Elemento (2,2) de la matriz A.

A(:,3) [ENTER]
ans =

>>

1 2 3
4 5 6
7 8 9

A(2,2) [ENTER]
ans =

Definici
on de la matriz A.

1 2 1
2 1 2
1 2 1

A*B [ENTER]

Gu
a R
apida de Matlabdvips .

Producto matricial habitual.

10

m
at

2.3 Ficheros *.m

ans =

8 10 8
20 25 20
32 40 32

Un comando de uso frecuente es

who que nos permite conocer el numero y nombre de las variables usadas a lo

largo del programa o de la sesi


on. Su formato es:

>>

who [ENTER]
Your variables are:
A
u
vfil x
ans vcol w
y

donde las variables corresponden a otra ejecuci


on del programa.
El comando

whos nos muestra, ademas del nombre de las variables, informaci


on adicional de cada variable, distin-

guiendo si es vector o escalar.

>>

whos [ENTER]
Name Size Bytes
A
ans
u
vcol
vfil
w
x
y

3x4
4x1
1x1
4x1
1x4
1x1
1x1
1x1

96
32
8
32
32
8
8
8

Class
double
double
double
double
double
double
double
double

array
array
array
array
array
array
array
array

Grand total is 28 elements usign 224 bytes

Debemos tener en cuenta que MATLAB en cada sesi


on mantiene en memoria todas las variables utilizadas hasta
ese momento y que
unicamente el comando

>>

clear [ENTER]

Si ahora tecleamos

2.3

clear hace que elimine el valor de todas las variables.

who no se produce ninguna salida.

Ficheros *.m

Como ya hemos dicho la filosofa de MATLAB se asemeja m


as a la de un lenguaje de programaci
on que a la de un
software matem
atico de resoluci
on de problemas simb
olicos. En concreto, permite ejecutar una secuencia de comandos
escritos en un fichero ASCII sin m
as 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
a aclarar estas ideas.
1) En primer lugar abrimos un fichero con el editor elegido.
2) Tecleamos lo siguiente:

numerador=12^3
denominador=3.2E-3

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


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

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


Gu
a R
apida de Matlabdvips .

11

m
at

2.4 Estructuras de control

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 =
x=

0.0032

540000

En lo sucesivo
esta ser
a la forma de trabajar con MATLAB: escribir en un fichero la secuencia de comandos que
vamos a ejecutar. Con este planteamiento elaboraremos programas (secuencia de comandos) que nos permitan resolver
problemas con un cierto grado de complejidad.

2.4

Estructuras de control

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

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


consiste en la enumeraci
on consecutiva de acciones a realizar.
No existe seudoc
odigo explcito para esta estructura aparte de
la propia escritura de las acciones

Seleccion: Esta estructura actua sobre una proposicion o condicion booleana con dos posibles valores mutuamente excluyentes: Verdadero o Falso
Si C es la condici
on y A y B son las acciones o secuencia de acciones

SEUDOCODIGO:

EN MATLAB:
CODIFICACION

si C entonces

if C
acci
on A

acci
on A
else

sino
acci
on B

acci
on B

finsi

end

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
disp(Has acertado)
end

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

if n<-2 | n>10

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

Gu
a R
apida de Matlabdvips .

12

m
at

2.4 Estructuras de control

disp(Es otra prueba)


end

Observemos que la opcion

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

if n>0 & n<2


% Si n>0 y n<2 entonces haz...
disp(Estas en el intervalo)
else
% en caso contrario haz...
disp(No estas en el intervalo)
end

Las estructuras de selecci


on se pueden anidar de diferentes formas. Mostramos una de esas posibilidades.

SEUDOCODIGO:
EN MATLAB:
CODIFICACION

si C1 entonces
acci
on A1

if C1

sino

acci
on A1
si C2

elseif C2
acci
on A2

finsi

acci
on A2
else

acci
on A3
finsi

acci
on A3
end

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


on con fines m
as especficos como es la estructura

switch que se puede

consultar en cualquier manual de MATLAB.

Iterativa. La estructura iterativa responde al caso de las acciones consistentes en la repetici


on 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
as habituales:
1) Sin n
umero predeterminado de iteraciones y con la condici
on al principio. Si C es la condici
on y A es la
acci
on o secuencia de acciones:

SEUDOCODIGO:

EN MATLAB:
CODIFICACION

mientras C hacer

while C

acci
on A
finmientras

Gu
a R
apida de Matlabdvips .

acci
on A
end

13

m
at

2.4 Estructuras de control

Proponemos el siguiente ejemplo

n=1;
while prod(1:n)<1e100
n=n+1;
disp(Nos llegamos en),n
end
2) Sin n
umero predeterminado de iteraciones y con la condici
on al final. Si C es la condici
on y A es la acci
on
o secuencia de acciones:
EN MATLAB:
CODIFICACION

SEUDOCODIGO:

while 1

hacer

acci
on A
acci
on A

mientras C

if C,break, end
end

3) Con n
umero predeterminado de iteraciones. Esta estructura repite una acci
on o una secuencia de ellas un

contador que toma valores entre un valor


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

n
umero fijo de veces que viene determinado por una variable
inicial

negativo.
Si A es una acci
on o secuencia de acciones:

SEUDOCODIGO:

contador=vi hasta vf incr. paso

para
hacer

EN MATLAB:
CODIFICACION
for

contador=vi,vf,paso

acci
on A

acci
on A

finpara

end

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

for n=1:1:10
y(n)=n^2;
x(n)=2*y(n);
end

%
%
%
%

Cuenta desde 1 hasta 10 de 1 en 1.


Declara un vector cuyas componentes son de la forma n^2.
Declara un vector cuyas componentes son de la forma 2*y_n.
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


on y con la mayor parte del software
matem
atico, 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
apida de Matlabdvips .

14

m
at

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

% Muestra por pantalla los vectores declarados.

La ejecuci
on del fichero prueba muestra

>>

prueba [ENTER]
x=

2 4 6 0 0 11 14

>> prueba [ENTER]


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

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


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

contiene la variable
se avisa con un

2.5
2.5.1

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


Escritura de datos

La escritura de datos nos permite enviar el valor de una o m


as variables externamente, bien a la pantalla del ordenador,
bien a un fichero.
seudoc
odigo. Si el nombre de la variable es

VARIABLE la accion escritura se escribe como


escribe

1) Para que el valor de

>>

VARIABLE

VARIABLE aparezca por pantalla bastara teclear el nombre de la variable

VARIABLE [ENTER]

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

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


>>

fid=fopen(nombre-fichero,permisos)

donde

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


nombre-fichero es el nombre con el que aparecera en nuestro directorio
permiso es un
r

r+

w+
a+

cadena que indica la operaci


on a realizar con el fichero,
Lectura
Escritura (se crea si es necesario)
A
nadir a un fichero ya existente (se crea si es necesario)
Lectura y escritura
Trunca el fichero o lo crea para lectura o escritura
Lectura y a
nadir 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


un error al cerrar el fichero MATLAB devolver
a el valor

1 y si no es as

devolver
a 0.

Gu
a R
apida de Matlabdvips .

15

m
at

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

Editemos un fichero que haga uso de los anteriores comandos

t=0:1:10
y=t.^2

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


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

fclose(fid)

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]

% Manda los datos al fichero fid

En los manuales se pueden encontrar m


as detalles sobre el formato de los datos.
Cuando no sea necesario manejar directamente un fichero con los datos sino que
unicamente necesitamos guardar
los datos para otra su uso en otra sesi
on, 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

>>

save datos2 a

>>

clear

>>

whos

>>

load datos2

>>

a
a=

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


Guarda en el fichero datos2 la variable a
eliminamos todas las variables
No hay variables declaradas
El comando load lee el fichero de datos datos2.mat

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

Gu
a R
apida de Matlabdvips .

diary se pueden consultar en los manuales.

16

m
at

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

2.5.2

Lectura de datos

La lectura de datos nos permite asignar un valor a una o a m


as variables mediante acciones externas. bien desde el
teclado del ordenador
o bien desde un fichero.
seudoc
odigo. Si el nombre de la variable es

VARIABLE la accion lectura se escribe como


lee

VARIABLE

1) El comando de MATLAB para la lectura de un dato desde el teclado es

input que se utiliza como aparece en

el ejemplo

>>

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


El valor de la variable z es:
12
z=

12

2) Para leer el valor de una variable en un fichero con un formato establecido se puede utilizar el comando
Mostremos el siguiente ejemplo: Dado el fichero

load.

data.dat

1 2 3
4 5 6
7 8 9
podemos teclear

>>

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

>>

data
data =

1 2 3
4 5 6
7 8 9

3) Otra opci
on para leer el valor de una variable en un fichero con un formato establecido hace uso de los comandos
descritos para la apertura y el cierre de un fichero, y de otro para la lectura propiamente dicha, en concreto:

>>

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

donde

fid es el identificador del fichero.


format es un cadena con las mismas opciones que fprintf.
tama~
no es un argumento optativo que permite limitar el numero de datos leidos. El valor que puede tomar
este argumento es uno de los siguientes

N: Lee un vector de hasta N componentes.


inf: Lee datos hasta el final del fichero.
[N,M]: Lee una matriz de tamano N x M por columnas (M puede se inf).
En el siguiente ejemplo se muestra como se puede leer el fichero creado en el ejemplo anterior

Gu
a R
apida de Matlabdvips .

17

m
at

2.6 Programaci
on modular: Funciones

fid=fopen(parabola.dat,r)

z=fscanf(fid,%1.1f
%
%
%
%
fclose(fid)

2.6

% Crea un puntero a un fichero llamado


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

%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]

% Cierra el fichero identificado por fid

Programaci
on modular: Funciones

En programaci
on, al realizar una operaci
on, 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
as que programas que son utilzados
por otros programas.
Cualquier programa puede considerarse como una funci
on 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
as sencillos.
En relaci
on con el modo de definir funciones haremos las siguientes observaciones:
1) Se guarda como un fichero

funcion.m cuyo nombre ha de coincidir con el de la funcion.

2) Ha de estar encabezado por la linea

function[salida1,...,salidaN]=nombre(entrada1,...,entradaM)
seguido por los comandos del programa.
on termina su tarea con el
ultimo comando del programa, sin necesidad de ning
un comando especfico,
3) La funci
aunque
esta acci
on es posible con el comando

return.

4) Desde la propia funci


on 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
on toman un valor local. Por tanto, una variable con el mismo nombre en una
funci
on 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
on 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
apida de Matlabdvips .

18

m
at

2.7 Otras Observaciones

donde la funci
on

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


on a
nadimos algunas observaciones m
as.
1) Los smbolos , ; : sirven para: separar operaciones dentro de un lnea (,); para delimitar campos dentro
de un comando (:)
o para evitar que el resultado de un comando no salga por pantalla (;).

>>

2+3; 3+4 [ENTER]


ans =

Los puntos ... se usar


an para continuar un comando cuando no nos quepa completo en un sola lnea.
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 smbolo % indica a MATLAB que no tenga en cuenta lo que se encuentra a continuaci


on en la misma lnea
(comentario). Esto vendr
a bien cuando queremos explicar los programas que hagamos.
5) Desde la lnea de comandos de MATLAB podemos ejecutar comandos propios del sistema (MSDOS, Linux,...)
como por ejemplo

>>

dir

>>

cd directorio

>>

del fichero

Gu
a R
apida de Matlabdvips .

19

Captulo 3

Gr
aficos con MATLAB
3.1

Gr
aficos de dos dimensiones

El usuario de MATLAB puede dibujar f


acilmente un conjunto de pares de puntos, y una forma de hacerlo es mediante
el comando

3.1.1

plot.

El comando plot

El uso del comando

>>

plot es el siguiente

plot(argumentos)

y los argumentos que toma pueden ser

Argumentos

Explicaci
on

plot(x)
plot(x,y)

x IR
x, y IRn

plot(z)

z Cn

plot(A)

A Mmn

(i, xi ), 1 i n, unidos por segmentos.


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
i n , unidos por segmentos.
Para cada j , 1 j n, dibuja los pares de puntos (i, aij ), 1 i m,
Dibuja los pares de puntos

unidos por segmentos.


En la misma gr
afica, cada lnea se dibuja con un color y con un tipo
de lnea diferente.

x sea un vector fila o columna, ejecuta


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

plot(x,A)

x IRn , A Mmn

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


En la misma gr
afica, cada lnea se dibuja con un color y con un tipo
de lnea diferente.

plot(A,x)

x IRn , A Mmn

En las mismas condiciones que el caso anterior dibuja los pares ordeEjecuta

plot(A,B)

A,B Mmn

x el valor de las ordenadas


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

nados siendo
de

B.

En la misma gr
afica, cada lnea se dibuja con un color y con un tipo
de lnea diferente.

Veamos algunos ejemplos. Al ejecutarlos por primera vez aparece una nueva ventana que es la ventana gr
afica, en
esta se muestra el dibujo realizado por

Gu
a R
apida de Matlabdvips .

plot (o cualquiera de los comandos que introduciremos), sin embargo, si vamos

20

m
at

3.1 Gr
aficos de dos dimensiones

realizando los ejemplos uno a uno sin cerrar la ventana gr


afica
esta se oculta pasando a ser una ventana secundaria
en la que se van sustituyendo las gr
aficas por las que actualmente dibujamos. Cada vez que queramos ver una gr
afica
tenemos que hacerla ventana principal ya que no se realiza autom
aticamente.
Dibujemos el vector de ordenadas y el de abcisas:
25

>>

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

>>

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

>>

plot(x,y); [ENTER]

20

15

10

0
4

Dibujemos un vector de n
umeros complejos:

>>

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

>>

plot(z); [ENTER]

2.8

0.5

0.5

1.5

1.2

Para dibujar n
umeros complejos tambi
en se pueden utilizar los comandos
y

1.4

1.6

1.8

2.2

2.4

2.6

polar, quiver, feather, compass, rose

pol2cart. (consultar la seccion 3.2).


Dibujemos una matriz:

25

>>

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


-0.5; 5 25 0.5]; [ENTER]

20

>>

plot(A); [ENTER]

15

10

Gu
a R
apida de Matlabdvips .

1.5

2.5

3.5

4.5

21

m
at

3.1 Gr
aficos de dos dimensiones

Si en el ejemplo anterior elegimos las ordenadas obtenemos:

>>

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

>>

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


-0.5; 5 25 0.5]; [ENTER]

>>

plot(x,A); [ENTER]

25

20

15

10

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

1.5

Tambi
en podemos dibujar diferentes funciones en el mismo
gr
afico.

>>

x=0:0.1:2; [ENTER]

>>

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

>>

plot(x,A); [ENTER]

0.5

0.5

0.2

0.4

0.6

0.8

1.2

1.4

1.6

1.8

Podemos intercambiar los ejes sin m


as que escribir

1.8

1.6

>>

1.4

plot(A,x) [ENTER]

1.2

0.8

0.6

0.4

0.2

0
1

3.1.2

0.5

0.5

1.5

Opciones del comando plot

Existe una serie de opciones para realizar gr


aficos con MATLAB entre las que destacamos las siguientes:
Explicaci
on

plot(x,y,cad)

Dibuja la gr
afica de abcisas
dadas por

x y ordenadas y con las opciones de estilo

cad.

x1 y ordenadas y1 con las opciones de


cad1, la grafica de abcisas x2 y ordenadas y2 con las
opciones de estilo dadas por cad2 y as con el resto de ternas. Si se
Dibuja la gr
afica de abcisas

estilo dadas por

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

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


cada gr
afico.
Los estilos de lneas y colores se determinan con una variable caracter de a lo sumo tres de caracteres que hemos

Gu
a R
apida de Matlabdvips .

22

m
at

3.1 Gr
aficos de dos dimensiones

denotado por cad. Las ternas se construyen con un car


acter de cada columna sin importar el orden. As por ejemplo,
cad=ys- dibuja una lnea amarilla, solida y con cuadrados como marcadores, exactamente igual que cad=s-y o
cad=sy- aunque siempre es mejor ser homogeneos en cada uno de los usos de estos parametros. Los tamanos de los
smbolos, las anchuras de las lneas y otros aspectos del dibujo pueden ser modificados como ya veremos posteriormente.
Si no se especifica el estilo, MATLAB utiliza por defecto una lnea azul continua sin marcadores para los puntos
dibujados.
Marcadores

.
*
x
o
+
s
d
p
h
v
<
>
^

punto
estrella
cruz
crculo

Lneas

--.
:

Colores

s
olida
discontnua
punto-raya
punteada

m
as
cuadrado
rombo
pent
agono

y
g
m
b
c
w
r
k

amarillo
verde
magenta
azul
cyan
blanco
rojo
negro

hex
agono
tri
angulo abajo
tri
angulo izquierda
tri
angulo derecha
tri
angulo arriba

Veamos algunos ejemplos.


Dibujamos una gr
afica con crculos.
0.5

>>

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

0.4

>>

plot(x, sin(x).*cos(x),o);
[ENTER]

0.3

0.2

0.1

0.1

0.2

0.3

0.4

0.5
4

Tecleamos el siguiente fichero:

n=50;
a=0;
b=3;
x=linspace(a,b,n);
e1=exp(-x.^2);
e2=(x.^2).*exp(-x.^2);
e3=x.*exp(-x.^2);
e4=exp(-x);
plot(x,e1,+,x,e2,*,x,e3,o,x,e4,x);

Gu
a R
apida de Matlabdvips .

% Asignamos valores a las variables

% Construimos el vector x
% y los vectores de abcisas

% Dibujamos las gr\aficas

23

m
at

3.1 Gr
aficos de dos dimensiones

La ejecuci
on del fichero anterior desde la ventana de MATLAB

0.9

nos muestra como se pueden superponer varias gr


aficas, en

0.8

concreto las de las funciones

ex , x2 ex , x ex y ex ,

0.7

diferenci
andolas mediante distintos estilos de lnea.

0.6

0.5

0.4

0.3

0.2

0.1

3.1.3

0.5

1.5

2.5

Otros comandos

Concluimos la secci
on con dos comandos gr
aficos de uso frecuente en MATLAB. El primero de ellos es el comando

errorbar, que nos permite incorporar a la grafica, mediante barras verticales, el error cometido. Este comando se
usa como el comando plot, pero con un argumento m
as que indica el margen de error. En concreto:
Argumentos
errorbar(x,y,e,cad)

x, y, e IRn ,
cad es una
variable cadena

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

x, y, e IRn ,
cad es una
variable cadena

Explicaci
on

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


e (de valores positivos) simetricamente
por encima y por debajo de la gr
afica. El argumento cad es
Ejecuta

dadas por el vector

opcional.
Ejecuta

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

spondiente las barras de error dadas por los vectores positivos

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

En este ejemplo generamos una serie de datos con cotas de

3.5

error de un 15%. Mostramos la gr


afica con los errores como
sigue

>>

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

>>

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

>>

delta=0.15*y; [ENTER]

>>

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

2.5

1.5

0.5

0
2

10

12

fplot, que nos permite dibujar funciones, especificadas mediante fcn. Estas
pueden ser predefinidas por MATLAB o definidas por el usuario, en este caso fcn indica una referencia a un M-file
de nombre fcn.m. M
as concretamente,
El segundo de los comandos es

Gu
a R
apida de Matlabdvips .

24

m
at

3.2 Gr
aficos con n
umeros complejos

fplot(fcn, lim, cad)


fplot(fcn, lim, cad)
fplot(fcn, lim, cad,
tol)

Argumentos

Explicaci
on

lim IR2 ,
fcn, cad cadenas

Dibuja el gr
afico de la funci
on especificada en la cadena

lim IR4 ,
fcn, cad cadenas
lim IR(2 o 4) ,
tol IR,
fcn, cad cadenas

Dibujemos la funci
on seno en el intervalo

>>

fcn en el intervalo de abcisas determinado por lim.


La cadena cad que indica el estilo de lnea es opcional.
Idem que el anterior pero lim determina tambi
en las
ordenadas.
En las mismas condiciones, pero especificando la pre-

tol que por defecto es 2e 3.

cisi
on con

[0, 10]:

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

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

10

Destaquemos que MATLAB obtiene autom


aticamente la escala de los ejes de la gr
afica, utilizando el mnimo y el
m
aximo de los datos, tanto en el eje de las ordenadas como en el de las abcisas. Para modificar dicha escala podemos
utilizar el comando

3.2

axis (ver seccion 3.4).

Gr
aficos con n
umeros complejos

polar(theta,r)
pol2cart(theta,r)

tetha son los


r son las distancias al origen.
Convierte las coordenadas polares dadas por theta y r en coordenadas carDibuja en coordenadas polares.

Los elementos del vector

angulos en radianes, y los elementos del vector


tesianas.

Vamos a ver dos ejemplos.

>>

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

>>

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

>>

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

>>

z = x+i*y; [ENTER]

>>

plot(z); [ENTER]

1.5

0.5

0.5

1.5

2
2

Gu
a R
apida de Matlabdvips .

1.5

0.5

0.5

1.5

25

m
at

3.2 Gr
aficos con n
umeros complejos

En el segundo de los ejemplos dibujaremos la funci


on

r=e

cost

2 cos 4 t + sin

t5
12

tanto en coordenadas polares como en coordenadas cartesianas.


90
120

>>

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

>>

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

>>

polar(t,r);[ENTER]

5.0543
60
2.5272

150

180

210

>>

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

>>

plot(x,y);[ENTER]

30

330
240

300
270

4
3

Un vector de n
umeros complejos pueden ser dibujado tambi
en con los comandos

quiver, feather, compass y

rose, tal y como se detalla a continuacion.


quiver(x,y)
quiver(x,y,dx,dy)
quiver(x,y, ...,s)
feather(z)
compass(Z)

Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento
y magnitud del n
umero complejo que tiene ese par de coordenadas reales.

(xi , yi ) con el argumento y magnitud


(dxi , dyi ).
El par
ametro s indica la escala con la que se dibujan las flechas, que por
Dibuja una flecha en las coordenadas
dados por

defecto toma el valor 1.


Dibuja flechas mostrando las magnitudes y argumentos de los elementos de

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


feather pero en este caso todas ellas tienen como origen el origen de

la matriz compleja
Como

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

rose(v,n)

el caso de no especificar
Veamos algunos ejemplos. Sea

v ; se utilizan n intervalos. En
n, el valor por defecto es 36.

la frecuencia de los
angulos dados en el vector

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


aficas.

>>

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
apida de Matlabdvips .

26

m
at

3.3 Gr
aficos en otros sistemas coordenados

quiver

feather

3.5

2.5
2

1.5

1
4

0.5
0

120

compass
90 7.0711
60
3.5355

150

330
300
270

60
1

150

240

10

rose
90 2

30

210

120

180

3.3

6
5

30

180

210

330
240

300
270

Gr
aficos en otros sistemas coordenados

El comando

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

de coordenadas.
Utiliza coordenadas logartmicas en el eje x. El resultado es el mismo que

semilogx(x,y)
semilogy(x,y)
loglog(x,y)

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


calcular log10 0.
utilizar

Es el mismo comando anterior, pero esta vez la escala logartmica est


a en el
eje y.
Dibuja ambos ejes en escala logartmica.

Como ejemplo dibujemos un gr


afico en un sistema de coordenadas logartmicas y lo comparamos con el mismo
gr
afico en coordenadas cartesianas.

Gu
a R
apida de Matlabdvips .

27

m
at

3.4 Controlando los gr


aficos

>>

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

>>

y=exp(x); [ENTER]

>>

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

>>

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

1200
1000
800
600
400
200
0

10

10

10

10

10

3.4

Controlando los gr
aficos

Los gr
aficos en MATLAB son objetos y los comandos que mostramos en esta secci
on son algunos de los que se utilizan
para definir y modificar esos objetos y el entorno en el que se crean.

figure(gfc)
clf
delete(n)
clc
home
hold on
hold off
hold
ishold

Permite mostrar la ventana gr


afica actual y crear nuevas ventanas gr
aficas.
Borra el contenido la
ultima ventana gr
afica utilizada.
Borra la ventana gr
afica

n.

Borra la ventana de comandos sin borrar la memoria.


Mueve el cursor hacia la esquina izquierda superior de la ventana de comandos.
Permite superponer gr
aficos hasta que se desactiva la opci
on con el comando

hold off.
hold on.
Intercambia las opciones hold on a hold off y viceversa.
Desactiva la opci
on

Es un comando l
ogico que devuelve 1 si para el actual gr
afico est
a activada
la opci
on

Un comando de uso muy frecuente es

hold on
o 0 en caso contrario.

subplot, que se utiliza para dibujar en la misma ventana grafica varios

dibujos. Este comando no dibuja nada, pero permite dividir la ventana gr


afica 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
afica en

subplot(m,n,p)
subplot

m filas y n columnas y hace que la subventana

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


desde arriba hacia abajo. Tambi
en puede ser utilizado como subplot(mnp).
Pasa la ventana gr
afica a su estado por defecto (subplot(1,1,1)) .

Los siguientes comandos dibujan la funci


on

f (x) = x sin x, en la ventana superior izquierda, su derivada en

la ventana superior derecha, una aproximaci


on 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
apida de Matlabdvips .

28

m
at

3.4 Controlando los gr


aficos

>>

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

10

4
5

2
0

0
2
4

6
8
10

10

10
10

Aproximacion a la derivada
10

x 10

10

Error relativo cometido

6
5
4
0

2
0

5
2
10
10

10

4
10

Las subventanas definidas por el comando

10

subplot pueden ser de diferentes tamanos dentro de la misma ventana

como muestra el siguiente ejemplo.

M-file para calcular el fractal de Mandelbrot y mostrarlo de tres formas diferentes. El programa
parte de una red de puntos definida por el usuario en el plano complejo e itera con cada n
umero de la red de acuerdo
Editamos un fichero

con el siguiente algoritmo:

z0
zi+1

= 0
= zi2 + .
100) que
> 0. Se genera de esta

El programa asigna al punto de la red que estamos calculando el n


umero de iteraciones (con un m
aximo de
hacen falta para que los t
erminos de la sucesi
on disten del lmite menos que una cantidad
manera una matriz

function

mandelbrot del mismo tamano que la red.

y = mandelb(renum,imnum)

epsilon=1e-14;
renum=input(renum:
imnum=input(imnum:

);
);

remin=-2; remax=1 ; immin=-1.5; immax=1.5;


reval1= linspace(remin,remax,renum);
imval1= linspace(immin,immax,imnum);
[Reval, Imval]=meshgrid (reval1,imval1);
Imvalreal=Imval;

Gu
a R
apida de Matlabdvips .

% Programa Mandelbrot

% Lee el numeros de nodos en el eje real


% Lee el numeros de nodos en el eje imaginario
% Define los parametros de la red
% Define vectores del tama\~no correcto
% Define la red de puntos

29

m
at

3.4 Controlando los gr


aficos

Imval=Imval*i;
Cgrid=Reval+Imval;

for reind=1:renum
disp([reind=,int2str(reind)]);
for imind= 1:imnum
c=Cgrid(reind,imind);
numc=0;
zold=0.0+0.0*i;
z=zold^2+c;

% Indica en que nodo estamos

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;
%whitebg(k);
subplot(2,2,1);
mesh(reval1,imval1,Mandelbrot);

%
%
%
%

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);
surf(Reval,Imvalreal, Mandelbrot);

% Figura inferior, dibuja solo una


% Dibuja la red como una superficie

view(2);

% Punto de vista abajo.

shading flat;
un color colormap(flipud(jet));

% Determina que cada ret\{\i}culo tiene


% 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
apida de Matlabdvips .

Borra la figura
Fondo negro
Esquina superior izquierda
Dibuja la red en tres dimensiones

30

m
at

3.4 Controlando los gr


aficos

1.5
1

100

0.5
50

0
0.5

0
1

0
1

1.5
2

1.5

100

80

0.5
60
0
40
0.5
20

1
1.5
2

1.5

0.5

0.5

Los ejes de cada dibujo son escalados autom


aticamente 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 lmites del dibujo actual en un vector fila. Para gr
aficos de dos

axis

[xmin xmax ymin ymax ] y para graficos de


[xmin xmax ymin ymax zmin zmax ].
Establece
la
escala
de
los
ejes
conforme
al
vector
v
que
ser
a
[xmin xmax ymin ymax ]
en
dos
dimensiones
o
[xmin xmax ymin ymax zmin zmax ] en tres dimensiones (en escala lodimensiones tiene los elementos

tres dimensiones

axis(v)

gartmica, tambi
en se utilizan valores actuales, no logartmicos).

axis(axis)

Bloquea la escala cuando se a


naden dibujos posteriores a uno que se ha
mantenido con el comando

hold.

Obtenemos diferentes resultados dependiendo de la cadena

cad utilizada:

auto Vuelve a la escala automatica.


equal Da la misma escala en ambos ejes.
ij Intercambia la parte positiva y negativa del eje y.
xy Deshace el anterior.
axis(cad)

image Igual que equal pero se ajusta al dibujo.


square Modifica la ventana grafica para hacer que la caja del dibujo
sea cuadrada.

normal Modifica la ventana grafica para que la caja del dibujo vuelva
al tama
no habitual.

off No se muestran los ejes.


on Deshace el comando anterior.
Tambi
en podemos cambiar la escala por medio del rat
on y ello es posible gracias al comando

zoom que se utiliza

como se muestra a continuaci


on.

Gu
a R
apida de Matlabdvips .

31

m
at

3.4 Controlando los gr


aficos

Permite agrandar la ventana con el bot


on izquierdo del rat
on, inhabilit
andolo

zoom on

con el bot
on derecho. Tambi
en permite seleccionar un
area para visualizarla
mejor.

zoom off
zoom
zoom out

Deshace el comando anterior.


Intercambia las posiciones de

zoom.

Establece la escala.

Con los siguientes comandos representaremos el crculo unidad en diferentes escalas:

>>

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

>>

x=sin(t); [ENTER]

>>

y=cos(t); [ENTER]

0.5

>>

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

>>

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

>>

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

>>

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

>>

axis square; [ENTER]

>>

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

>>

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

>>

axis normal; [ENTER]

>>

grid; [ENTER]

>>

0
0.5
1
1

0.6

0.4

0.2

0.2

0.4

0.6

0.8

0.5
0
0.5
1
1

2
0

En en el ejemplo anterior hemos utilizado el comando

2
2

1.5

0.5

0.5

1.5

grid que describimos a continuacion.

Dibuja una red en la ventana gr


afica.
Borra la red de la ventana gr
afica.
Intercambia las posiciones de

grid.

En muchas ocasiones necesitamos incluir texto en la ventana gr


afica para lo que podemos utilzar varios comandos.

Gu
a R
apida de Matlabdvips .

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

grid on
grid off
grid

0.8

32

m
at

3.4 Controlando los gr


aficos

title(txt)
xlabel(txt),
ylabel(txt),
zlabel(txt)

Escribe la variable cadena

txt como un ttulo centrado encima del grafico.

Escribe la variable cadena

txt como una etiqueta bajo el eje x, y y z respec-

tivamente.

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


x e y estan proporcionadas en las mismas unidades en las
que est
a dibujado el gr
afico. Si x e y son vectores, la variable cadena se
escribe en todos los pares de puntos (xi , yi ). Si txt es un vector de variable
cadenas con el mismo n
umero de filas que x e y, se escribe una de ellas en
Escribe la variable cadena

Las coordenadas

text(x,y,txt)

cada una de las posiciones.


Escribe la variable cadena

gtext(txt)

txt en la posicion de la ventana de graficos que

elija el usuario. Una cruz indica la posici


on donde se quiere colocar el texto
y es seleccionada mediante las teclas de desplazamiento o mediante el rat
on.
Escribe en un peque
no recuadro, las variables cadenas

legend(st1,st2, ...)

st1, st2, etc, al lado

de los estilos de linea utilizados en cada una de las gr


aficas. Este peque
no
recuadro puede moverse mediante el rat
on.

legend(l1,st1,
l2,st2, ...)
legend off

Escribe una leyenda pero se especifican los estilos de lnea.


Elimina la leyenda del dibujo actual.

Tambi
en hay comandos que convierten los n
umeros en variable cadenas,

num2str, int2str, sprintf, ... que

pueden ser
utiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto.
El siguiente programa dibuja un camino aleatorio (mediante la funci
on

rand). Este camino se puede considerar

como una simulaci


on del movimiento de una partcula 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
afico.

Gu
a R
apida de Matlabdvips .

33

m
at

3.4 Controlando los gr


aficos

Random walk
2

1
Fin

Inicio

4
9

Los comandos

ginput y waitforbuttonpress proporcionan al programador de MATLAB herramientas para crear

programas interactivos simples.


Lee las coordenadas desde la ventana de gr
aficos. Aparece un cursor que se
maneja bien con el rat
on o bien con las teclas de desplazamiento vertical y

[x,y]=ginput

horizontal. Presionado una tecla o un bot


on del rat
on se envan las coordenadas a MATLAB que las almacena en los vectores

x e y. El proceso termina

cuando se presiona la tecla [RETURN].

[x,y]=ginput(n)
waitforbuttonpress

Lee

n coordenadas de la ventana grafica.

Detiene el dibujo de gr
aficos hasta que se presiona una tecla o un bot
on del
rat
on.

El siguiente programa dibuja un gr


afico 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
apida de Matlabdvips .

34

m
at

3.5 Dibujando curvas de nivel

3.5

Dibujando curvas de nivel

Las curvas de nivel de una funci


on en dos variables se pueden dibujar en dos y tres dimensiones gracias al comando

contour en el primero de los casos y al comando contour3 en segundo. Estos dos comandos solo pueden ser utilizados
sobre una red rectangular previamente definida.

Z, en n niveles. Si no se especifica
n se dibujan 10 niveles. Los elementos se interpretan como niveles sobre el
plano XY .
cad es opcional y especifica el estilo de linea.
Dibuja los niveles especificados en el vector v.
Dibuja las curvas de nivel de la matriz

contour(Z,n,cad)
contour(Z,v)
contour(x,y,Z,n,v)
contourc
contour3

En las mismas condiciones que el comando anterior, pero se especifica la red

x y y la escala de los ejes.


C de contorno sin dibujar las lineas de contorno, utilizandose

sobre la que se va a dibujar la gr


afica
Calcula la matriz

los mismos par


ametros que en los casos anteriores.
Dibuja las curvas de nivel en tres dimensiones utiliz
andose los mismos
par
ametros que en los casos anteriores.
Escribe los valores de los niveles que representan las curvas de nivel. Las posiciones son aleatorias.

clabel(C)

C es la matriz que devuelven los comandos contour

contour3.

Se pueden especificar los niveles, con un vector

v y tambien se puede realizar

manualmente indic
andolo con la etiqueta manual.
Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una funci
on de dos
variables.

>>

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

>>

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

>>

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

>>

v1=-4:-1; [ENTER]

40

>>

v2=0:4; [ENTER]

30

>>

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

20

>>

hold on; [ENTER]

10

>>

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

>>

hold off; [ENTER]

>>

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

>>
>>

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

10

15

20

25

35

1
40

40

45

40

45

2 3

1
30

0
1
0

20

2
1

10

1 0

0
5

Como puede verse hemoos utilizado el comando

30

10

15

20

25

30

35

peaks que genera una matriz trasladando y reescalando la distri-

buci
on gaussiana en dos dimensiones.

Gu
a R
apida de Matlabdvips .

35

m
at

3.5 Dibujando curvas de nivel

Z . El
x e y de longitudes n y m, respectivamente, para los valores de la red. En la

En ocasiones puede ser necesario definir una determinada red para dibujar las curvas de nivel de una matriz
dominio se define mediante dos vectores

siguiente tabla se muestran los comandos que nos permieten construir dichas redes, incluso en tres dimensiones, sobre
un cilindro o sobre una esfera.

[U,V]=meshgrid(x,y)

Comando que obtiene la red adecuada para hacer gr


aficas tridimensionales a

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

[X,Y,Z]=cylinder(r,n)
[x,y,z]=sphere(n)

r, que contienen los radios


n puntos equidistantes en el eje del cilindro. Si no se especifica n, se
utiliza n = 20.
Devuelve n coordenadas igualmente espaciadas sobre una esfera unidad.
cono. Los radios del cilindro se toman del vector
en

Como ejemplo de uso del comando


1)

meshgrid dibujaremos las curvas de nivel de las siguientes funciones:

f (x, y) = sin x sin y , x, y [0, ] [0, ].

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

La primera parte del programa genera la red y eval


ua la funci
on, la segunda parte dibuja las lneas 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
apida de Matlabdvips .

36

m
at

3.6 Gr
aficos en 3-D

El resultado es el siguiente gr
afico.

sen(x)*sen(y)

sen(r)/r
8

60

6
50

40

2
0

30

2
20

10

6
10

20

30

40

x0.5 x3 + 0.2 y2 + 1

sen(r)/r

20

10

0.5

10
25

0.5
20

15

10

10

15

20

25

0
5

Una informaci
on m
as completa de las curvas de nivel la podemos conseguir si adem
as dibujamos el gradiente de la
superficie, que se obtiene gracias a la funci
on

gradient.

>>

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

>>

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

>>

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

>>

contour(Z); [ENTER]

>>

hold on; [ENTER]

>>

quiver(DZDX,DZDY); [ENTER]

>>

hold off; [ENTER]

30

25

20

15

10

3.6

10

15

20

25

30

Gr
aficos en 3-D

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

plot3.

Gu
a R
apida de Matlabdvips .

37

m
at

3.6 Gr
aficos en 3-D

x1, y1,
z1. La seleccion del estilo de lnea es opcional y se elige con cad. Todos

Dibuja un gr
afico 3-D que pasa por las coordenadas de los vectores

plot3(x1,y1,z1,cad)

los vectores deben tener la misma longitud. Este comando permite dibujar
varios gr
aficas a la vez en la misma ventana gr
afica.

plot3(X,Y,Z)

Dibuja gr
aficos para cada columna de las matrices

X, Y y Z, las cuales deben

tener el mismo tama


no.

El ejemplo siguiente muestra la simulaci


on de un camino aleatorio en tres dimensiones.

>>

x=cumsum(rand(1,n)-0.5);
[ENTER]

>>

y=cumsum(rand(1,n)-0.5);
[ENTER]

>>

z=cumsum(rand(1,n)-0.5);
[ENTER]

>>

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

>>

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


Inicio); [ENTER]

>>

0.5
0
0.5

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


Fin); [ENTER]

Inicio

1
1.5
2
Fin

2.5
3
3

2
1

1
0
0

1
1

El texto de las figuras en tres dimensiones se inserta de la misma forma que en dos dimensiones, tal y como se
puede ver en el ejemplo anterior.
El segundo comando que presentamos es el comando

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

mesh(Z)
mesh(Z,C)
mesh(U,V,Z,C)

Z como tercera coordenada sobre una red rectangular y

conecta los puntos adyacentes creando una superficie.


Si se especifica la matriz

cada elemento de la matriz.


Si se especifican los valores de
la red formada por

meshc(...)
meshz(...)
hidden on-off

C cada punto se dibuja en el color especificado por


U y V, dibuja la matriz Z sobre los nodos de

U y V.

Dibuja, con las mismas consideraciones que el caso anterior, una superficie
incluyendo las curvas de nivel bajo el gr
afico.
Dibuja una superficie incluyendo una red de referencia en el plano

XY .

Mantiene las lneas traseras escondidas o no dependiedo que escribamos


u

on

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

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


1)

f (x, y) = sin x sin y , (x, y) [0, ] [0, ].

2)

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

Gu
a R
apida de Matlabdvips .

38

m
at

3.6 Gr
aficos en 3-D

3)

f (x, y) =

p
sin x2 + y 2
, (x, y) [8, 8] [8, 8].
x2 + y 2

x=0:0.2:3*pi;
y=0:0.25:5*pi;
[XX,YY]=meshgrid(x,y);
z1=sin(XX).*sin(YY);
x=-3:0.25:3;
y=x;
[XX,YY]=meshgrid(x,y);
z2=XX-0.5*XX.^3+0.2*YY.^2+1;
x=-8:0.5:8;
y=x;
[XX,YY]=meshgrid(x,y);
r=sqrt(XX.^2+YY.^2)+eps;
z3=sin(r)./r;
clf
subplot(2,2,1); mesh(z1);
title(sin(x)*sin(y));
subplot(2,2,2); meshz(z2);
title(x-0.5*x^3+0.2*+y^2+1);
subplot(2,2,3); waterfall(z2);
title(x-0.5*x^3+0.2*+y^2+1);
subplot(2,2,4); meshc(z3);
title(sin(r)/r));
El resultado es el siguiente gr
afico

x0.5*x3+0.2*+y2+1

sin(x)*sin(y)

20
10

0
0
1
100

10
40
60

50

30

20

40
0

20

20
0

x0.5*x3+0.2*+y2+1

10
0

sin(r)/r)

20

10
0
0
10
40

1
40
30

20

20
0

Gu
a R
apida de Matlabdvips .

10
0

40

20

20
0

39

m
at

3.6 Gr
aficos en 3-D

Mostramos a continuaci
on otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el
caso anterior, creamos la red y luego evaluamos la funci
on.

X e Y, que toma los valores de


Z. Si no se especifica la red, se dibuja en una red uniforme. Los colores se
definen por los elementos de la matriz Al igual que fill pero en tres C, si
no se especifican se utiliza la matriz Z.
Del mismo modo que surf excepto que dibuja las curvas de nivel.
Del mismo modo que surf excepto que sit
ua un foco de luz en el punto dado
por el vector ls. El vector r nos proporciona el tipo de luz que puede ser de
los siguientes tipos: ambiente , difusi
on , especular e interior .
Del mismo modo que surf pero dibuja las normales a la superficie si no
se especifican los vectores Nx, Ny y Nz. En el caso de que se especifiquen
Dibuja la superficie especificada por la red

surf(X,Y,Z, C)
surfc(X,Y,Z, C)
surfl(X,Y,Z, ls,r)
[Nx,Ny,Nz] =
surfnorm(X,Y,Z)

solamente se almacenan los vectores normales.

diffuse(Nx,Ny,Nz,ls)

Devuelve el reflejo de una superficie difusa con componentes normales dadas

por los vectores Nx, Ny y Nz. El vector ls nos da la posici


on 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 espepcolor(X,Y,Z)
cifican X e Y es igual que aplicar surf(X,Y,Z); view(2)
Dibuja el polgono con esquinas dadas por los vectores x e y. El polgono 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
on 3.7).
Dibujemos la funci
on

f (r) =

sin r
con las curvas de nivel en el plano XY .
r

sin(r)/r

>>

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

>>

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

>>

R=sqrt(XX.^2+YY.^2)+eps;
[ENTER]

>>

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

>>

surfc(XX,YY,Z);
title(sin(r)/r);
[ENTER]

0.5

0.5
10
10

5
5

0
0
5

5
10

10

Repitamos el ejemplo a
nadiendo los vectores normales mediante el comando

Gu
a R
apida de Matlabdvips .

surfnorm.

40

m
at

3.6 Gr
aficos en 3-D

>>

clf; [ENTER]

>>

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

>>

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

>>

R=sqrt(XX.^2+YY.^2)+eps;
[ENTER]

>>

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

>>

surfnorm(XX,YY,Z);
title(sin(r)/r);
[ENTER]

sin(r)/r

1.2
1
0.8
0.6
0.4
0.2
0
0.2
0.4
10
10

5
5

0
0
5

5
10

En los ejemplos siguientes mostramos las diferencias entre los comandos

10

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];
k1=[0,1,0,0];
k2=[0,0,1,1];

% posicion de la fuente de luz


% difusion
% especular

subplot(2,2,1);
surfl(X,Y,Z,s); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
subplot(2,2,2);
surfl(X,Y,Z,s,k1); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
subplot(2,2,3);
surfl(X,Y,Z,s,k2); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))
subplot(2,2,4);
DD=diffuse(Nx,Ny,Nz,s);
surf(X,Y,Z,DD); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))

Gu
a R
apida de Matlabdvips .

max(max(Z))]); axis off;

max(max(Z))]); axis off;

max(max(Z))]); axis off;

max(max(Z))]); axis off;

41

m
at

3.6 Gr
aficos en 3-D

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


Los comandos

shading interp.

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

incluir las matrices con las coordenadas para llamar a la rutina gr


afica.
En muchas ocasiones un gr
afico puede ser m
as f
acil de visualizar si lo podemos observar desde un punto de vista
diferente.
Establece el punto de vista. El escalar

view(v,h)

escalar

[v,h]=view
view(r)

h el angulo de elevacion.

Devuelve el punto de vista actual,


angulo azimutal y el
angulo de elevaci
on.
Establece el visor en la posici
on

r=[x y z].

Devuelve los valores est


andar de
angulos de visi
on (con

view(n)

dos y con

view
view(T)

Se utiliza

n = 2 en dimension

n = 3 los de dimension tres).

Devuelve la matriz de visi


on (de dimensi
on

viewmtx(v,h,s,r)
Con el comando

v determina el angulo azimutal y el

4 4).

T como matriz de vision.

Devuelve la matriz de visi


on (que define el punto de vista y la direcci
on de
vista).

view obtenemos una superficie ya conocida pero desde un punto de vista distinto.
sin(r)/r
1

0.5

0.5
8

Tambi
en es posible utilizar el comando
el comando

view en dos dimensiones. As, si utilizamos en un grafico de dos dimensiones

view([1 0.6 0.35]) muestra como el crculo se puede dibujar en tres dimensiones.

Gu
a R
apida de Matlabdvips .

42

m
at

3.7 Control del color

1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8

1
0.5

1
1

0.5
0

0.5

0.5

Para investigar las funciones de tres variables gr


aficamente, ya que no podemos representarlas, MATLAB posee el
comando

slice.

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

Dibuja capas de la funci


on de tres variables definida por la matriz V . La matriz
V esta compuesta de nx capas, evaluada sobre tres matrices obtenidas a
partir de meshgrid con tres argumentos. Los vectores xs, ys y zs especifican
que capas se dibujan.

Probamos el comando con la funci


on

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 funcion en la red (podemos decidir que capas vamos a dibujar).
>>

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

>>

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

>>

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

25

20

15

10

0
25
20

25
15

20
15

10
10

5
0

Se
nalemos que existen otros muchos comandos para realizar y modificar gr
aficos como es el comando

rot90 que

nos permite rotarlos sobre la matriz definida.

3.7

Control del color

En MATLAB el usuario puede controlar los colores y la iluminaci


on de las gr
aficas en tres dimensiones.

Gu
a R
apida de Matlabdvips .

43

m
at

3.7 Control del color

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

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


interp utiliza colores interpolados en la superficie.

shading type

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
10

5
5

0
0
5

5
10

10

MATLAB utiliza mapas de colores para dibujar las superficies. Un mapa de color es una matriz

m 3 en la cual

las filas forman los colores, especificados por la cantidad de rojo (primera columna), verde (segunda columna) y azul
(tercera columna); as el mapa caracteriza

m colores.

El color sobre la superficie se especifica mediante un ndice del mapa de colores. Este ndice se calcula habitualmente en relaci
on al m
aximo y el mnimo de la superficie. El comando

colormap se utiliza para decidir que mapa de

colores utiliza MATLAB.

colormap(Cm)
colorbar(horiz)

Sit
ua como mapa de colores actual a

Cm. Si no se especifica se devuelve en

una matriz la tabla del gr


afico actual.
Dibuja una barra horizontal de escala de colores en la ventana de gr
aficos
actual. Si no se especifica la dibuja vertical.

Hay 11 mapas de colores predefinidos en MATLAB:

gray(m)
hsv(m)
hot(m)
cool(m)
bone(m)
copper(m)
pink(m)
flag(m)
prism(m)
jet(m)
white(m)

m
m
m
m
m
m
m
m

tonos de grises.
tonos de colores brillantes.
tonos de colores calientes.
tonos de colores fros.
tonos de colores hueso.
tonos de colores copper.
tonos de colores en rosa.
tonos de colores de banderas (EE.UU.).

rojo, naranja, amarillo, verde, azul y violeta.

m tonos de colores de hsv fros y calientes.


mapa blanco de colores.

A
nadamos a la figura anterior la barra de colores.

Gu
a R
apida de Matlabdvips .

44

m
at

3.8 Copia de la ventana gr


afica

Hay otros comandos que tambi


en manipulan el color.

rgb2hsv(Cm)
rgbplot(Cm)

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


inverso es

hsv2rgb(Cm).

Dibuja las columnas del mapa de colores

Cm.

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

Hace que el intervalo de colores actual se sit


ue entre los valores del vector

caxis(v)

Si no se especifica

retorna a la escala autom


atica.

spinmat(t,s)
brighten(Cm,s)
nt=brighten(Cm,s)
whitebg
whitebg(cad)

3.8

t segundos usando el paso s (los valores


s=1 y t=3. Si se utiliza inf se cambia para siempre.
Da brillo al gr
afico si 0 < s < 1 y se oscurece si 1 < s < 0.
Rota el mapa de colores durante
por defecto son

Devuelve el mapa de colores brillante u oscurecido, pero no redibuja.


Cambia el fondo entre blanco y negro.
Establece el color del fondo de acuerdo a una cadena de tipo de lnea, marcador y color, o con un vector

rgb.

Copia de la ventana gr
afica

Es posible obtener copias de las ventanas gr


aficas bien a impresi
on o bien a fichero.

print fichero
print -deps fichero
[str, dev] =printopt
orient cadena

Manda a

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

a la impresora. Se pueden consultar diferentes impresoras.


Se graba en un archivo de formato encapsulado

fichero.eps. Para enviarlo

posteriormente a otros documentos.


Nos da la cadena y salida utilizada por

print.

Establece la orientaci
on que utiliza MATLAB en la siguiente print. Si
cadena es lanscape se imprime en apaisado. Si es portrait se imprime en
vertical. Si es tall se imprime en vertical y a una escala que llena el papel.
Si no se especifica devuelve la orientaci
on actual en una cadena.

Gu
a R
apida de Matlabdvips .

45

Bibliografa
[1]

sar Gutie
rrez, Carmen Martnez,Gua R
Oscar Angulo, Eduardo Cuesta, Ce
apida de MATLAB,
IICE, 2001.

[2]

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

[3]

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

[4]

Walter Gander, Jiri Hrebicek, Solving Problems in Scientific Computing Using MAPLE and MATLAB,
Springer, 1997.

[5]

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

[6]

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

[7]

Cesar Perez, Matem


atica Informatizada con MATLAB, ra-ma, 1996.

[8]

Peregrina Quintela, Introducci


on 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
apida de Matlabdvips .

46

You might also like