Introducción a Matlab 6.1 (2ª Parte)

  ETSII-UPM

Introducción a Matlab 6.1

(2ª Parte)

  Ø Cada fila es una cadena de caracteres Ø Todas las filas tienen el mismo número de elementos (se completan con

  Ø

  Concatenación: frase=['str1', ' ', 'str2', ' ', 'str3'];

  Ø

  

Comparación: strcmp(c1,c2), strcmpi(c1,c2), strncmp(c1,c2,n), c1==c2

  Ø

  Conversión: double(cad), char(vect), char(c1,c2,c3), int2str(n), num2str(d), str2double(s) , cellstr(str)

  Ø

  q Funciones para cadenas de caracteres

  Ø Ejemplo: matchar=char('más', 'madera');

  blancos las filas con menos caracteres)

  Matrices de caracteres

  

Matemáticas de la Especialidad (Mecánica-Máquinas)

Madrid, 1 de octubre de 2002

Javier García de Jalón

  La función char(vect) convierte un vector de números en cadena de caracteres q

  Ø

  La función double(str) convierte una cadena en un vector de números ASCII

  Ø

  Los caracteres se guardan en un vector (2 bytes por carácter) q Conversión entre caracteres y números

  Ø

  Se definen entre apóstrofos: 'cadena', 'mi casa', 'ni ''idea'''

  Ø

  Cadenas de caracteres (strings) q Las cadenas de caracteres

  ETSII - Departamento de Matemática Aplicada a la Ingeniería Industrial ETSII-UPM

  

Búsqueda y sustitución: findstr(c1,c2), strmatch(frs, str), strrep(c1,c2,c3) Hiper-matrices ETSII-UPM q Matrices con más de dos dimensiones

  A(i,j,k)

  La última dimensión representa la “profundidad”

  Ø

  de la matriz

  Ø Se pueden utilizar para almacenar varias matrices

  distintas pero con el mismo tamaño y significado

  i Ø La función cat(d, A, B) sirva para concatenar dos k

  matrices iguales según la dimensión "d"

  j

  q Ejemplo: HM[:,:,1]=rand(3); HM[:,:,2]=eye(3); q Funciones de Matlab que permiten trabajar con hiper-matrices

  Todas las funciones que actúan sobre escalares se aplican elemento a elemento

  Ø

  Las funciones que actúan sobre vectores (sum, max, ...) se aplican según la

  Ø

  primera dimensión, resultando una matriz de una dimensión menos

  Ø Las funciones matriciales de Álgebra Lineal (inv, det, ...) se aplican sólo a sub-

  matrices previamente extraídas 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

  Ø Sólo se almacenan y sólo se opera con

  los elementos distintos de cero q

  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 479×479 con sólo 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 Matrices dispersas (2) ETSII-UPM q Funciones para crear matrices sparse speye(n) , sprand(n,m), sprandn(n,m), sprandsym(n), spdiags(A)

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

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

  q Funciones de Álgebra Lineal

  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) q Criterios prácticos para trabajar con matrices sparse

  Ø Las funciones y operadores de Matlab tienden a conservar el carácter de los

  argumentos —lleno o sparse— de la forma más lógica y razonable

  Ø Consultar el Help para una información más detallada

  Estructuras (struct) ETSII-UPM q Estructuras:

  Agrupación de datos de naturaleza diversa bajo un nombre común

  Ø Ø Cada uno de esos datos tiene también su propio nombre y genéricamente se

  llama campo (field) q

  

Ejemplo: la estructura alumno tiene como campos numero y nombre

alumno.numero=97894; alumno.nombre='Luis Pérez';

alumno=struct('numero', 97894, 'nombre', 'Luis Pérez');

q

  Otras características: Pueden crearse vectores de estructuras:

  Ø

  alumno(50).numero=97894; alumno(50).nombre='Luis Pérez';

Una estructura puede contener otras estructuras (por ejemplo una fecha)

  Ø

  En cualquier momento se puede añadir un nuevo campo a una estructura o

  Ø

  eliminar un campo existente q 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)}

  Ø Es importante que el nombre vc no haya sido utilizado antes (usar clear vc;)

  q Funciones para vectores de celdas cell(m, n) , celldisp(ca), cellplot(ca), iscell(ca)

  Ø

  num2cell(x)

  Ø

  q Conversión entre vectores de celdas y estructuras cell2struct(ca), struct2cell(stc)

ST = cell2struct(vc, {'vector','cadena','matriz'}, 2);

vcc= struct2cell(ST)';

  Programación de Matlab ETSII-UPM q Ficheros de comandos *.m

  Se llaman mediante el nombre del fichero (sin la extensión)

  Ø

  

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) q Funciones *.m

  

Una función es una porción de código 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 función recibe datos a través de la lista de argumentos y devuelve

  Ø

  resultados a través de los valores de retorno

También puede intercambiar información a través de variables globales,

  Ø

  declaradas como tales tanto en la función como en el programa que la llama

  Ø Las variables definidas dentro de la función (y los argumentos) son variables

  locales a la función. Cada función tiene su propio espacio de trabajo

  ETSII-UPM Funciones definidas por el usuario q Se definen en ficheros *.m con el mismo nombre que la función

  Ø

  Los valores de retorno deben ser calculados en algún momento antes del fin del fichero que defina la función

  Ø Los argumentos se reciben siempre por valor (si se modifican dentro de la

  función, se saca una copia y se modifica la copia) q

  Ejemplo de llamada: » [i,j]=funcname(A,B+C,H); q Las funciones de Matlab definidas en ficheros *.m

  Ø

  Admiten número variable de argumentos y de valores de retorno

  Ø Las variables nargin y nargout, accesibles dentro de la función, indican el

  número de argumentos y valores de retorno con que la función ha sido llamada

  Ø varargin y varargout permiten utilizar cell arrays como datos y resultados function [ret1, ret2]=funcname(arg1, arg2, arg3,…) ... ret1=...

  ... ret2=...

  datos resultados ETSII-UPM

  Programación en ficheros *.m q Bifurcaciones if y switch q

  if condicion 1 sentencias 1 elseif condicion 2 sentencias 2 elseif condicion 3 sentencias 3 else % opcional sentencias 4 end if condicion sentencias end switch expresion case exp1 sentencias 2 case exp2 sentencias 3 otherwise % opcional sentencias 4 end 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

Bucles for y while (sentencia break)

  

Variables persistentes y variables globales

ETSII-UPM q Las variables persistentes:

  

Son variables locales de una función que conservan su valor entre las

  Ø

  vez)

  Ø Las variables persistentes se crean dentro de una función anteponiendo la

  palabra persistent q 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 información entre una o más

  Ø

  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 programación pueden ser modificadas por quien no debe. Su uso debe restringirse a los casos imprescindibles

Se les suelen asignar nombres largos y con mayúsculas (VELOCIDAD,

  Ø

  

TIEMPO, ...), de modo que sean fácilmente distinguibles de las demás

variables Gráficos en Matlab

  ETSII-UPM q Matlab tiene capacidad de realizar gráficos 2-D y 3-D q Los gráficos se abren en ventanas especiales como la mostrada q

  

Algunos parámetros gráficos pueden ser controlados desde la propia

ventana, por medio de menús, como se ve en la figura

  ETSII-UPM Gráficos 2-D q Función plot()

  ETSII-UPM Gráficos 2-D (2) q Otras formas de la función plot()

  Ø

  Forma general: subplot(m,n,i)

  Ø

  Comando subplot(): Indica en que partición de la figura se va a dibujar

  abscisas (A y B deben tener tamaños compatibles) q

  Ø plot(x,A) Dibuja las columnas de A en ordenadas frente a x en abscisas Ø plot(A,x) Dibuja las columnas de A en abscisas frente a x en ordenadas Ø plot(A,B) Dibuja las columnas de B en ordenadas frente a las de A en

  plot(y) Dibuja los valores de y en ordenadas en función de los índices 1,2,...,n

  Ø

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

  Ø

  Ø

  (handle) al crear la figura

  

Los comandos hold on y hold off permiten dibujar varias líneas en

una misma figura. Por defecto, el nuevo dibujo sustituye al antiguo

q Borrado selectivo de líneas o elementos gráficos. Se debe guardar el

id

  xlabel('tal'), ylabel('cual'), text(x,y,'texto'), gtext('texto'), grid q

  Ø Colores: y, m, c, r, g, b, w, k (black) Ø Tipos de línea: - : -. -- Ø Marcadores; . o x + * s d ^ v > < p h Ø Elementos que se pueden añadir (actúan sobre la figura activa): title('titulo'),

  plot(x,y,'g+') % dibuja una línea verde con (+)

  Ø Forma más habitual:

  Su misión principal es dibujar un vector de valores y en ordenadas frente a otro

  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); Gráficos 2-D (3) ETSII-UPM q Comando axis. Valores máximos y mínimos en los ejes. Tiene la siguiente forma general: axis([xmin, xmax, ymin, ymax]) q Para cambiar el origen y la orientación: xy ij axis('xy'), axis('ij') q Para que la escala sea igual en ambos ejes: axis('equal') q

  Para que la zona representada sea cuadrada: axis('square') q Para volver a los ejes por defecto axis('normal') q

  Para guardar los ejes actuales antes de cambiarlos v=axis; q Para restablecerlos más adelante axis(v)

  Gráficos 2-D (4) ETSII-UPM q Función [x,y]=fplot('funcion', limites, 'cadena', tol)

  

'función' es el nombre del fichero *.m que define la función a dibujar

  Ø

  limites

  Ø : vector de dos [xmin,xmax] o cuatro elementos

  [xmin,xmax,ymin,ymax]

  Ø 'cadena' : control de color, marcadores y tipo de línea (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(), pasándole los valores de retorno

recogidos de fplot() q Introducción de puntos con el ratón: función 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 continuación

  [x,y,bot]=ginput devuelve también un vector de enteros con información

  Ø

  

sobre el botón que se ha pulsado Gráficos 2-D (5) ETSII-UPM q Forma general de dibujo de líneas: función line() line([xini, xend]', [yini, yend]', 'color', 'g')

  Ø

  line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]);

  Ø

  permite también dibujar varias líneas 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 características de la línea: se realiza por medio de pares

  Ø

  parámetro/valor , como por ejemplo: line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LineStyle','— ','Marker','*') q Dibujo de polígonos

  Ø Con la función plot()

  Con llamadas repetidas a la función line()

  Ø

  Con la función fill(x,y,c). En este caso el polígono se rellena con el color c. Si

  Ø

  c es un vector de colores de la misma dimensión que x e y se rellena interpolando.

  Con llamadas a la función patch(x,y,c)

  Ø

  Ventanas y movies ETSII-UPM q Control de ventanas. Función figure. Ventana activa figure, figure(n) Crean una nueva ventana activa, si no existe. Se le asigna

  Ø

  el número indicado o un número consecutivo close, close(n)

  Ø Cierran la ventana activa o la número n Ø clf, gcf Borran el contenido de la ventana activa u obtienen el

  número de la ventana activa figure(gcf) Trae a primer plano la ventana activa

  Ø

  q Creación de películas 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 Movie(M, 10, 15) q Para ver la película Gráficos 3-D ETSII-UPM q La función plot3(x,y,z) permite dibujar líneas en un espacio 3-D

  Se pueden definir colores, tipos de línea y marcadores de modo similar a 2-D

  Ø

  q Función line(): dibuja líneas entre puntos en el espacio 3-D

  Existe una versión 3-D de la función line() completamente análoga a la 2-D

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

  q Función patch(): dibuja polígonos en el espacio 3-D

  patch(X,Y,Z,C);

  

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

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

  Ø

  Gráficos 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) function z=test3d(x,y) clear all, close all 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) shading flat mesh(Z) shading interp pause(3) shading faceted subplot(2,2,3) figure(gcf), surf(Z) pause(3) subplot(2,2,4) Gráficos 3-D (3) ETSII-UPM q Función [X,Y]=meshgrid(x,y);

  Sirve para crear matrices con las coordenadas x e y de todos los puntos de la

  Ø

  retícula. 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.

  Gráficos 3-D (4) ETSII-UPM q Mapas de colores: colormap(name)

  Un color se puede definir por un nombre (los colores básicos:

  Ø

  'y','m','c','r','g','b',…) o por medio de tres números 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 estándar: 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 máximos se

  dibujan con los colores altos del mapa y los valores bajos con los colores bajos q

  Función caxis([cmin,cmax])

  Ø Cambia la asignación de colores, ajustando cmin y cmax a los valores

  máximos y mínimos del mapa de colores (en lugar de a los valores más altos o más bajos) Ejemplo: Simulación movimiento 2-D ETSII-UPM q Se pretende estudiar el movimiento 2-D

  y

  de un bloque rectangular sometido a la y acción de la gravedad x q El sistema tiene 3 grados de libertad ϕ

  x

  q Ecuaciones diferenciales del movimiento:

  y x

  mx my mg

  

I

&& = && = − ϕ && = que se pueden reducir a: x u

  & =  x y g

  && = && = − ϕ && =  y v

  & = q Matlab sólo integra ecuaciones diferenciales

    ϕ ω & de orden 1. Definiendo: =  ( , ) y f y t

  & =  u x v y u

  & = ≡ & ≡ & ω ϕ ≡ & 

   v g las ecuaciones del movimiento se pueden & = −

   expresar como se indica en el recuadro

  ω & =  Ejemplo: Simulación 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 función que utiliza el método de Runge-Kutta

  Ø

  'deriv'

  Ø es una cadena de caracteres con el nombre de una función 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

  Ø

  integración numérica q Una vez terminada la integración numérica hay que representar gráficamente los resultados

  ETSII-UPM Ejemplo: Simulación movimiento 2-D (3) q Las coordenadas de los vértices del bloque deben transformarse a coordenadas generales q Para todos los puntos del bloque

  Ø PL=[ a -a -a a a

  b b -b -b b] ;

  Ø

  Ø

  line(PG(1,:),PG(2,:),'color','k'); x y

  x y

  ϕ

  P

  ϕ x y

  x y

  cos sin o bien, sin cos cos sin sin cos x x y y x y x x y y

  ϕ ϕ ϕ ϕ ϕ ϕ ϕ ϕ

  = ⋅ − ⋅   = ⋅ +

  ⋅  −       =            

r = Rr

Mostrar más