Upload
laureano-zantedeschi
View
46
Download
3
Embed Size (px)
Citation preview
INTRODUCCIÓN A MATLAB
M. Santos Ingeniería de Sistemas y Automática
Facultad de Informática
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 2
PARTE I: INTRODUCCIÓN AL MATLAB Matlab (Matrix Laboratory) es un lenguaje de alto nivel que integra facilidades de cálculo, visualización y programación en un entorno muy sencillo de utilizar. Utiliza una notación matemática muy simple para tratar los problemas y resolverlos.
1. INTRODUCCIÓN Y CARACTERÍSTICAS BÁSICAS Matlab es un intérprete de comandos que permite la realización de cualquier operación con matrices de forma sencilla y rápida.
Es un sistema interactivo cuyo elemento básico es la matriz (y como caso particular, vectores o escalares), tanto de datos numéricos como de información no numérica. Todo elemento se considera una matriz: por ejemplo, un escalar es una matriz de (1x1); un vector es una matriz con solo una fila o una columna; una cadena de caracteres es una matriz fila de elementos (uno por letra), etc.
Al ser un intérprete, en la ventana principal aparece evaluado el último comando
suministrado al programa. Para evitar su visualización, conviene terminar los comandos con punto y coma “;”. Esto es también útil cuando se ejecutan programas con varias órdenes, si no queremos que todos los resultados de las operaciones sean volcados en la pantalla.
Si no se especifica el nombre de una variable para almacenar un resultado, por defecto este se vuelca en una variable temporal “ans”.
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.
1.1 ARCHIVOS MATLAB (SCRIPT O ARCHIVOS M) Matlab es un potente lenguaje de programación, a la vez que un entorno
interactivo de computación. Al ser un intérprete, ejecuta inmediatamente las órdenes que se le suministran. Cuando queremos realizar un número de comandos elevado y repetir éstos, la mejor solución es crear un fichero de texto, con extensión “.m”, donde se recojan esas órdenes. Matlab dispone para ello de un editor propio. Ese archivo script se puede invocar desde la línea de comandos simplemente poniendo el nombre del fichero.
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.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 3
Se pueden introducir comentarios (no ejecutables) en los ficheros anteponiendo en
la línea correspondiente el símbolo %. 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. Sin embargo, la forma más natural de aceptar argumentos de entrada y devolver
resultados es mediante una función, lo que aporta la flexibilidad de poder cambiar los parámetros de entrada siempre que queramos en la llamada a esa función (help function). Las variables internas son locales a la función.
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". Los grupos de funciones que tratan un tema relacionado se denominan Toolbox. Si
se desea ver las órdenes que tratan un tema en particular se debe utilizar help y el nombre del tema, por ejemplo para ver las órdenes que manejan gráficos se escribiría:
» help graphics General purpose graphics functions. Para ver el funcionamiento de una orden en particular se debe poner help y el
nombre de dicha función: » help subplot
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 4
En la ayuda se muestran las distintas formas de utilización de la función, para qué sirve y un pequeño ejemplo de su uso.
También existe documentación on-line, un asistente desde Matlab y documentos
pdf (manuales de referencia, etc.)
3. TRATAMIENTO DE DATOS
3.1 TIPOS DE DATOS Como ya se ha comentado, el elemento básico de Matlab es la matriz. Las matrices
se pueden introducir en Matlab de distintas formas: - Como una lista explícita de elementos - Cargando matrices de un fichero externo - Generar matrices mediante funciones, etc. 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).
Si se trata de un número imaginario, se trabaja con la unidad compleja, que es el
número i, y se introduce multiplicándolo por la variable correspondiente. Representa el valor i = − 1 . Posee todas las propiedades de los números complejos (suma, conjugado, 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.
Por ejemplo, tecleando: A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] aparece:
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. El elemento de la fila i y la columna j de A se llama A(i, j). Por ejemplo, A(4,2) es
el dato de la cuarta fila y segunda columna, es decir, 15. Se puede operar de esta manera con los distintos elementos de una matriz:
A(1,4) + A(2,4) + A(3,4) + A(4,4)
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 5
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.
Sin embargo, si almacenamos un valor en un elemento fuera de la matriz, ésta se
amplia hasta que abarca a ese nuevo dato. Por ejemplo:
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
Para un espaciado no unitario, se especifica el incremento (positivo o negativo,
real o entero) de la siguiente manera:
100:-7:50 daría 100 93 86 79 72 65 58 51
0:pi/4:pi resulta 0 0.7854 1.5708 2.3562 3.1416
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.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 6
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 Si se quiere crear un array de caracteres, todos deben tener el mismo número de
símbolos, y si no se deben rellenar con espacios: » parrafo=[palabra1;palabra2;'al Matlab '] 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).
3.2 OPERADORES BÁSICOS Los operadores pueden utilizarse tanto con matrices como con sus elementos
(números enteros, reales, imaginarios, etc). 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] ; El resultado de A*B será 29.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 7
» 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.
3.3 OPERADORES RELACIONALES Y LÓGICOS Incluyen todas las comparaciones comunes : <, >, <=, >=, == (igual) y ~=
(distinto). Los operadores lógicos son : & (and), | (or) y ~ (not) 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:
» (abs(' ')< parrafo(3,:)) & (parrafo(3,:)< abs('a')) Los operadores relacionales permiten realizar operaciones sobre unas componentes
y no sobre otras. Por ejemplo, al realizar la operación siguiente se obtendría NaN, que significa que no resulta un número. Esto ocurre porque se ha dividido por cero, lo que da una indeterminación.
» 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 Se usa un punto antes de la barra de división para indicar que la operación es
escalar y se debe realizar componente a componente y no utilizando las reglas de operación con matrices.
La siguiente tabla muestra el orden de preferencia de todos los operadores básicos,
siendo la de mayor preferencia la superior.
Preferencia de operadores en Matlab ^ .^ ‘ .’ * / \ .* ./ .\ + - ~ +(unario) -(unario) : > < >= <= == ~= | &
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 8
3.4 CONTROL DE FLUJO Matlab admite diversas estructuras de control de flujo: if switch case for while continue break Se utilizan como en cualquier otro lenguaje de programación. Suelen escribirse en
archivos de Matlab y no directamente en la línea de comandos. Permiten también estructuras anidadas.
Es importante tener en cuenta las sentencias que terminan esos controles (end),
para colocarlas cuando son necesarias y en el orden adecuado. Algunos ejemplos de estructuras de control de flujo son:
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.
Los bucles for deben seguir siempre estas reglas: a) Un bucle for no puede terminarse reasignando a la variable del bucle un valor
dentro del bucle. b) Pueden anidarse tantos bucles como se desee, pero todos deben terminar con un
end y el más interior corresponderá al for más interior. c) Deben evitarse siempre que exista otro método, en forma de array o matriz, de
resolver el problema planteado. La forma for, al ser un intérprete, siempre será más lenta y larga de escribir que una forma matricial. Por ejemplo:
» for n=1 :10, x(n)=sin(n*pi/100); end;
» n=1 :10 ; x=sin(n*pi/100) ;
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 9
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; Las órdenes se ejecutan mientras expresión sea verdadera.
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 ;
En algunos casos existen dos alternativas, dependiendo de si es cierta o no dicha expresión. Entonces:
if expresión, órdenes_si_expresión_verdadera else órdenes_si_expresión_falsa end ; Cuando hay tres o más opciones la forma de la estructura if-else-end será: if expresión1, órdenes_si_expresión1_verdadera elseif expresión2, órdenes_si_expresión2_verdadera elseif expresión3, órdenes_si_expresión3_verdadera ... else órdenes_si_ninguna_expresión_verdadera 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.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 10
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). plot(x,y) representa el vector x frente al vector y. Ejemplo: x = 0:pi/100:2*pi; (creación de un vector x de 0 a 2pi) y = sin(x); plot(x,y) Este comando establece automáticamente los límites de los ejes, el escalado de
cada eje, dibuja los puntos individuales y líneas entre ellos, etc. Además, permite hacer gráficas de distintos conjuntos de datos sobre el mismo eje, realizar líneas punteadas o de otros tipos, elegir los colores de las gráficas, etc (help plot).
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)
El comando grid dibuja una cuadrícula como fondo de la figura. 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-’)
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 11
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) divide la ventan en una matriz mxn de figuras, y selecciona la p para dibujar la
actual gráfica. También se pueden realizar dibujos en tres dimensiones, dibujos de superficies,
contornos, realizar distintas vistas de un mismo dibujo, etc. 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.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 12
PARTE II: APLICACIÓN DE MATLAB EN MODELADO Y SIMULACIÓN DE SISTEMAS
1. SISTEMAS CONTINUOS Y DISCRETOS Multitud de sistemas pueden estudiarse en Matlab desde diversos aspectos como:
su comportamiento en frecuencia o en el tiempo, su estabilidad, etc. Existen ciertas facilidades en Matlab para representar y trabajar con los sistemas, tanto definiendo su función de transferencia (relación de la salida de un sistema con la entrada) mediante comandos desde la ventana de Matlab, como mediante el uso de la herramienta Simulink, que permite especificar el sistema como un diagrama de bloques.
1.1. SISTEMAS CONTINUOS Los sistemas continuos que se suelen tratar son sistemas lineales, que representan
algún problema o planta real; en el caso de que el sistema no fuera lineal habría primero que linealizarlo. Estos sistemas continuos representarán entradas y salidas que varían continuamente con el tiempo. Un ejemplo sencillo sería el de un sistema cuya función de transferencia en lazo abierto es:
ssssssGa
54
)5(4)( 2 ++
=+
=
Que se puede representar como un diagrama de bloques en lazo cerrado (con
realimentación):
25 452s s+
y x -
+
Para introducir la función de transferencia se definen dos polinomios, en orden
descendente, que representen el numerador y denominador de la función de transferencia en lazo abierto.
» numa=4; » dena=[1 5 0]; La función de transferencia en lazo cerrado (con realimentación unitaria en este
caso), puede calcularse a partir del diagrama de bloques mostrado y mediante Matlab con el comando cloop (donde el último parámetro corresponde al valor de la realimentación):
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 13
» [numc,denc]=cloop(numa,dena,-1); » num=numc*25 num = 0 0 100 » den=denc den = 1 5 4 Luego, en lazo cerrado, el sistema tiene la siguiente función de transferencia:
45100)( 2 ++
=ss
sG
En Matlab se pueden utilizar distintos tipos de representación de los sistemas. Así,
se puede ver la descripción en el espacio de estados de este sistema, que vendrá dada por los valores de alas matrices a, b, c y d:
» [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 Un sistema se puede someter al sistema a diversas entradas como son: escalón,
impulso, o cualquier señal generada por el usuario. Por ejemplo, la respuesta escalón (step) del sistema en lazo abierto y lazo cerrado serían:
» whitebg » step(numa,dena),step(num,den)
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 14
Sistema en lazo abierto
Sistema en Lazo cerrado
O a una entrada de tipo senoidal en el lazo cerrado: » 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')
1.2. SISTEMAS DISCRETOS Los sistemas discretos son sistemas cuyas dinámicas y señales cambian solamente
en puntos claramente especificados en el tiempo. 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:
G ss s
( )( )
=+1
1
Se introduce el numerador y el denominador del sistema como polinomios. Para
convertirlo a discreto es necesario aplicar un método de conversión (por ejemplo, un retenedor de orden cero ZOH) y seleccionar el periodo de muestreo del sistema:
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 15
» 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 Luego la función discreta a tratar tendrá la forma:
H zz
z z( )
. .. .
=+
− +0 3679 0 2642
13679 0 36792
La respuesta de este sistema en lazo cerrado a una entrada escalón sería: » [numc,denc]=cloop(numd,dend,-1) ; » y=dstep(numc,denc,50);stairs(y); » xlabel('No. muestras');ylabel('Amplitud');
Existen diversos métodos para implementar la conversión de continuo a discreto
de un sistema. 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.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 16
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.
Por defecto, los solvers de la colección ode resuelven ecuaciones diferenciales
del tipo: dy/dt = F(t,y), donde la ‘t’ es una variable independiente e ‘y’ es un vector de variables dependientes.
Para hacer esto, los solvers llaman repetidamente a F=ODEFILE(T,Y) donde
el T es un argumento escalar, Y es un vector columna, y se espera que la salida de esa función, F, sea un vector columna de la misma longitud. Nótese que el archivo de ODE debe aceptar los argumentos de T y Y, aunque no tiene que usarlos. En su forma más simple, un archivo de ODE puede codificarse como: function F = odefile(t,y) F = < la Inserción de una función de ‘t’ y/o ‘y’ aquí. >; De forma más completa, el comando: [T,Y] = ODE23 ('F',TSPAN,Y0) con TSPAN = [T0 TFINAL] 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]. [T,Y] = ODE23 ('F',TSPAN,Y0,OPTIONS) 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. Los argumentos vacíos al final de la lista de la llamada puede omitirse, es decir, ODE23 ('F'). Como ejemplo, las ordenes options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); ode23('rigidode',[0 12],[0 1 1],options);
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 17
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: ode23('ecologico',[TI TF],[N1 N2]); resuelve la función ‘ecológico’ (definida en un archivo llamado ‘ecologico.m’) mediante el método de integración de Runge-Kutta, en el intervalo TI – TF, con las condiciones iniciales N1 y N2.
2.2 FEVAL La función FEVAL es similar a la ODE, pero se aplica a la resolución de ecuaciones en diferencias, es decir, para sistemas discretos. Por lo tanto, no requiere una variable tiempo en su formulación, ya que es la que adopta el paso en la resolución. FEVAL(F,x1,... ,xn) Ejecuta la función especificada por una cadena de caracteres, F, que contiene el nombre de una función (normalmente definida en un archivo “.m”), y evalúa esa función con los argumentos dados. Por ejemplo, F = ‘foo', FEVAL(F,9.64) es igual que foo(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: [y1,.. ,yn] = FEVAL(F,x1,... ,xn) devuelve múltiples argumentos de salida.
3. ALEATORIEDAD Se introducen aquí las funciones de distribución de probabilidad más utilizadas:
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 18
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. La orden rand tiene un argumento opcional, “state”, que permite inicializar su estado, guardar en una variable el valor de su estado, etc. rand ('seed') devuelve la semilla actual del generador uniforme. n=rand(1): genera un número real aleatorio (matriz 1x1), entre 0 y 1.
3.2. EXPRND exprnd: genera números según una distribución aleatoria exponencial. R = exprnd(MU) devuelve una matriz de números aleatorios escogidos de la distribución exponencial con el parámetro MU de media. MU es exponente de ‘e’, por lo que si se busca un MU de 10, por ejemplo, entonces MU deberá ser “1.1”. El tamaño de R es el tamaño de MU. R = exprnd(MU,M,N) devuelve una matriz MxN. M=exprnd(1.1,0.1): genera un número aleatorio con una distribución exponencial de media 10.
3.3 LOGNRND lognrnd: genera números según una distribución aleatoria log-normal. R = lognrnd(MU,D) devuelve una matriz de números aleatorios escogidos de la distribución log-normal con el parámetro MU de media y D de desviación típica. MU y D son exponentes de ‘e’, por lo que si queremos un MU o D de 10, entonces MU o D deberán ser “1.1”. El tamaño de R es el tamaño de MU y D. R = lognrnd(MU,D,M,N) devuelve una matriz MxN.
Introducción a MATLAB M. Santos
Ingeniería de Sistemas y Automática Facultad de Informática 19
M=lognrnd(1.1,0.1): genera un número aleatorio con una distribución log-normal de media 10 y desviación típica 1.
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.