Professional Documents
Culture Documents
M. Santos
Ingeniería de Sistemas y Automática
Facultad de Informática
Introducción a MATLAB
M. Santos
Todas las variables que se utilicen durante una sesión quedan en el espacio de
trabajo de Matlab, y pueden utilizarse mientras no se salga del programa o se
eliminen. Para ver las variables existentes en el espacio de trabajo de Matlab se
utiliza who o whos. Al visualizar la salida de esta orden, se puede destacar el uso
de las variables como matrices y la distinción de si tienen o no elementos
complejos.
Para ejecutar un fichero de Matlab (con extensión m) debe estar en el path, para lo
que hay que incluir el directorio que lo contiene en el path, o moverse al directorio
correspondiente utilizando los comandos propios del sistema operativo.
Para introducir argumentos, se pueden leer desde el teclado (por ejemplo, con el
comando “input”), o leerlos de una variable del espacio de trabajo, etc.
2. EL USO DE LA AYUDA
La herramienta de ayuda se invoca con el comando help de Matlab. Para obtener
una lista de los temas en los que se agrupan las funciones existentes basta utilizar la
orden help:
» help
HELP topics:
toolbox\local - Local function library.
Matlab\elfun - Elementary math functions.
Matlab\elmat - Elementary matrices and matrix manipulation.
Matlab\funfun - Function functions - nonlinear numerical methods.
Matlab\general - General purpose commands.
Matlab\color - Color control and lighting model functions.
Matlab\graphics - General purpose graphics functions.
toolbox\control - Control System Toolbox.
toolbox\ident - System Identification Toolbox.
toolbox\signal - Signal Processing Toolbox.
simulink\simulink - SIMULINK model analysis and construction functions.
simulink\simdemos - SIMULINK demonstrations and samples.
simulink\blocks - SIMULINK block library.
…………………..
For more help on directory/topic, type "help topic".
» help graphics
General purpose graphics functions.
» help subplot
3. TRATAMIENTO DE DATOS
Los datos de una matriz pueden ser reales o enteros, numéricos o caracteres
alfanuméricos, etc. No hace falta definir ningún tipo de dato antes de asignarle un
valor, aunque sí es necesario que tenga un valor en el momento de utilizarse. Existen
distintos formatos para trabajar con distinta precisión (short, long, hexadecimal, etc).
La forma de escribir una matriz es introducir los datos entre corchetes, separando
los elementos de una fila con espacios en blancos o comas, y terminar cada fila con
punto y coma.
A=
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Una vez introducido un elemento, pasa a forma parte del espacio de trabajo, y se
puede hacer referencia a él simplemente con su nombre en la ventana de comandos.
ans =
34
Para un vector, un elemento concreto se denota A(k), aunque también el valor A(k)
puede ser un dato de una matriz, en cuyo caso sería a contar k datos empezando por el
primer elemento de la primera fila. Por ejemplo, A(8) sería 15, el valor de A(4,2).
Si se hace una llamada a un elemento de una matriz que no existe A(4,5) porque
excede su dimensión, da error. Para operar matrices deben tener dimensiones iguales
o compatibles, según el tipo de operación que apliquemos.
A(4,5) = 17.62
A=
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17.62
La definición de intervalos se facilita mucho con el operador “dos puntos :”. Por
ejemplo, la expresión 1:10 genera un vector fila con los enteros de 1 a 10, con un
paso unitario entre ellos (por defecto).
1 2 3 4 5 6 7 8 9 10
100:-7:50
daría 100 93 86 79 72 65 58 51
0:pi/4:pi
resulta
Esto se puede aplicar a la matrices, tanto para crearlas como para leer sus
elementos; por ejemplo, A(1:k,j) daría un vector formado por los k primeros elementos
de la columna j.
Es decir, una forma más compacta de sumar los 4 elementos de la columna 4 sería
sum(A(1:4,4)) que daría de nuevo 34.
Hay otras formas de hacerlo; por ejemplo, “:” se refiere a todos los elementos de la
fila o columna de la matriz.
sum(A(:,end))
ans =
34
También se puede trabajar con cadenas de texto, donde el texto se considera como
un array con los ordinales correspondientes al valor ASCII de dichos caracteres. Se
introduce una cadena de caracteres con comillas simples (‘).
» palabra1='hola colegas'
palabra1 =
hola colegas
» palabra2='introducción'
palabra2 =
introducción
parrafo =
hola colegas
introducción
al Matlab
Como realmente son arrays de enteros, los arrays de caracteres también se puede
operar matemáticamente. Por ejemplo, pasar a mayúsculas añadiendo la diferencia del
ordinal de la ‘a’ y la ‘A’, convertir a texto una cadena de números ASCII (setstr), o
encontrar el valor ASCII de una cadena (abs).
suma : a + b
resta : a - b
multiplicación : a * b
división : a / b ó a\ b
potencia : a ^ b
Por ejemplo:
» A=[3, 4, 5] ;
» B=[5 ; 1 ; 2] ;
» A*B
ans = 29
Por supuesto, las operaciones con arrays siguen las normas convencionales, tanto
para el producto escalar de vectores como para el producto de matrices.
El operador se puede utilizar entre arrays del mismo tamaño (se comparan
componente con componente) o un array y un escalar (el escalar se compara con cada
elemento del array). Se pueden utilizar a la vez operadores lógicos y relacionales:
» x=(-2:2)/2
x=
-1.0000 -0.5000 0 0.5000 1.0000
» sin(x)./x
Warning: Divide by zero
ans =
0.9589 NaN 0.9589 0.8415
if
switch
case
for
while
continue
break
Es importante tener en cuenta las sentencias que terminan esos controles (end),
para colocarlas cuando son necesarias y en el orden adecuado.
A) BUCLES FOR
Los bucles for permiten que un grupo de órdenes se repitan un número fijo y
predeterminado de veces. La forma general de un bucle for es:
for x= array,
órdenes
end ;
Las órdenes entre las sentencias for y end se ejecutan una vez para cada columna
del array. Es decir, en cada iteración la variable x valdrá x=array( :,i) variando i
entre 1 y la última columna.
B) BUCLES WHILE
Un bucle while repetirá un conjunto de órdenes un número indefinido de veces. El
número de veces que se repetirá dependerá de si se cumple o no una determinada
condición. La forma general es:
while expresión,
órdenes
end;
C) ESTRUCTURAS IF-ELSE-END
En muchas ocasiones es necesario evaluar una expresión dependiendo de que una
condición se cumpla o no. Esta estructura es:
if expresión,
órdenes
end ;
if expresión,
órdenes_si_expresión_verdadera
else
órdenes_si_expresión_falsa
end ;
En esta última forma sólo se evalúan las órdenes asociadas con la primera
expresión verdadera; las expresiones condicionales siguientes se saltan hasta el end y
ni siquiera se evalúan. La orden else es opcional y podría no aparecer.
Una última anotación referente a las estructuras. Existe una forma de salir (o
romper) un bucle for o while, con la sentencia break, pero ésta no puede romper una
estructura if-else-end.
4. GRÁFICOS
En Matlab existen diversas formas de visualizar los datos. El comando más directo
y sencillo es “plot”:
plot(y),
si y es un vector, produce un gráfico lineal a tramos de los valores de y (eje
de ordenadas) frente a un vector índice de los elementos del vector (eje de abscisas).
Ejemplo:
x = 0:pi/100:2*pi; (creación de un vector x de 0 a 2pi)
y = sin(x);
plot(x,y)
Así mismo, se pueden especificar etiquetas para cada uno de los ejes, así como un
título para la figura:
xlabel('x = 0:2\pi')
ylabel('Función seno de x')
title(‘Representación de la función seno’,'FontSize',12)
Se pueden dibujar distintos datos en una figura, en cuyo caso es útil diferenciar
cada una de las gráficas por un color (Matlab lo hace automáticamente, pero lo puede
definir el usuario mediante la inicial del color) o un símbolo (asterisco, cruces,
puntos, etc.); por ejemplo:
y2 = sin(x-.25);
y3 = sin(x-.5);
plot(x,y,’r*’,x,y2,’b+’,x,y3, ‘g-’)
Para mostrar distintas gráficas dentro de una misma ventana existe un comando
muy flexible y potente, “subplot” (help subplot). La orden
subplot(m,n,p)
Matlab abre automáticamente una nueva figura para representar una gráfica si no
hay ninguna abierta. Si ya existía, la reemplaza.
Para mantener dos figura superpuestas, se utilizada el comando hold (o hold on),
que se libera con hold off.
También se puede crear una nueva ventana con el comando figure(n), o si hay
varias abiertas, referirse a una de ellas con esa misma orden.
Para salvar una figura, en el menú de archivo está disponible la opción Save; por
defecto se le da formato TIFF. También se puede guardar con otros formatos.
Existe una facilidad, los GUIs de Matlab, que permite diseñar ventanas con menús
para mostrar distintas opciones, evaluarlas, ejecutarlas, etc. Hay una herramienta de
Matlab que facilita este diseño de interfaces, denominada GUIDE.
4 4
Ga ( s ) = = 2
s( s + 5) s + s + 5s
x + 4
25 y
2
- s + 5s
» [numc,denc]=cloop(numa,dena,-1);
» num=numc*25
num =
0 0 100
» den=denc
den =
1 5 4
100
G( s) =
2
s + 5s + 4
» [A,B,C,D]=tf2ss(num,den);
» printsys(A,B,C,D)
a=
x1 x2
x1 -5.00000 -4.00000
x2 1.00000 0
b=
u1
x1 1.00000
x2 0
c=
x1 x2
y1 0 100.00000
d=
u1
y1 0
» whitebg
» step(numa,dena),step(num,den)
» t=0:0.1:20;
» w=2*pi/3;
» u=10*sin(w*t);
» [y,x]=lsim(num,den,u,t);
» plot(t,y)
» xlabel('Tiempo(seg.)'),ylabel('Amplitud')
Un sistema continuo que sea controlado por una computadora deberá ser estudiado
como un sistema discreto, debido a que el controlador (en este caso la computadora)
es discreto. Suponer un sistema continuo cuya función de transferencia es:
1
G (s) =
s ( s + 1)
» num=1;
» den=[1 1 0];
» [numd,dend]=c2dm(num,den,1,'zoh')
numd =
0 0.3679 0.2642
dend =
1.0000 -1.3679 0.3679
0.3679 z + 0.2642
H ( z) = 2
z − 1.3679z + 0.3679
» [numc,denc]=cloop(numd,dend,-1) ;
» y=dstep(numc,denc,50);stairs(y);
» xlabel('No. muestras');ylabel('Amplitud');
En general, se pueden realizar todos los estudios que se necesiten al igual que en
un sistema continuo.
2. RESOLUCIÓN DE ECUACIONES
Existen dos comandos que utilizaremos para la resolución de sistemas de
ecuaciones, según sean ecuaciones diferenciales (ode) o ecuaciones en diferencias
(feval). Aplican métodos de integración para resolver las variables del sistema y
obtener su valor en el tiempo.
2.1 ODE
Un archivo ODE es una función de un archivo “.m” que se escribe para
definir un problema de ecuaciones diferenciales de forma que los resolutores
(solvers) de la colección de ODE (Ecuaciones Diferenciales Ordinarias) obtengan sus
valores en el tiempo. Se denomina colección porque existen diversos distintos grados
de precisión para resolver las ecuaciones.
function F = odefile(t,y)
F = < la Inserción de una función de ‘t’ y/o ‘y’ aquí. >;
integra el sistema de las ecuaciones diferenciales y’= F(t,y), desde T0 a TFINAL, con
la condición inicial Y0. 'F' es un string con el nombre de un archivo ODE, que
contiene el sistema de ecuaciones a integrar. La función F(t,y) debe devolver un
vector columna. Cada fila en el array solución Y corresponde a un tiempo devuelto
en el vector columna T. Para obtener las soluciones en los tiempos específicos T0,
T1,..., TFINAL (todo creciente o todo decreciente, con un paso especificado), se
puede usar TSPAN = [T0 T1... TFINAL].
resuelve el sistema de igual forma que el anterior, pero con los parámetros de
integración que antes tenía por defecto reemplazados ahora por los valores dados en
OPCIONES. Normalmente las opciones usadas por defecto son la tolerancia escalar
del error relativo 'RelTol' (1e-3 es el valor por defecto), y vector de tolerancias
absolutas del error 'AbsTol', que se aconseja no cambiar.
resuelve el sistema y’= rigidode(t,y), con el error relativo tolerancia 1e-4 y tolerancias
absolutas de 1e-4 para los primeros dos componentes, y 1e-5 para el tercero.
Cuando se llama a esta función sin los argumentos de salida, como en este ejemplo,
ODE23 llama la función de salida predefinida ODEPLOT para trazar la solución, es
decir, dibuja la gráfica de la solución del sistema en el tiempo.
Otro ejemplo:
2.2 FEVAL
FEVAL(F,x1,... ,xn)
F = ‘foo',
FEVAL(F,9.64)
FEVAL se usa normalmente dentro de funciones que tienen los nombres de otras
funciones como argumentos. Si queremos guardar la salida de las soluciones del
sistema, utilizaríamos el comando de la siguiente manera:
3. ALEATORIEDAD
Se introducen aquí las funciones de distribución de probabilidad más utilizadas:
3.1 RAND
rand: genera números aleatorios distribuidos uniformemente
rand(n) es una matriz NxN con las entradas aleatorias, escogidas de una distribución
uniforme en el intervalo (0.0,1.0). Los comandos rand(M,N) y rand([M,N]) son
matrices MxN con las entradas aleatorias. rand(SIZE(A)) crea una matriz de números
aleatorios del mismo tamaño que A.
rand sin los argumentos es un escalar que cambia el valor cada vez que es llamado.
Este generador puede generar todo los números en coma flotante en el intervalo
cerrado [2^(-53), 1-2^(-53)]. Teóricamente, puede generar 2^1492 valores antes de
repetirse.
3.2. EXPRND
exprnd: genera números según una distribución aleatoria exponencial.
3.3 LOGNRND
lognrnd: genera números según una distribución aleatoria log-normal.
REFERENCIAS:
1. Matlab Student Edition, Prentice Hall, 2003 (www.mathworks.com)
2. Simulink Student Edition, Prentice Hall, 1996
3. López Orozco, J.A., Manual de Matlab, Dpto. Arquitectura de Computadores y
Automática, UCM, 1996.