You are on page 1of 19

INTRODUCCIÓN A MATLAB

M. Santos
Ingeniería de Sistemas y Automática
Facultad de Informática
Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 2


Introducción a MATLAB
M. Santos

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

Ingeniería de Sistemas y Automática Facultad de Informática 3


Introducción a MATLAB
M. Santos

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)

Ingeniería de Sistemas y Automática Facultad de Informática 4


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 5


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 6


Introducción a MATLAB
M. Santos

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

Ingeniería de Sistemas y Automática Facultad de Informática 7


Introducción a MATLAB
M. Santos

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, » n=1 :10 ;


x(n)=sin(n*pi/100); x=sin(n*pi/100) ;
end;

Ingeniería de Sistemas y Automática Facultad de Informática 8


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 9


Introducción a MATLAB
M. Santos

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

Ingeniería de Sistemas y Automática Facultad de Informática 10


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 11


Introducción a MATLAB
M. Santos

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:

4 4
Ga ( s ) = = 2
s( s + 5) s + s + 5s

Que se puede representar como un diagrama de bloques en lazo cerrado (con


realimentación):

x + 4
25 y
2
- s + 5s

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

Ingeniería de Sistemas y Automática Facultad de Informática 12


Introducción a MATLAB
M. Santos

» [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:

100
G( s) =
2
s + 5s + 4

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)

Ingeniería de Sistemas y Automática Facultad de Informática 13


Introducción a MATLAB
M. Santos

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:

1
G (s) =
s ( s + 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:

Ingeniería de Sistemas y Automática Facultad de Informática 14


Introducción a MATLAB
M. Santos

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

0.3679 z + 0.2642
H ( z) = 2
z − 1.3679z + 0.3679

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.

Ingeniería de Sistemas y Automática Facultad de Informática 15


Introducción a MATLAB
M. Santos

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

Ingeniería de Sistemas y Automática Facultad de Informática 16


Introducción a MATLAB
M. Santos

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:

Ingeniería de Sistemas y Automática Facultad de Informática 17


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 18


Introducción a MATLAB
M. Santos

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.

Ingeniería de Sistemas y Automática Facultad de Informática 19

You might also like