ETSII-UPM
Introducción a Matlab 6.1
(2ª Parte)
Matemáticas de la Especialidad (Mecánica-Máquinas)
Madrid, 1 de octubre de 2002
Javier García de Jalón
ETSII - Departamento de Matemática Aplicada
a la Ingeniería Industrial
Cadenas de caracteres (strings)
q Las cadenas de caracteres
Se definen entre apóstrofos: 'cadena', 'mi casa', 'ni ''idea'''
Los caracteres se guardan en un vector (2 bytes por carácter)
ETSII-UPM
q Conversión entre caracteres y números
La función double(str) convierte una cadena en un vector de números ASCII
La función char(vect) convierte un vector de números en cadena de caracteres
q Matrices de caracteres
Cada fila es una cadena de caracteres
Todas las filas tienen el mismo número de elementos (se completan con
blancos las filas con menos caracteres)
Ejemplo: matchar=char('más', 'madera');
q Funciones para cadenas de caracteres
Conversión: double(cad), char(vect), char(c1,c2,c3), int2str(n), num2str(d),
str2double(s), cellstr(str)
Comparación: strcmp(c1,c2), strcmpi(c1,c2), strncmp(c1,c2,n), c1==c2
Concatenación: frase=['str1', ' ', 'str2', ' ', 'str3'];
Búsqueda y sustitución: findstr(c1,c2), strmatch(frs, str), strrep(c1,c2,c3)
Descomposición de una frase en palabras: [p1,resto]=strtok(str)
1
Hiper-matrices
q Matrices con más de dos dimensiones
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
La función cat(d, A, B) sirva para concatenar dos
matrices iguales según la dimensión "d"
i
q Ejemplo:
HM[:,:,1]=rand(3);
HM[:,:,2]=eye(3);
ETSII-UPM
A(i,j,k)
k
j
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)
ETSII-UPM
Matrices dispersas (sparse)
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
n=128; f=0.9; A=rand(n); A(find(A>f))=1; A(find(A<=f))=0; S=sparse(A);
2
Matrices dispersas (2)
q Funciones para crear matrices sparse
ETSII-UPM
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)
q Estructuras:
ETSII-UPM
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)
3
Vectores y/o matrices de celdas (cell arrays)
q Son vectores y/o matrices cuyos elementos pueden ser cada uno de
ETSII-UPM
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
q Ficheros de comandos *.m
ETSII-UPM
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
4
Funciones definidas por el usuario
q Se definen en ficheros *.m con el mismo nombre que la función
ETSII-UPM
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)
datos
function [ret1, ret2]=funcname(arg1, arg2, arg3,…)
...
resultados
...
ret1=...
ret2=...
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
Programación en ficheros *.m
q Bifurcaciones if y switch
ETSII-UPM
if condicion
sentencias
end
if condicion 1
sentencias 1
elseif condicion 2
sentencias 2
elseif condicion 3
sentencias 3
else
% opcional
sentencias 4
end
q 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
switch expresion
case exp1
sentencias 2
case exp2
sentencias 3
otherwise
% opcional
sentencias 4
end
while condicion
sentencias
end
5
Variables persistentes y variables globales
q Las variables persistentes:
ETSII-UPM
Son variables locales de una función que conservan su valor entre las
sucesivas llamadas a la función (por defecto las variables locales se crean cada
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
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
ETSII-UPM
ventana, por medio de menús, como se ve en la figura
6
Gráficos 2-D
q Función plot()
Su misión principal es dibujar un vector de valores y en ordenadas frente a otro
vector x en abscisas. Ambos vectores tienen el mismo número de elementos
ETSII-UP
Comentarios de: Introducción a Matlab 6.1 (2ª Parte) (0)
No hay comentarios