19
INTRODUCCIÓN A MATLAB M. Santos Ingeniería de Sistemas y Automática Facultad de Informática

Intro matlab msantos

Embed Size (px)

Citation preview

Page 1: Intro matlab msantos

INTRODUCCIÓN A MATLAB

M. Santos Ingeniería de Sistemas y Automática

Facultad de Informática

Page 2: Intro matlab msantos

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.

Page 3: Intro matlab msantos

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

Page 4: Intro matlab msantos

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)

Page 5: Intro matlab msantos

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.

Page 6: Intro matlab msantos

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.

Page 7: Intro matlab msantos

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) : > < >= <= == ~= | &

Page 8: Intro matlab msantos

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

Page 9: Intro matlab msantos

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.

Page 10: Intro matlab msantos

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

Page 11: Intro matlab msantos

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.

Page 12: Intro matlab msantos

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

Page 13: Intro matlab msantos

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)

Page 14: Intro matlab msantos

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:

Page 15: Intro matlab msantos

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.

Page 16: Intro matlab msantos

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

Page 17: Intro matlab msantos

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:

Page 18: Intro matlab msantos

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.

Page 19: Intro matlab msantos

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.