You are on page 1of 13

ETSII-UPM

Introduccin a Matlab 6.1


(2 Parte)
Matemticas de la Especialidad (Mecnica-Mquinas)
Madrid, 1 de octubre de 2002
Javier Garca de Jaln
ETSII - Departamento de Matemtica Aplicada
a la Ingeniera Industrial

Cadenas de caracteres (strings)


ETSII-UPM
q

Las cadenas de caracteres

Conversin entre caracteres y nmeros

La funcin double(str) convierte una cadena en un vector de nmeros ASCII


La funcin char(vect) convierte un vector de nmeros en cadena de caracteres

Matrices de caracteres

Se definen entre apstrofos: 'cadena', 'mi casa', 'ni ''idea'''


Los caracteres se guardan en un vector (2 bytes por carcter)

Cada fila es una cadena de caracteres


Todas las filas tienen el mismo nmero de elementos (se completan con
blancos las filas con menos caracteres)
Ejemplo: matchar=char('ms', 'madera');

Funciones para cadenas de caracteres

Conversin: double(cad), char(vect), char(c1,c2,c3), int2str(n), num2str(d),


str2double(s), cellstr(str)
Comparacin: strcmp(c1,c2), strcmpi(c1,c2), strncmp(c1,c2,n), c1==c2
Concatenacin: frase=['str1', ' ', 'str2', ' ', 'str3'];
Bsqueda y sustitucin: findstr(c1,c2), strmatch(frs, str), strrep(c1,c2,c3)
Descomposicin de una frase en palabras: [p1,resto]=strtok(str)

Hiper-matrices
ETSII-UPM
q

Matrices con ms de dos dimensiones

La ltima dimensin representa la profundidad


de la matriz
Se pueden utilizar para almacenar varias matrices
distintas pero con el mismo tamao y significado
La funcin cat(d, A, B) sirva para concatenar dos
matrices iguales segn la dimensin "d"

Ejemplo:

A(i,j,k)

i
k
j

HM[:,:,1]=rand(3);
HM[:,:,2]=eye(3);
q

Funciones de Matlab que permiten trabajar con hiper-matrices

Todas las funciones que actan sobre escalares se aplican elemento a elemento
Las funciones que actan sobre vectores (sum, max, ...) se aplican segn la
primera dimensin, resultando una matriz de una dimensin menos
Las funciones matriciales de lgebra Lineal (inv, det, ...) se aplican slo a submatrices previamente extradas de la hiper-matriz
Otras funciones: size, ndims, squeeze, permute, ipermute, ... (ver en Help)

Matrices dispersas (sparse)


ETSII-UPM
q

Matrices dispersas o sparse

Son matrices que tienen la mayor parte


de sus elementos cero
Slo se almacenan y slo se opera con
los elementos distintos de cero

Almacenamiento de matrices sparse

Se almacena un vector con los nnz


valores distintos de cero
Se almacena otro vector con los nnz
ndices de fila de cada valor
Se almacenan en un tercer vector las n posiciones en los vectores anteriores de
los primeros elementos distintos de cero de cada columna
Ejemplo: con load west0479; se carga en memoria un ejemplo de una matriz
de 479479 con slo 1887 elementos distintos de cero (ver con spy(west0479))
Las funciones S=sparse(A); y A=full(S); permiten pasar de matrices llenas a
dispersas y viceversa
n=128; f=0.9; A=rand(n); A(find(A>f))=1; A(find(A<=f))=0; S=sparse(A);

Matrices dispersas (2)


ETSII-UPM
q

Funciones para crear matrices sparse

Otras funciones para operar con matrices sparse

full(S), find(S), [i,j,val]=find(S)


nnz(S), nonzeros(S), spy(S), issparse(S)
spfun('funName',S)
Reordenar los elementos: p=colmmd(S), p=symmmd(S), p=symrcm(S)

Funciones de lgebra Lineal

speye(n), sprand(n,m), sprandn(n,m), sprandsym(n), spdiags(A)


sparse(A), sparse(m,n), sparse(i,j,val,m,n)

Se puede utilizar el operador \ igual que para matrices llenas


[L,U,P]=lu(S), [L,u]=luinc(S), L=chol(S), L=cholinc(S), [Q,R]=qr(S),
[V,D]=eigs(S), svds(S), normest(S,tol), condest(S), sprank(S)

Criterios prcticos para trabajar con matrices sparse

Las funciones y operadores de Matlab tienden a conservar el carcter de los


argumentos lleno o sparse de la forma ms lgica y razonable
Consultar el Help para una informacin ms detallada

Estructuras (struct)
ETSII-UPM
q

Estructuras:

Agrupacin de datos de naturaleza diversa bajo un nombre comn


Cada uno de esos datos tiene tambin su propio nombre y genricamente se
llama campo (field)

Ejemplo: la estructura alumno tiene como campos numero y nombre


alumno.numero=97894; alumno.nombre='Luis Prez';
alumno=struct('numero', 97894, 'nombre', 'Luis Prez');

Otras caractersticas:

Pueden crearse vectores de estructuras:


alumno(50).numero=97894; alumno(50).nombre='Luis Prez';
Una estructura puede contener otras estructuras (por ejemplo una fecha)
En cualquier momento se puede aadir un nuevo campo a una estructura o
eliminar un campo existente

Funciones para operar con estructuras

fieldnames(stc)
isstruct(ST), isfield(ST, s), rmfield(ST, s), getfield(ST, s), setfield(ST, s, v)

Vectores y/o matrices de celdas (cell arrays)


ETSII-UPM
q

Son vectores y/o matrices cuyos elementos pueden ser cada uno de
un tipo de dato diferente

Los elementos de un vector de celdas se definen con llaves { }


vc(1)={[1,2,3]}, vc(2)={['mi nombre']}, vc(3)={rand(3,6)}
vc{1}=[1,2,3], vc{2}=['mi nombre'], vc{3}=rand(3,6)
vc={[1,2,3], 'mi nombre', rand(3,6)}

Funciones para vectores de celdas

Es importante que el nombre vc no haya sido utilizado antes (usar clear vc;)
cell(m, n), celldisp(ca), cellplot(ca), iscell(ca)
num2cell(x)

Conversin entre vectores de celdas y estructuras


cell2struct(ca), struct2cell(stc)
ST = cell2struct(vc, {'vector','cadena','matriz'}, 2);
vcc= struct2cell(ST)';

Programacin de Matlab
ETSII-UPM
q

Ficheros de comandos *.m

Se llaman mediante el nombre del fichero (sin la extensin)


Los comandos se ejecutan secuencialmente como si se introdujeran desde
teclado.
Las variables creadas pertenecen al espacio de trabajo del entorno desde el
que se ejecuta el fichero (no son visibles en las funciones, salvo la que lo ha
llamado)

Funciones *.m

Una funcin es una porcin de cdigo aislada del resto del programa
Hay funciones propias de Matlab y funciones definidas por el usuario
(funcname.m)
function [valores de retorno]=funcname(lista de argumentos)
La funcin recibe datos a travs de la lista de argumentos y devuelve
resultados a travs de los valores de retorno
Tambin puede intercambiar informacin a travs de variables globales,
declaradas como tales tanto en la funcin como en el programa que la llama
Las variables definidas dentro de la funcin (y los argumentos) son variables
locales a la funcin. Cada funcin tiene su propio espacio de trabajo

Funciones definidas por el usuario


ETSII-UPM
q

Se definen en ficheros *.m con el mismo nombre que la funcin

Los valores de retorno deben ser calculados en algn momento antes del fin
del fichero que defina la funcin
Los argumentos se reciben siempre por valor (si se modifican dentro de la
funcin, se saca una copia y se modifica la copia)
datos

function [ret1, ret2]=funcname(arg1, arg2, arg3,)


...
resultados
ret1=...
...
ret2=...
q
q

Ejemplo de llamada: [i,j]=funcname(A,B+C,H);


Las funciones de Matlab definidas en ficheros *.m

Admiten nmero variable de argumentos y de valores de retorno


Las variables nargin y nargout, accesibles dentro de la funcin, indican el
nmero de argumentos y valores de retorno con que la funcin ha sido llamada
varargin y varargout permiten utilizar cell arrays como datos y resultados

Programacin en ficheros *.m


ETSII-UPM
q

Bifurcaciones if y switch
if condicion
sentencias
end

if condicion 1
sentencias 1
elseif condicion 2
sentencias 2
elseif condicion 3
sentencias 3
else % opcional
sentencias 4
end

switch expresion
case exp1
sentencias 2
case exp2
sentencias 3
otherwise % opcional
sentencias 4
end

Bucles for y while (sentencia break)


for i=1:inc:n
sentencias
end
for i=vector
sentencias
end

for i=1:m
for j=1:n
sentencias
end
end

while condicion
sentencias
end

Variables persistentes y variables globales


ETSII-UPM
q

Las variables persistentes:

Son variables locales de una funcin que conservan su valor entre las
sucesivas llamadas a la funcin (por defecto las variables locales se crean cada
vez)
Las variables persistentes se crean dentro de una funcin anteponiendo la
palabra persistent

Las variables globales:

Son variables visibles y utilizables desde el programa principal y desde todas


aquellas funciones que las declaren utilizando la palabra global
Las variables globales se utilizan para compartir informacin entre una o ms
funciones y el programa principal, sin necesidad de pasarlas como argumentos
y/o valores de retorno
Las variables globales son consideradas peligrosas, porque si se produce un
error de programacin pueden ser modificadas por quien no debe. Su uso debe
restringirse a los casos imprescindibles
Se les suelen asignar nombres largos y con maysculas (VELOCIDAD,
TIEMPO, ...), de modo que sean fcilmente distinguibles de las dems
variables

Grficos en Matlab
ETSII-UPM
q
q
q

Matlab tiene capacidad de realizar grficos 2-D y 3-D


Los grficos se abren en ventanas especiales como la mostrada
Algunos parmetros grficos pueden ser controlados desde la propia
ventana, por medio de mens, como se ve en la figura

Grficos 2-D
ETSII-UPM
q

Funcin plot()

Su misin principal es dibujar un vector de valores y en ordenadas frente a otro


vector x en abscisas. Ambos vectores tienen el mismo nmero de elementos
Forma ms habitual:
plot(x,y,'g+') % dibuja una lnea verde con (+)
Colores:
y, m, c, r, g, b, w, k (black)
Tipos de lnea:
- : -. -Marcadores;
. o x + * s d ^ v > < p h
Elementos que se pueden aadir (actan sobre la figura activa): title('titulo'),
xlabel('tal'), ylabel('cual'), text(x,y,'texto'), gtext('texto'), grid

Los comandos hold on y hold off permiten dibujar varias lneas en


una misma figura. Por defecto, el nuevo dibujo sustituye al antiguo
Borrado selectivo de lneas o elementos grficos. Se debe guardar el
id (handle) al crear la figura

Ejemplo:
miplot= plot(x,y), pause(5);
delete(miplot);

Grficos 2-D (2)


ETSII-UPM
q

Otras formas de la funcin plot()

plot(y)

plot(x,A)
plot(A,x)
plot(A,B)

Dibuja los valores de y en ordenadas en funcin de los ndices


1,2,...,n
Dibuja las columnas de A en ordenadas frente a x en abscisas
Dibuja las columnas de A en abscisas frente a x en ordenadas
Dibuja las columnas de B en ordenadas frente a las de A en
abscisas (A y B deben tener tamaos compatibles)

Comando subplot(): Indica en que


particin de la figura se va a dibujar

Forma general: subplot(m,n,i)


Ejemplo:
x=0:pi/25:6*pi;
y=sin(x); z=cos(x);
w=exp(-x*.1).*y; v=y.*z;
subplot(2,2,1), plot(x,y);
subplot(2,2,2), plot(x,z);
subplot(2,2,3), plot(x,w);
subplot(2,2,4), plot(x,v);

Grficos 2-D (3)


ETSII-UPM
q

Comando axis. Valores mximos y mnimos en los ejes. Tiene la


siguiente forma general:
axis([xmin, xmax, ymin, ymax])

Para cambiar el origen y la orientacin:


axis('xy'), axis('ij')

xy

ij

Para que la escala sea igual en ambos ejes:


axis('equal')

Para que la zona representada sea cuadrada:


axis('square')

Para volver a los ejes por defecto


axis('normal')

Para guardar los ejes actuales antes de cambiarlos


v=axis;

Para restablecerlos ms adelante


axis(v)

Grficos 2-D (4)


ETSII-UPM
q

Funcin [x,y]=fplot('funcion', limites, 'cadena', tol)

'funcin' es el nombre del fichero *.m que define la funcin a dibujar


limites: vector de dos [xmin,xmax] o cuatro elementos
[xmin,xmax,ymin,ymax]
'cadena': control de color, marcadores y tipo de lnea (como en plot())
tol: tolerancia de error relativo (por defecto 1e-03)
El resultado de fplot() se puede dibujar inmediatamente (sin recoger valores de
retorno) o posteriormente con plot(), pasndole los valores de retorno
recogidos de fplot()

Introduccin de puntos con el ratn: funcin ginput()

[x,y]=ginput

introduce los puntos que se van clicando hasta que se


pulsa intro
[x,y]=ginput(n) introduce los n puntos que se clican a continuacin
[x,y,bot]=ginput devuelve tambin un vector de enteros con informacin
sobre el botn que se ha pulsado

Grficos 2-D (5)


ETSII-UPM
q

Forma general de dibujo de lneas: funcin line()

line([xini, xend]', [yini, yend]', 'color', 'g')


line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]); permite
tambin dibujar varias lneas a la vez:
line([X], [Y]); cada columna de [X] contiene la x inicial y final de un punto, y
lo mismo las columnas de [Y] con las coordenadas y
Control de las caractersticas de la lnea: se realiza por medio de pares
parmetro/valor, como por ejemplo:
line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LineStyle','
','Marker','*')

Dibujo de polgonos

Con la funcin plot()


Con llamadas repetidas a la funcin line()
Con la funcin fill(x,y,c). En este caso el polgono se rellena con el color c. Si
c es un vector de colores de la misma dimensin que x e y se rellena
interpolando.
Con llamadas a la funcin patch(x,y,c)

Ventanas y movies
ETSII-UPM
q

Control de ventanas. Funcin figure. Ventana activa

figure, figure(n) Crean una nueva ventana activa, si no existe. Se le asigna


el nmero indicado o un nmero consecutivo
close, close(n)
Cierran la ventana activa o la nmero n
clf, gcf
Borran el contenido de la ventana activa u obtienen el
nmero de la ventana activa
figure(gcf)
Trae a primer plano la ventana activa

Creacin de pelculas o movies:


M=moviein(12)
x=-2*pi:pi/24:2*pi; inc=pi/8;
for i=1:12
y=sin(x+i*inc);
plot(x, y);
M(:,i)=getframe; % captura el frame y lo guarda
end

Para ver la pelcula

Movie(M, 10, 15)

Grficos 3-D
ETSII-UPM
q

La funcin plot3(x,y,z) permite dibujar lneas en un espacio 3-D

Se pueden definir colores, tipos de lnea y marcadores de modo similar a 2-D

Funcin line(): dibuja lneas entre puntos en el espacio 3-D

Existe una versin 3-D de la funcin line() completamente anloga a la 2-D


line([xini,xend]', [yini,yend]', [zini,zend]','color','k');
line(X,Y,Z,'color','b');

Funcin patch(): dibuja polgonos en el espacio 3-D


patch(X,Y,Z,C);

Las funciones mesh(), surf() y contour() permiten dibujar superficies


3-D con distintos tipos de representacin
Control de la direccin de observacin: funcin view(az, el).

Los ngulos se definen en grados. Por defecto: az = -37.5, el = 30

Grficos 3-D (2)


ETSII-UPM
q

Funciones plot3(x, y, z), plot(x, y, z, 's'), mesh(X,Y,Z) y surf(X,Y,Z)

clear all, close all function z=test3d(x,y)


z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
x=[-3:0.4:3]; y=x;
- 1/3*exp(-(x+1).^2 - y.^2);
[X,Y]=meshgrid(x,y);
Z=test3d(X,Y);
subplot(2,2,1)
figure(gcf),fi=[0:pi/20:6*pi];
plot3(cos(fi),sin(fi),fi,'g');
pause(3);
subplot(2,2,2)
mesh(Z)
pause(3)

shading flat
shading interp
shading faceted

subplot(2,2,3)
figure(gcf), surf(Z)
pause(3)
subplot(2,2,4)
contour3(Z,16)

10

Grficos 3-D (3)


ETSII-UPM
q

Funcin [X,Y]=meshgrid(x,y);

Sirve para crear matrices con las coordenadas x e y de todos los puntos de la
retcula. Ejemplo:
x=[1, 2, 4];
y=[1, 3]';
[X,Y]=meshgrid(x,y)
X =
1
2
4
1
2
4
Y =
1
1
1
3
3
3
En las filas de la matriz X se repite al vector x tantas veces como elementos
tiene y. En las columnas de la matriz Y se repite al vector y tantas veces como
elementos tiene x.

Grficos 3-D (4)


ETSII-UPM
q

Mapas de colores: colormap(name)

Un color se puede definir por un nombre (los colores bsicos:


'y','m','c','r','g','b',) o por medio de tres nmeros entre 0 y 1 (las componentes
RGB)
Un mapa de colores es una matriz de tres columnas (componentes RGB),
cuyas filas representan colores. Por defecto tienen 64 filas.
Cada mapa de colores tiene un nombre y un estilo que caracteriza sus colores
Algunos mapas de colores estndar: hsv, hot, gray, bone, copper, pink, white,
flag, lines, colorcube, vga, jet, prism, cool, autumn, spring, winter, summer
Un mapa de colores se puede ver con las sentencias
colormap(copper)
pcolor([1:65;1:65]')

Al dibujar una figura con el mapa de colores activo los valores mximos se
dibujan con los colores altos del mapa y los valores bajos con los colores bajos

Funcin caxis([cmin,cmax])

Cambia la asignacin de colores, ajustando cmin y cmax a los valores


mximos y mnimos del mapa de colores (en lugar de a los valores ms altos o
ms bajos)

11

Ejemplo: Simulacin movimiento 2-D


ETSII-UPM
q

q
q

Se pretende estudiar el movimiento 2-D


de un bloque rectangular sometido a la
accin de la gravedad
El sistema tiene 3 grados de libertad
Ecuaciones diferenciales del movimiento:
mx&& = 0
my&& = mg
I&& = 0
que se pueden reducir a:
&&
&&
x=0
y = g

&& = 0

Matlab slo integra ecuaciones diferenciales


de orden 1. Definiendo:
u x&
v y&
&
las ecuaciones del movimiento se pueden
expresar como se indica en el recuadro

y
y

x
y

x& = u
y& = v
& =
y& = f (y, t )
u& = 0
v& = g

& = 0

Ejemplo: Simulacin movimiento 2-D (2)


ETSII-UPM
q

Los integradores de Matlab se utilizan en la forma siguiente:


[t, Y] = ode45('deriv', tspan, y0, options);

donde:

t es un vector con los instantes de tiempo en los que se dan resultados


Y es una matriz cuyas filas contienen los 6 resultados en cada instante
ode45 es el nombre de una funcin que utiliza el mtodo de Runge-Kutta
'deriv' es una cadena de caracteres con el nombre de una funcin que calcula
la derivada del vector de estado
tspan es un vector con los instantes de tiempo en que se desean resultados
y0 es un vector columna de seis elementos con las velocidades y posiciones
iniciales
options es una estructura que permite controlar algunos factores de la
integracin numrica

Una vez terminada la integracin numrica hay que representar


grficamente los resultados

12

Ejemplo: Simulacin movimiento 2-D (3)


ETSII-UPM
q

Las coordenadas de los vrtices


del bloque deben transformarse
a coordenadas generales
x = cos x sin y

y = sin x + cos y
x cos
=
y sin

sin x

cos y

y
y

x
x

o bien,

P
x

r = Rr

Para todos los puntos del bloque

PL=[ a -a -a a a
b b -b -b b];
PG=R*PL+g*ones(1,size(PL,2);
line(PG(1,:),PG(2,:),'color','k');

13

You might also like