Está en la página 1de 53

Introduccion

a
MATLAB

J.M. Gonzalez de Durana


Dpto. de Ingeniera de Sistemas
y Automatica
EUITI e ITT, UPV-EHU
VITORIA-GASTEIZ
26 de enero de 2004

Captulo 1
Los primeros pasos en Matlab
1.1

Caractersticas

Matlab es un paquete de software orientado hacia el calculo numerico cientfico e ingenieril. Integra calculo numerico, computacion de matrices y graficos en un entorno de
trabajo comodo para el usuario. Su nombre significa Laboratorio de Matrices y fue escrito
inicialmente en base a los ya existentes paquetes de calculo matricial LINPACK y EISPACK. Posteriormente se han a
nadido libreras, denominadas Toolboxes, especializadas
en diferentes areas cientficas. De entre ellas podemos destacar
Simulink Toolbox
Control System Toolbox
System Identification Toolbox
Robust Conntrol Toolbox
Signal Processing Toolbox
Filter Design Toolbox
Symbolic Math Toolbox
por su particular interes para nuestra area de conocimiento. La u
ltima de la lista, Symbolic
Math Toolbox, esta basada en el programa de calculo simbolico Maple y utiliza una sintaxis
diferente.
Matlab ha evolucionado y crecido con las aportaciones de muchos usuarios. En entornos universitarios se ha convertido, junto con Mathematica y Maple, en una herramienta
instructora basica para cursos de matematicas aplicadas as como para cursos avanzados
en otras areas. En entornos industriales se utiliza para investigar y resolver problemas
practicos y calculos de ingeniera. Son aplicaciones tpicas el calculo numerico, la realizacion de algoritmos, la resolucion de problemas con formulacion matricial, la estadstica,
la optimizacion, etc. Es de destacar la aplicacion en el estudio, simulacion y dise
no de los
sistemas dinamicos y de control.
3

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

1.2

Funcionamiento

Matlab es un programa interprete de comandos. Esto quiere decir que es capaz de procesar
de modo secuencial una serie de comandos previamente definidos, obteniendo de forma
inmediata los resultados. Los comandos pueden estar ya definidos en el propio Matlab y
pueden tambien ser definidos por el usuario. Para que Matlab pueda realizar este proceso
el usuario ha de escribir la lista de comandos en la ventana de comandos, si su n
umero es
reducido, o en un fichero con extension .m, constituyendo entonces un programa.
El metodo que debe seguirse para procesar los datos es muy simple:
1. El usuario escribe expresiones en la ventana de comandos, o bien en un archivo de
texto apropiado (archivo.m).
2. Tras la orden de ejecucion enter (o escribir el nombre del fichero), Matlab procesa
la informacion.
3. Matlab Escribe los resultados en la ventana de comandos y los graficos (si los hubiere) en otras ventanas graficas.

1.3

Sintaxis

Para escribir las expresiones es preciso respetar ciertas reglas sintacticas propias de Matlab. Algunas se parecen bastante a las de otros lenguajes de programacion por lo que no
resultan extra
nas.

1.3.1

Expresiones algebraicas

Estan formadas por cadenas de caracteres, n


umeros y operadores algebraicos. Las cadenas
de caracteres pueden ser smbolos de variables (matrices) o funciones de Matlab. Las
may
usculas y min
usculas son distintas.
Podemos distinguir dos tipos de expresiones: numericas (propias de Matlab) y simbolicas
(propias de Maple). Una expresion numerica puede conterner smbolos (nombres de variables) pero estos han de estar previamente asignadas a valores numericos. Las expresiones
>> a = 2; b = 3;
>> a + b
son numericas; el valor de a + b es hallado y mostrado por Matlab inmediatamente: ans = 5. Sin embargo, una expresion simbolica puede contener smbolos sin valor
numerico asignado. Si escribimos
>> syms x
>> p = 2*x^2 - 7;
la segunda expresion representa un polinomio en la indeterminada x. El valor de p para
x = 1 se puede obtener con
>> subs(p,x,1)
que dara como resultado: ans = 5.

1.3. SINTAXIS

1.3.2

Operadores

Hay operadores para n


umeros (reales o complejos) y para matrices.
Para n
umeros: +

N
umeros complejos: Esta definida la unidad imaginaria,
mente por los smbolos i y j
Para matrices: +

1, que se denota indistinta-

Para matrices elemento por elemento: .+

.-

.*

./

.^

Los operadores para n


umeros se colocan entre dos n
umeros y dan como resultado otro
n
umero. Por ejemplo 2 + 3 o a + b, si a y b han sido asignadas previamente a n
umeros.
Los operadores para matrices se colocan entre dos matrices y dan como resultado otra
matriz.
Los operadores de relacion son para n
umeros reales, se colocan entre dos n
umeros y
dan como resultado 1, que significa cierto, o 0, que significa falso. El significado de todos
ellos resulta obvio, si bien conviene aclarar que el operador == significa igual, en el sentido
de condicion (por ejemplo a==b puede ser cierto o falso), y es diferente del operador = que
sirve para asignar un valor a una variable (por ejemplo a=3) significa dar a la variable
a el valor de 3. El operador ~= significa distinto, tambien en el sentido de condicion.
Los operadores de condicion se utilizan, sobre todo, en las estructuras de programacion
if-then-else, for, y while.
Para delimitar las matrices se utilizan los corchetes [ ]. Para separar elementos
consecutivos, el espacio en blanco (barra espaciadora) o la coma , y para pasar de fila,
la tecla enter o el punto y coma ; .
La traspuesta conjugada de una matriz de n
umeros complejos A se representa por A.
Otros operadores, para usos varios, son
Ayudas al usuario: who, help, ! , save, load
Operaciones logicas: & (AND), ! (OR), ~ (NOT)

1.3.3

Funciones elementales

Matlab dispone de las funciones elementales mas comunes (las que tienen las calculadoras de bolsillo) y otras especiales, propias. Realizan una operacion sobre un argumento
numerico dado de tipo matriz y operan elemento por elemento. Las mas usuales son:
Trigonometricas: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh.
Logicas: any, all, find, exist, isnan, finite, isempty, isstr, strcomp.
Otras: abs, angle, sqrt, real, imag, conj, round, fix, floor, ceil, sign, rem, exp, log, log10.
Especiales: bessel, gamma, rat, ert, invertf, ellipk, ellipj.

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

1.4

Desarrollo de una sesi


on

Los manuales de Matlab explican detalladamente los conceptos, comandos y procedimientos del programa. Aqu vamos realizar una introduccion a su manejo mediante algunos
ejemplos. Es conveniente que los alumnos realicen por su cuenta otros parecidos y traten
de utilizar Matlab para resolver problemas de Matematicas, Fsica y otras asignaturas.
La instalacion se realiza automaticamente con el CD de Matlab. Una vez instalado el
programa, al picar con el raton en el icono de MATLAB aparece en la pantalla la ventana:

Esta ventana se llama MATLAB command window y es en la que el usuario opera.


En la primera lnea aparecen las opciones disponibles.

1.4.1

Comandos de Utilidad

Los comandos demo, help, who, whos, dir, diary y algunos otros, resultan muy u
tiles
pera el usuario en el desarrollo de la sesion.
El comando demo nos muestra, de modo interactivo, un amplio abanico de ejemplos
de aplicacion de Matlab y es de gran ayuda durante nuestros inicios con el programa.
El comando help funci
on_deseada muestra en la pantalla un texto explicando como
se utiliza. Por ejemplo,
>> help poly
POLY
Characteristic polynomial.
If A is an N by N matrix, POLY(A) is a row vector with
N+1 elements which are the coefficients of the
characteristic polynomial, DET(lambda*EYE(A) - A) .
If V is a vector, POLY(V) is a vector whose elements are
the coefficients of the polynomial whose roots are the
elements of V . For vectors, ROOTS and POLY are inverse
functions of each other, up to ordering, scaling, and
roundoff error.


1.5. OPERACIONES NUMERICAS

ROOTS(POLY(1:20)) generates Wilkinsons famous example.


See also ROOTS, POLYVAL.
muestra en la pantalla la ayuda sobre el polinomio caracterstico de una matriz. El uso
de la ayuda es muy conveniente, sobre todo en el perodo de aprendizaje.
Los comandos who y whos dan una lista de las variables que estan actualmente en la
memoria (workspace de Matlab. El comando dir, igual que el de DOS, lista el directorio
actual. El comando diary sirve para que todo lo que vamos tecleando y los resultados
obtenidos (incluidos los errores) se almacene en un archivo. Para ello debemos escribir,
en el instante a partir del cual queremos grabar la sesion
>> diary dia12
en donde dia12 es el nombre del archivo en el que queremos que se escriba. Para terminar
el proceso de grabacion hemos de teclear
>> diary off
El uso de la ayuda es muy conveniente, sobre todo en el perodo de aprendizaje.

1.5

Operaciones num
ericas

Matlab puede operar como una calculadora: si el usuario escribe las ordenes apropiadas, los resultados aparecen en la ventana de comandos (Command Window). Observese
que si ponemos ; al final de la expresion el resultado no se escribe en la pantalla.
Es capaz de realizar las operaciones aritmeticas suma, resta, multiplicacion, division y
potenciacion, con n
umeros (reales y complejos), con vectores (polinomios) y con matrices. Ademas, mediante la librera Symbolic Math Toolbox, puede tambien operar con
expresiones simbolicas.

1.5.1

Operaciones aritm
eticas

Las operaciones aritmeticas con n


umeros son, quizas, las mas sencillas que pueden efectuarse. Para ilustrar su realizacion, a continuacion se muestran una serie de lneas que
comienzan por >>, indicativo (o prompt) de la pantalla de comandos en una sesion de Matlab, seguido de una orden y del resultado que aparecera inmediatamente en la pantalla
si se ejecutara.
>> a =
a =
4
>> b =
b =
9
>> c =
c =
97
>> sin
ans =
1/2

5 + a

a^2 + b^2

(30*pi/180)

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

Si el usuario no ha asignado el resultado a una variable, Matlab lo hace utilizando la


variable ans
N
umeros complejos
La forma de operar con n
umeros complejos es igual que para los reales.
>> a=1; b=2; c=3;
>> x1=(-b+sqrt(b^2-4*a*c))/(2*a)
x1 =
-1.0000 + 1.4142i
>> x2=(-b-sqrt(b^2-4*a*c))/(2*a)
x2 =
-1.0000 - 1.4142i
>> a*x1^2+b*x1+c
ans =
0
>> c1=1+2*i
c1 =
1.0000 + 2.0000i
>> c2=1-2*i
c2 =
1.0000 - 2.0000i
Paso rectangulares polares:
>> M=abs(c1)
M =
2.2361
>> alpha=angle(c1)
alpha =
1.1071
>> alpha_grados=alpha*180/pi
alpha_grados =
63.4349
>> M*cos(alpha)
ans =
1
>> M*sin(alpha)
ans =
2
Podemos comprobar el resultado con las ordenes real(c1), imag(c1)
Operaciones con vectores
MATLAB no precisa una notacion especial para vectores. Vamos a hacer algunas operaciones sencillas con vectores.


1.5. OPERACIONES NUMERICAS
>> a
a =
1
>> b
b =
3
>> c
c =
4
>> d
c =
3

= [1 2 3 4 6 4 3 4 5]
2
3
= a + 2

4
5
= a + b

6
8 10
= a .* b

14

10

10

12

48

24

15

24

35

15

24

Los vectores, por defecto, son vectores fila.


Operaciones con polinomios
Los polinomios se representan en Matlab como vectores fila. Por ejemplo, el polinomio
3s3 5s2 + 7s + 3 se representa por
>> p=[3 -5 7 3]
Las races de un polinomio se hallan mediante la funcion roots:
>> r=roots(p)
El producto de dos polinomios se realiza a traves de la convolucion de los vectores de
sus coeficientes, mediante la funcion conv. Por ejemplo,
>> p1=[-1 -3 3 4];
>> p2=[1 2 4 0];
>> p=conv(p1,p2);
Para la division se usa la deconvolucion. Mediante la funcion deconv se obtiene el
cociente q y el resto r de la division.
>> [c,r]=deconv(p,p1);
La funcion polyval sirve para hallar el valor de un polinomio. Si el parametro que le
pasamos es un vector, calcula otro vector con los valores del polinomio para cada uno de
los del vector.
La funcion polyfit sirve para hacer ajustes polinomicos de una secuencia de datos
dada por dos vectores X e Y. Se puede elegir el grado del polinomio. En el siguiente
ejemplo se utilizan estas dos funciones:
>>
>>
>>
>>
>>
>>
>>

x=[0:10];
y=rand(x);
plot(x,y)
p=polyfit(x,y,3);
z=polyval(p,x);
hold
plot(x,z)

% Elegimos grado 3

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

10

Citaremos por u
ltimo la funcion residue que sirve para hallar los residuos de una
funcion racional en los polos de la misma (o coeficientes de su expansion en fracciones
simples), bajo el supuesto de que los polos sean simples. Ademas, dicha funcion calcula
tambien los polos y el termino directo.
>> B = [1 2 3 4];
>> A = [1 2 3 4 5 6 7];
>> [r,p,k] = residue(B,A);
Operaciones con matrices
Veamos como se efect
uan algunas de las operaciones mas comunes con matrices:
Introducir una matriz A:
>> A = [1 2 3;4 5 6;7 8 0]
Calculo de la transpuesta:
>> B = A
Producto matricial:
>> C = A * B
Determinante:
>> det(A)
Rango de la matriz:
>> rank(A)
N
umero de condicion:
>> cond(A)
Matriz inversa:
>> inv(A)
Valores propios y vectores propios:
>> [val,vec]=eig(A)
Valores singulares:
>> svd(A)
Exponenciacion matricial (eA ):
>> expm(A)
Polinomio caracterstico:
>> p = poly(A)
Las races de p, roots(p), deben ser los valores propios de A, eig(A).


1.6. OPERACIONES SIMBOLICAS

1.6

11

Operaciones simb
olicas

La librera Symbolic Math Toolbox da acceso a Matlab a algunas funciones del n


ucleo de
Maple que permiten operar con expresiones simbolicas.

1.6.1

Operaciones aritm
eticas

En las primeras versiones de la librera Symbolic Math Toolbox era necesario emplear
los comandos especiales symadd, symsub, symmul, symdiv y sympow para las operaciones
de suma, resta, multiplicacion, division y potenciacion, respectivamente, de expresiones
simbolicas. Afortunadamente, esto ya no es necesario y se pueden usar para ello los
operadores numericos +, -, +, *, / y ^, siempre y cuando las variables simbolicas se
hayan declarado previamente con sym() o syms. Si ponemos
>> syms a b p x
>> a = x^3+3*x^2-2*x+7;
>> b = x^2+x+3;
>> p = a * b
p =
(x^3+3*x^2-2*x+7)*(x^2+x+3)
obtenemos el polinomio producto en forma factorizada. Si lo queremos ver forma expandida, pondremos
>> expand(p)
ans =
x^5+4*x^4+4*x^3+14*x^2+x+21
Las demas operaciones simbolicas se efect
uan de modo similar.

1.6.2

Sustituci
on de variables

La sustitucion de un smbolo por otro en una expresion simbolica se puede realizar con
la orden subs. La forma de hacerlo es subs(expr, old, new), en donde expr es una
expresion simbolica, old es el smbolo (o valor) que se desea sustituir y new es el nuevo
smbolo o valor.
Supongamos que en el polinomio f = ax2 + bx + c queremos sustituir x por -1. Para
ello, si escribimos
>> syms x a b c
>> f = a*x^2 + b*x + c;
>> g = subs(f,x,-1)
entonces sale
g =
a - b + c
Se pueden tambien sustituir varias variables a la vez. Si en el mismo polinomio de antes
quisieramos sustituir a por 1, b por 2 y c por k, podemos poner

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

12

>> syms x a b c k
>> f = a*x^2 + b*x + c;
>> g = subs(f,[a,b,c],[1,2,k])
y obtendremos
g =
x^2+2*x+k
Numerador y denominador
En una expresion simbolica racional suele interesar conocer el numerador y el denominador
de la misma. Para esto tenemos la orden numden. Si, por ejemplo, nos dan la expresion
h=

x2 + 1
x
+
,
2x 1 x 1

podemos hallar el denominador y el denominador de la misma con


>> x=sym(x)
>> h = (x^2+1)/(2x-1) + x/(x-1);
>> [n,d] = numden(h)
n =
x^3+x^2-1
d =
(2*x-1)*(x-1)
Conversi
on de polinomios
Las ordenes poly2sym y sym2poly sirven, respectivamente, para convertir un polinomio
expresado en forma numerica (vector de coeficientes) en su expresion simbolica, y viceversa. El siguiente ejemplo ilustrara su utilizacion.
>> syms x
>> p = [1 2 3 4 5]
>> px = poly2sym(p,x)
px = x^4+2*x^3+3*x^2+4*x+5
>> sym2poly(px)
ans =
1
2
3
4
5

1.7

Gr
aficos

Matlab tiene una buena coleccion de comandos para obtener representaciones graficas a
partir de datos numericos y tambien algunos para expresiones simbolicas.


1.7. GRAFICOS

1.7.1

13

Gr
aficos en 2D

En las aplicaciones interesa a veces conocer el valor numerico de una funcion y = f (x)
para uno o varios valores de la variable. En Matlab, dada una funcion y = f (x), definida
en un intervalo [a, b], es posible representarla por un par (x,y) de vectores de n
umeros,
tales que el vector x contiene un conjunto finito de valores de x y el vector y contiene el
conjunto de valores imagenes de x por la funcion y, calculados por el propio Matlab. Una
vez representada de este modo la funcion, se puede representar graficamente.
Por ejemplo, dada la funcion y = 10(1 ex/3 sin(10x)), definida en el intervalo [0, 10],
una posible representacion en Matlab, seguida de su representacion grafica, sera
>> x=[0:0.1:10];
>> y=10*(1-exp(-x/3).*sin(10*x));
>> plot(x,y),title(Gr
afica de una funci
on)
Grfica de una funcin

20
18
16
14
12
10
8
6
4
2
0

10

La grafica corresponde a una funcion sinusoidal amortiguada mas una constante.

1.7.2

Gr
aficos en 3D

Las funciones de dos variables, de la forma f (x, y) se pueden representar graficamente


con Matlab en 3D. Para ello es preciso crear un dominio de puntos en forma de malla
rectangular en el plano (x, y), dentro del cual se desea representar la funcion. Esto se
hace con la orden meshgrid (antes meshdom) de Matlab. Veamoslo con un ejemplo. Sea
la funcion z : R2 R,
p
z = 1 x2 y 2 ,

cuyo dominio es el crculo x2 + y 2 < 1, y supongamos que queremos calcular los valores
de z en una region rectangular del plano (x, y) definida por los puntos (-1.25,-1.25) y
(1.25,1.25), y representarla graficamente. Para ello escribiremos:

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

14

>> [x,y] = meshgrid(-1.25:0.2:1.25,-1.25:0.2:1.25);


>> z = sqrt(1 - x.^2 - y.^2);
>> mesh(z)
y en la pantalla aparecera el grafico.

0.8

0.6

0.4

0.2

0
15
10
5
0

1.8

10

12

14

Ficheros-m

Matlab esta dotado de un mecanismo que le permite interpretar ficheros de texto, con
la condicion de que su nombre termine por .m. Se utilizan principalmente para crear
funciones (en el sentido matematico), programas y funciones (ordenes) de Matlab.

1.8.1

Funciones-funci
on

Mediante ficheros-m podemos crear funciones en el sentido matematico:


f : x f (x)
La denominacion que da Matlab a estas funciones es funciones-funcion (function functions). Estas funciones permiten realizar integracion numerica, resolver ecuaciones no
lineales, problemas de optimizacion y resolver ecuaciones diferenciales. Veamos un par de
ejemplos.
Dentro del editor definimos la funcion f 1(x)
function y=f1(x)
y=1 ./ ((x-0.3).^2+0.01) + 1 ./((x-0.9).^2+0.04)-6;
Una vez salvado el fichero podemos calcular la funcion en un intervalo y dibujarla.

15

1.8. FICHEROS-M
>> x=[-1:0.1:2];
>> y=f1(x);
>> plot(x,y);
Funcin y=f1(x)

100

80

60

40

20

20
1

0.5

0.5

1.5

Es posible hallar los valores maximo y mnimo de la funcion en un intervalo:


>> xmin = fmin(f1,0.5,1);
xmin =
0.6370
>> ymin=f1(xmin);
ymin =
11.2528
Otro ejemplo puede ser representar la funcion
f=

1
1 1
+
x y

utilizada en Optica. Para ello creamos el fichero lente.m con la definicion de la funcion.
Escribimos
function z=lente(x,y)
z = 1 ./ (1 ./ x + 1 ./ y);
grabamos el fichero, con el nombre lente.m, y ya podemos utilizar la funcion y representarla graficamente.

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

16

>> x=[-1:0.05:1];
>> y=x;
>> [xx,yy]=meshdom(x,y);
z=lente(xx,yy);
atgz=atan(z);
mesh(atgz,[60 60])
title(Funci
on lente. f= 1/(1/x + 1/y))
Funcin de dos variables

2
1.5
1
0.5
0
0.5
1
1.5
2
0
10
20
30
40
50

50

40

30

20

10

Podemos asimismo hallar el valor mnimo en un intervalo:


>> xmin=fmin(f1,0.5,1)
>> ymin=f1(ymin)

1.8.2

Programaci
on

Para evitar teclear repetidamente las mismas funciones, Matlab permite crear un fichero
con una lista de comandos que luego, al ser llamado, interpreta secuencialmente. Dispone,
como otros lenguajes de programacion, de las estructuras if-then-else, while y for. El
archivo en el que se escriben las ordenes de Matlab (programa) ha de tener la extension
.m y se puede escribir con cualquier editor de texto.
Para ejecutar el programa, simplemente ponemos su nombre
>> nombre-fichero
el mismo nombre que hayamos puesto antes (pero sin .m). En un fichero-m podemos colocar simplemente una lista de instrucciones de Matlab con lo que al llamarlo se ejecutaran
secuencialmente.
Matlab tiene un lenguaje de programacion propio, de tipo interprete. Es decir, es
capaz de interpretar una lista de instrucciones contenidas en un fichero-m. Igual que

1.8. FICHEROS-M

17

otros lenguajes de programacion, dispone de las estructuras de programacion clasicas:


if-then-else, for, y while.
Estructura if-then-else
La sintaxis de la estructura if-then-else es
if condici
on1
orden1a
orden2a
...
...
elseif condici
on2
orden1b
orden2b
...
...
else
orden n
end
en donde orden1*, orden2*, . . . , son ordenes y condici
on1, condici
on2, . . . , estamentos
condicionales o booleanos de Matlab. Puede observarse que no se pone la palabra then.
Veamos un ejemplo.
if i==j
A(i,j) = 2;
elseif abs(i-j) == 1
A(i,j) = -1;
else
A(i,j) = 0;
end
Estructura for
La sintaxis de la estructura for es
for

variable=expression
orden1a
orden2a
...
...

end
en donde orden1*, orden2*, . . . , son ordenes de Matlab. Por ejemplo,
A = zeros(3,4)
for i=[1:4]
for j=[1:4]
A(i,j) = i+j;

CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB

18
end
end

Puede haber, como en este ejemplo, varios bucles for anidados.


Estructura while
La sintaxis de la estructura while es
while condici
on
orden1a
orden2a
...
...
end
en donde orden1a, orden2a, . . . , son ordenes y condici
on es un estamento condicional
o booleano de Matlab. Como ejemplo, podramos poner
n = 0; eps=1;
while 1+eps > 1
eps = eps/2;
n = n+1;
end

Captulo 2
Simulink
2.1

Inicio

Un diagrama de bloques es un modelo grafico que representa el modelo matematico de


un determinado sistema dinamico. Simulink es una librera (toolbox ) de Matlab que
permite representar el diagrama de bloques de un sistema y a continuacion proceder a su
simulacion.
El programa se inicia escribiendo simulink en la pantalla de comandos de Matlab o
tambien pulsando con el raton en el icono coloreado de Simulink que aparece en la ventana
de comandos de Matlab. Con ello se abre una ventana titulada Simulink Library Browser
que contiene la librera Simulink y otras que son, digamos, complementarias. Al pulsar
sobre el signo + que precede a su nombre, aparece una nueva lista y entonces en la
pantalla veremos:

Simulink
Countinous
Discrete
Math Operations
Signal Routing
Sinks
Sources
..
.

Dials & Gauges Blockset

Stateflow
..
.

Los elementos de la lista de Simulink son los esenciales para construir diagramas de
bloques. El resto son libreras adicionales especializadas areas especficas de control, en
formas avanzadas de simulacion, etc.
19

CAPITULO 2. SIMULINK

20

2.2

Creaci
on y simulaci
on de un modelo

Para aprender a manejar Simulink comenzaremos realizando el modelo de un sistema de


control simple.
Dado el diagrama de bloques de un sistema de control,
U (s)

+
-

G(s)

Y (s)

H(s)
en donde

2s + 1
s+1
, H(s) =
2
s +4
s+1
y suponiendo que la entrada es una funcion de tipo escalon unitario, queremos realizar la
simulacion del mismo con Simulink.
La construccion del modelo es muy sencilla. En primer lugar hemos de abrir una
ventana para hacer el dibujo. Esto se hace picando con el raton en primer el icono de la
izquierda (hoja en blanco) de la ventana de Simulink o tambien seleccionando con el raton
File New Model, en la misma. A continuacion iremos colocando en esta ventana
los bloques del diagrama, para lo cual hemos de buscarlos en las libreras de Simulink.
Veamos donde se encuentran en este caso.
Para los bloques G(s) y H(s), funciones de transferencia, utilizaremos el elemento
Transfer Fcn que se encuentra en la librera Continuous de Simulink. Una vez encontrado el bloque, lo arrastramos con el raton a la ventana de dibujo. Como necesitamos dos
elementos, repetiremos la misma accion de nuevo. Tambien es posible efectuar una copia
del elemento, sin salir de la pantalla de dibujo, sin mas que arrastrar dicho elemento manteniendo pulsado el boton derecho del raton. Una vez que hemos colocado los dos bloques,
procederemos a ponerles sus datos. Para introducir los datos de G(s) repicaremos con el
raton en uno de los iconos Transfer Fcn. Veremos entonces que se abre una ventana,
y en ella pondremos, en formato numerico, los datos correspondientes a los polinomios
numerador y denominador de G(s), es decir los vectores [1, 1] y [1, 0, 4] correspondientes,
respectivamente, a dichos polinomios. Del mismo modo, lo que haremos para poner los
datos de H(s) es repicar en su icono e introducir los vectores [2, 1] y [1, 1] en la ventana
que se abra.
Para el bloque con funcion de transferencia K constante se podra usar tambien el
bloque Transfer Fcn si bien parece mas apropiado el bloque Gain que se encuentra en
la librera Math Operations de Simulink. Elegido este, lo arrastraremos con el raton a
la pantalla del dibujo y, tras un repique en el mismo, pondremos un 5 como valor de la
ganancia.
El bloque adecuado para poner el punto de suma es Sum y se encuentra en la librera
Math Operations. La ventana que se abre al repicar en el permite poner dos o mas
signos + o y cambiar la orientacion de las flechas de entrada y salida seg
un que la barra
vertical este en la posicion izquierda, derecha, o entre los signos + y .
Para realizar la simulacion hemos de poner como entrada una funcion de tipo escalon. Esto lo hacemos escogiendo el bloque Step de la librera Sources de Simulink. Lo
K = 5,

G(s) =

Y SIMULACION
DE UN MODELO
2.2. CREACION

21

arrastraremos tambien a la ventana de dibujo y, repicando en su icono, pondremos como


parametros los siguientes. Step time = 0, Initial value = 0, Final value = 1.
Y por u
ltimo, para ver el resultado de la simulacion, necesitamos un elemento en el
que se genere el grafico de la respuesta temporal. Lo mas sencillo es colocar el bloque
Scope que se encuentra en la librera Sinks.
Una vez colocados todos los bloques, utilizando el boton izquierdo del raton, los uniremos entre s mediante flechas y acomodaremos su posicion hasta dejarla a nuestro gusto.
El resultado puede ser, mas o menos, el siguiente.
s+1
s2+4

5
Sum

Step

Gain

Scope

Transfer Fcn

2s+1
s+1
Transfer Fcn

A veces puede ser conveniente invertir la orientacion de alg


un bloque para mejorar el
aspecto de su conexion. Esto ocurre en este caso con el bloque H(s) en el que las flechas
van hacia atras. El cambio orientacion de un bloque se realiza picando en el mismo
con el boton derecho del raton y a continuacion, con el boton izquierdo, en Format
Flip block. De modo similar son tambien posibles otras operaciones, como por ejemplo
ocultar el nombre de un bloque.
Los bloques pueden tener otras opciones que no describimos aqu pero que el usuario
puede ver con facilidad con la ayuda de Matlab, accesible mediante el boton derecho del
raton para cada bloque.
Una vez que el modelo ha sido completado, podemos proceder a la simulacion. En la
ventana del dibujo de Simulink, seleccionamos con el raton en Simulation Simulation
parameters. Esto nos permitira escoger los instantes de tiempo inicial y final, el algoritmo
y su paso, fijo o variable, as como algunos otros parametros relacionados con la simulacion.
Aparte los tiempos, que pueden variar mucho seg
un la simulacion de que se trate, los
otros valores que Matlab pone por defecto suelen resultar adecuados muchas veces. Como
resultado de la simulacion aparecera en el bloque Scope la grafica de la respuesta temporal.
Respuesta temporal

0.7

0.6

0.5

y(t)

0.4

0.3

0.2

0.1

0.1

0.2

0.3

0.4

0.5
t

0.6

0.7

0.8

0.9

CAPITULO 2. SIMULINK

22

2.3

Stateflow

Stateflow es una librera (toolbox ) de Matlab que permite modelar sistemas de eventos
discretos dentro de Simulink, utilizando cartas de estado (statecharts). Las cartas de
estado fueron introducidas por David Harel (Harel, 1987) y son una generalizacion de las
maquinas de estados.
La librera de Stateflow posee un u
nico elemento o bloque, denominado Chart, que
sirve para representar un sistema de eventos discretos. El bloque Chart se puede conectar
con otros bloques de Simulink, de tiempo continuo o discreto, para formar modelos de
sistemas hbridos que pueden ser muy u
tiles en la investigacion del comportamiento de
tales sistemas mediante simulacion.
Una carta de estados (statechart) es un grafico formado por elementos graficos sobre
los que van escritos ciertos elementos de texto escritos en un lenguaje especial. Entre
ellos, hay unos elementos de texto especiales que son los datos y los eventos. La carta
es como la hoja de papel en la que se representan los elementos. Cada carta representa
un sistema de eventos discretos y constituye un bloque de Simulink que puede conectarse
con otras cartas o con otros bloques de Simulink.

2.3.1

Elementos gr
aficos

Los elementos graficos de son


Estados
Transiciones
Uniones
mientras que los elementos de texto son
Datos
Eventos
Estados
Los estados tienen forma de rectangulo con los bordes redondeados y representan estados
(a veces llamados modos o fases) del sistema de eventos discretos. No debemos confundir
estos estados con los estados del clasico modelo de estado de un sistema de control. Los
estados aqu considerados representan los modos o formas de evolucion del sistema al
reaccionar frente a los eventos.
Junto a la esquina superior izquierda, cada rectangulo lleva un texto con un nombre
que identifica al estado. Tras el nombre del estado y el separador opcional /, pueden
aparecer otros textos indicando las acciones que llevara a cabo el sistema cuando este en
ese estado. La sintaxis de Stateflow permite especificar el instante en que se iniciara la
accion y la duracion de esta:
entry: la accion se inicia al entrar en este estado.
exit: la accion se inicia al salir de este estado.

23

2.3. STATEFLOW

during: la accion se inicia al entrar en este estado y permanece activa durante el tiempo
que dura el estado.
on event e : La accion se inicia si, estando en este estado, se produce el evento e.
Posibles acciones son cambiar el valore de una salida o efectuar una llamada a una funcion
de Matlab.
S1

e
S2

Figura 2.1: Estados y transicion


Un estado puede contener otros estados, o subestados, dentro de s. Entonces dicho
estado se llama estado padre, o superestado, y los subestados se llaman estados hijos. Hay
dos posibles formas de descomposicion de un estado (padre) en subestados (hijos). Un
estado (padre) tiene descomposicion AND si los estados hijos se activan simultaneamente
al activarse el estado padre y entonces los estados hijos se marcan con lnea discontinua.
Un estado (padre) tiene descomposicion OR (exclusiva) si u
nicamente puede estar activo
uno de los estados hijos al activarse el estado padre y entonces los estados hijos se marcan
con lnea continua.
Transiciones
Las transiciones tienen forma de flecha y representan las transiciones o saltos entre estados,
asociados a eventos, que se producen en el sistema de eventos discretos. Cada transicion
representa un evento e del sistema y se dibuja como una flecha que va desde el borde de
un estado S1 hasta el borde de otro estado S2 . Si el sistema esta en el estado S1 y se
produce el evento e, entonces el sistema pasa al estado S2 . El disparo de una transicion
puede implicar la ejecucion de una o mas acciones.
Una transicion especial es la llamada transicion por defecto (default-transition), que
sirve para se
nalar el estado inicial del sistema es decir, el primer estado en el que entrara el
sistema al iniciar su evolucion, y tambien el estado hijo inicial dentro de un estado padre.
Se reconoce por su forma ya que en el extremo opuesto a la flecha lleva un peque
no crculo
negro.
Cada transicion puede tener un texto escrito junto a ella que indica el evento que ha de
producirse para que se dispare la transicion as como las acciones que entonces el sistema
emprendera. Este texto se divide en tres partes, todas ellas opcionales:
e (en donde e es el nombre de un evento): la transicion se dispara al producirse el evento
e en el sistema. Si no hay nombre de evento entonces la transicion se disparara ante
cualquier evento del sistema.

CAPITULO 2. SIMULINK

24

[c] (en donde c es una condicion): la transicion se dispara si la condicion c (expresion


booleana) es verdadera y se produce el evento e. Si esta parte no existe, se asume que
c es cierta. Si la parte e del texto no existe, se disparara, bajo la misma condicion,
siempre y cuando se produzca un evento cualquiera en el sistema.
{a} (en donde a es una accion): al producirse transicion el sistema lleva a cabo la accion
a.
Si la transicion no lleva ning
un texto, entonces se disparara automaticamente, siempre y
cuando se produzca un evento cualquiera en el sistema.
Uniones
Las uniones tienen forma de peque
no crculo. Hay dos tipos de uniones: uniones conectivas
(connective junctions) y uniones de historia history junctions.
Las uniones conectivas son puntos de bifurcacion de la carta de estados y representan
puntos de decision del sistema de eventos discretos. Permiten conectar una transicion de
entrada con varias transiciones de salida. Su empleo puede a veces simplificar la carta de
estados y hacer que el codigo generado sea mas eficiente.

e1

e2

e3

H
C1

C2

Figura 2.2: Estados, subestados y uniones


Al entrar en una union conectiva, el sistema, a traves de una condicion, selecciona una
de las transiciones de salida para su evolucion.
Las uniones de tipo historia se utilizan en estados que han sido divididos por una
descomposicion OR. Si en el estado padre se pone el smbolo
H entonces cada vez que
se active el estado padre, el primer estado que se activara sera el estado hijo que estuvo
activo por u
ltima vez.

2.3.2

Elementos de texto especiales

Datos
Una carta tiene asociados ciertos datos a los que puede acceder. Es necesario declararlos
en Stateflow y pueden ser de los siguientes tipos:
Entrada de Simulink

DE UN MODELO CON STATEFLOWSIMULINK


2.4. CREACION

25

Salida de Simulink
Local
Constante
Temporal
Workspace
Los datos declarados como entrada o salida de Simulink generan automaticamente una
entrada o una salida en el bloque Chart creado por Stateflow en Simulink. Los de los
tipos local, constante y temporal pueden definirse para toda la carta o dentro de un
estado individual. Los datos temporales son solo validos mientras el estado padre se esta
ejecutando y son reinicializados cada vez que este se activa. El tipo workspace es una
construccion especial que permite utilizar el entorno de trabajo (workspace) de Matlab
para compartir datos a traves de toda la simulacion. Los datos por defecto, se almacenan
en memoria en formato double de C pero se puede cambiar a otros formatos. Cada dato
tiene asociado un valor inicial y un intervalo de posibles valores.
Eventos
Estos elementos representan los eventos del sistema. Pueden ser de los tipos:
Entrada de Simulink
Salida de Simulink
Local
Para los eventos que son entradas o salidas de Simulink, Stateflow crea automaticamente
un u
nico puerto de entradasalida de eventos en el bloque Chart de Simulink, de forma
que todos los eventos entran o salen, formando un vector de eventos, por el mismo puerto.
Cada evento lleva asociado un ndice que refiere la posicion del evento en el vector. La
forma de producir un evento en Simulink para que entre en el bloque Chart es a traves
de cambio brusco (flanco) de alguna se
nal. Al declarar el evento en Stateflow, se puede
elegir entre:
Flanco de subida
Flanco de bajada
Flanco indiferente

2.4

Creaci
on de un modelo con StateflowSimulink

Tras arrancar el programa Matlab, creamos un modelo nuevo (new-model ) de Simulink y


colocamos en el mismo, con el raton, el bloque Chart de Stateflow.
Con el editor grafico se pueden crear cartas Stateflow, de modo interactivo, simplemente picando con el raton en cada elemento y arrastrandolo a la ventana de dibujo.
Una vez colocados varios estados, podemos crear transiciones picando con el raton en

CAPITULO 2. SIMULINK

26

un estado y arrastrandolo hasta otro estado. Se etiquetan los estados y las transiciones
indicando las acciones que van a ocurrir durante la ejecucion y bajo que condiciones se
haran las transiciones. Finalmente se a
nade el historial, uniones, y estados en paralelo
para detallar las operaciones del modelo.
Se pueden utilizar sub-cartas (una carta dentro de otra carta) para dotar de jerarqua
al dise
no. Se permite crear transiciones entre objetos que residen en diferentes sub-cartas
al mismo nivel o a diferentes niveles en la carta superior. Las sub-cartas permiten reducir
una carta complicada a un conjunto de diagramas organizados jerarquicamente. Con ello
se consigue que la carta sea mas facil de entender y de mantener sin cambiar para nada
su semantica.
Los pasos a seguir para una aplicacion completa son:
Crear la carta Stateflow
Utilizar el Explorer de Stateflow
Definir un interface de bloques de Stateflow
Ejecutar la simulacion
Generar el codigo
La generacion de codigo depende de la maquina en donde se vaya a implementar la
aplicacion y no se hace hasta la u
ltima fase del dise
no. El codigo generado por defecto
es ANSI C pero existen programas que a partir del modelo de Stateflow generan codigo
para otros lenguajes. Entre ellos cabe citar el programa sf2vhld, que es un traductor
de Stateflow a VHLD, y el programa sf2plc que genera codigo para programar algunos
automatas programables.
Observaciones
Si la simulacion va a ser larga se puede adoptar un tiempo de simulacion infinito
poniendo el parametro de simulacion Stop time = inf.
Para que se inicie la simulacion el sistema necesita un primer evento, como de
arranque. Esto en ocasiones puede resultar molesto porque suele requerir que usuario produzca ese evento inicial de forma no muy ortodoxa. Esto puede evitarse
marcando X en la casilla con el texto Execute (enter) Chart At Initialization que
aparece en el men
u File Chart Properties de la ventana Chart de Stateflow.

2.4.1

Ejemplo

Un sistema de seguridad muy antiguo del ferrocarril son las barreras que se colocan
en los cruces entre la va ferrea y las carreteras o caminos. Como todos sabemos, el
funcionamiento de una de estas barreras como la de la figura 2.3 es muy sencillo: se abre
y se cierra para evitar que los coches choquen con los trenes.
El problema que se plantea es dise
nar un sistema de control automatico que sea capaz
de cerrar la barrera cuando se aproxime un tren y de cerrarla cuando el tren haya pasado.
Supondremos en principio que la va ferrea es de un solo sentido.

DE UN MODELO CON STATEFLOWSIMULINK


2.4. CREACION

27

Figura 2.3: Barrera de tren

Estamos ante un sistema de eventos discretos ya que la presencia y la ausencia del


tren son eventos que pueden aprovecharse para abrir y cerrar la barrera.
Para medir desplazamientos consideraremos una recta, eje x, dispuesta a lo largo de la
va y con origen 0 en el punto en que esta colocada la barrera, siendo el sentido positivo
el de salida del tren.
Los componentes necesarios para montar el sistema pueden ser: una barrera accionada
por un motor-reductor, dos sensores de presencia s1 y s2 , un sistema digital y reles y
elementos auxiliares de conexion.
Cada sensor de presencia se instalara junto al ral de la va de tal forma que al pasar
el tren emita una se
nal. Colocaremos el sensor s1 en un punto x1 en el sentido de llegada
del tren y alejado lo suficiente del cruce como para que de tiempo a bajar la barrera. El
sensor s2 sera colocado en otro punto x2 en el sentido de partida del tren, en otro lugar
proximo al cruce. De este modo podremos utilizar las se
nales de los sensores como eventos
indicativos de la presencia del tren dentro del intervalo [x1 , x2 ].
La operacion de la barrera debe ser: cuando el sensor s1 se activa, la barrera debe
cerrarse; cuando el sensor s2 se activa la barrera puede abrirse.
Para realizar el modelo del sistema de control de eventos discretos vamos a emplear
las posibilidades de division en paralelo (paralelismo) y de trasmision de eventos de que
disponen las cartas de estado.
Los interruptores Sw 1 y Sw 2 indicados en la figura 2.4 son elementos de tipo Manual
Switch de Simulink y sirven de modelos de los sensores de llegada y de salida del tren.
Una transicion de 0 a 1 del interruptor Sw 1 (flanco de subida) indicara que llega el tren
y una transicion de 1 a 0 del interruptor Sw 2 (flanco de bajada) indicara que el tren se
ha ido.
La carta de estados de Stateflow se compone de dos estados que evolucionan en paralelo, denominados Tren y Barrera, con dos hijos cada uno. El estado Barrera representa
el estado de la barrera y tiene dos hijos denominados Abrir y Cerrar. El estado Tren
representa el estado del tren y tiene dos hijos denominados Fuera y Dentro.
La carta de estados tiene como entrada (multiplexada) las se
nales generadas por los
interruptores Sw1 y Sw2 . En el estado Tren, un flanco de subida en la entrada de Sw1
es el evento preciso para disparar la transicion s1 mientras que un flanco de bajada la
entrada de Sw2 lo es para la s2 . A su vez las transiciones s1 y s2 transmiten eventos

CAPITULO 2. SIMULINK

28

Tren

Fuera

Barrera
Abrir

s1/e1

0
Sw1

Dentro

s2/e2

e1

e2

Cerrar

1
0
Sw2

Chart

Figura 2.4: Diagramas de Simulink y Stateflow

locales al estado Barrera para disparar las transiciones e1 y e2 .


Supondremos que inicialmente el tren esta lejos y la barrera esta abierta. Por tanto,
los estados iniciales del sistema son Fuera y Abrir.
La proximidad de un tren se simula accionando de 0 a 1 el interruptor Sw1 . Entonces
el estado Tren cambiara de Fuera a Dentro y antes de que se termine la transicion s1 , el
evento local e1 sera transmitido. El evento e1 accionara entonces la transicion dentro del
estado Barrera de Abrir a Cerrar.

Captulo 3
Ejercicios de C
alculo
3.0.2

Funciones variable compleja

En las aplicaciones de Sistemas Dinamicos y Teora de Control aparecen con frecuencia


las funciones de variable compleja. Una funcion de variable compleja es una funcion
f : CC
z 7 f (z)
Las funciones de variable compleja f (z) no se pueden representar en 3D. Caben dos
alternativas. La primera consiste en restringir el dominio de la funcion a una lnea en el
plano z, obteniendo otra lnea en el plano f (z). En el siguiente ejemplo, la lnea es el eje
imaginario. (transformacion conforme),
>> z=[-100:.1:100]*j;
>> f=1./(1+z);
>> plot(f);
0.5
0.4
0.3
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

La segunda posibilidad consiste en representar en 3D bien la parte real o bien la parte


imaginaria de f (z) (o bien modulo o argumento). En el siguiente ejemplo se representa
el argumento.
29


CAPITULO 3. EJERCICIOS DE CALCULO

30
>>
>>
>>
>>
>>

3.0.3

eps = 1e-9
[x,y] = meshdom(-1:0.1:1,-1:0.1:1);
z=x + j*y
f=1./(1+z+eps);
mesh(z)

Soluci
on num
erica de ecuaciones

El calculo aproximado de las races de la ecuacion f (x) = 0 en un intervalo [a, b] es


un problema clasico del analisis numerico. Son sin duda conocidos por el lector algunos
algoritmos como el metodo de las tangentes de Newton, el de la horquilla y el de las cuerdas
(o secantes) que lo realizan. Todos ellos realizan iteraciones sucesivas xi f (xi ), i =
1, 2, . . ., a partir de un valor xi supuesto de una raz y hasta conseguir que el valor de
f (xi ) sea menor que un n
umero prefijado.
Para resolver este problema con Matlab, disponemos de la funcion fzero. Hay que
pasarle un valor inicial de prueba. Por ejemplo,
>> xz1=fzero(f1,0)
>> xz0=fzero(f1,1)
Aqu, f1 es el nombre del fichero en el que esta definida la funcion.

3.0.4

Integraci
on num
erica

Ahora vamos a integrar numericamente f 1(x) en el intervalo [01] utilizando la funcion


quad (cuadratura) o quad8
>> I=quad(f1,0,1)
>> I=quad8(f1,0,1)
El resultado es el mismo.

3.1

Derivaci
on e integraci
on

El paquete Symbolic Toolbox de Matlab permite realizar las operaciones de derivacion e


integracion simbolicas.

3.1.1

Derivadas

El comando diff() de Matlab permite calcular derivadas, totales y parciales, de una


expresion algebraica, funcion de una o varias variables y parametros, respecto de una de
ellas (o de ellos). Supongamos que nos dan una expresion f (x), por ejemplo el polinomio
f (x) = a3 x3 + a2 x2 + a1 x + a0
y deseamos hallar sus derivadas respecto de x. Podemos hallar

df (x)
dx

de dos formas:

E INTEGRACION

3.1. DERIVACION

31

>> syms a0 a1 a2 a3 x
>> f=a3*x^3+a2*x^2+a1*x+a0
f =
a3*x^3+a2*x^2+a1*x+a0
>> fx=diff(f)
fx =
3*a3*x^2+2*a2*x+a ,
ya que Matlab asume por defecto que la variable independiente es x, o bien especificando
la variable respecto a la que queremos derivar,
>> fx=diff(f,x)
fx =
3*a3*x^2+2*a2*x+a1 .
La derivada segunda,

d2 f (x)
,
dx2

la obtenemos poniendo

>> f2x=diff(f,x,2)
f2x =
6*a3*x+2*a2
y, del mismo modo, las derivadas sucesivas:
>> f3x=diff(f,x,3)
f3x =
6*a3
>> f4x=diff(f,x,4)
f4x =
0
Ahora bien, si lo que queremos es derivar respecto a un parametro, supongamos que a2 ,
escribiremos
>> fa3=diff(f,a3)
fa3 =
x^3
La operacion de derivacion, como otras, se puede extender a vectores y matrices. Si
pedimos la derivada de una matriz A respecto de una variable x, Matlab calcula otra
matriz cuyos elementos son las derivadas de los de la matriz A respecto de x.
>> syms x y
>> A=[1, x*y; x^2+y^2,x/y]
A =
[
1, x*y]
[ x^2+y^2, x/y]
>> diff(A,y)
ans =
[ 0,
x]
[2*y, -x/y^2] .
Lo mismo puede hacerse con vectores.


CAPITULO 3. EJERCICIOS DE CALCULO

32

3.1.2

Integrales

El comando int() de Matlab permite resolver integrales,


tanto indefinidas como definidas.
R
x
Sea la funcion f (x) = ln(x)
. Para hallar la integral f (x)dx, indefinida, basta con poner
>> syms a b x
>> f=log(x)/x
f =
log(x)/x
>> int(f)
ans =
1/2*log(x)^2 .
y para obtener la expresion de una integral definida, tal como

Rb
a

f (x)dx, pondremos

>> int(f,a,b)
ans =
1/2*log(b)^2-1/2*log(a)^2
Observar que, en lugar de a y b, tambien habramos podido poner dos n
umeros.
Si la variable de integracion no es x, debemos especificarla:
>> syms u v
>> int(sin(u*v)*cos(u*v),v)
ans =
1/2*sin(u*v)^2/u
Igual que la derivacion, la integracion se puede extender a vectores y matrices.

3.2

Ecuaciones diferenciales

Matlab permite resolver ecuaciones diferenciales de dos formas: numerica y simbolica.

3.3

Resoluci
on num
erica

Matlab dispone de las funciones ode23 y ode45 para resolver ecuaciones diferenciales.
Para ello hemos de convertir primero (si es posible) la ecuacion diferencial de orden n en
n ecuaciones diferenciales de primer orden (forma normal). Veamos el metodo mediante
el ejemplo del pendulo.

SIMBOLICA

3.4. RESOLUCION

33

En la figura, f (t) es una fuerza exterior, tangencial, aplicada


al pendulo. La ecuacion diferencial de deduce aplicando la
segunda ley de Newton:

f (t) mg sin() ma = 0
f (t) mg sin() ml = 0
ml + mg sin() f (t) = 0

f (t)

Haciendo el cambio = x1 , = x2, queda


(
x 1
= x2
f (t) mg sin x1
x 2 =
lm
Para resolver este sistema de ecuaciones de primer grado Matlab exige crear un fichero
de funcion con la definicion de dicho sistema (ecuaciones de estado). Esto lo hacemos
escribiendo la ecuacion diferencial en el fichero pendulo.m, con el editor:
mg

function x_prima=p
endulo(t,x)
l=1; m=1; g=9.8;
% Constantes del p
endulo
if t<1
% Fuerza exterior (pulso u
nico de 1 s)
f=1;
else f=0;
end
x_prima=zeros(2,1);
% Ecuaciones de estado
x_prima=[x(2) f-m*g*sin(x(1))/(m*l)];
Salimos del editor, grabando el archivo, y ya podemos obtener soluciones numericas de la
ecuacion del pendulo:

>>
>>
>>
>>

3.4

t0=0; tf=5;
% Intervalo de integraci
on
x0=[0];
% Condiciones iniciales
[t,x]=ode23(p
endulo,t0,tf,x0);
plot(t,x)

Resoluci
on simb
olica

La orden dsolve permite resolver ecuaciones diferenciales escritas en forma simbolica en


Matlab. Esto se hace denotando las derivadas por medio del operador D. Por ejemplo, la
ecuacion diferencial lineal
a2

dx
d2 x
+ a1
+ a0 x = b
2
dt
dt


CAPITULO 3. EJERCICIOS DE CALCULO

34

(2*cos(2^(1/2)*t)+sin(2^(1/2)*t)*2^(1/2))/exp(t)

1.5

0.5

0.5

3.4.1

4
t

Transformada de Laplace

En los sistemas de control con modelo matematico de funcion de transferencia se presenta


el problema del calculo de la transformada inversa, de cara a la obtencion de la respuesta
del sistema (variable y(t) de salida) dada la variable de entrada x(t). Las variables de
entrada y de salida son funciones del tiempo.
X(s) e Y (s) son las transformadas de Laplace de x(t) e y(t) respectivamente. Por
tanto, dada x(t),

X(s) = L[x(t)]
= y(t) = L1 [Y (s)]
Y (s) = X(s)G(s)
X(s), Y (s) y G(s) son funciones racionales.

3.4.2

Resoluci
on num
erica

Uno de los metodos mas utilizados para hallar la antitransformada de Laplace de una
b(s)
es expandirla en fracciones simples, de transformada inversa
funcion racional Y (s) = a(s)
conocida. Sean p1 , p2 , . . . , pn las races del polinomio a(s), y supongamos que no hay
ninguna repetida. Entonces, la expansion en fracciones simples es de la forma
Y (s) =

b(s)
r1
r1
rn
=
+
+ ... +
+ k(s)
a(s)
s p1 s p1
s pn

en donde los n
umeros (en general complejos) r1 , . . . , rn se llaman residuos de la funcion
Y (s) y k(s) es el cociente de la division de b(s) entre a(s), el cual es cero si Y (s) es propia.
Los polos, los residuos, y el termino k(s) pueden hallarse mediante Matlab. Entonces,
la transformada inversa es inmediata:
y(t) = r1 ep1 t + r2 ep2 t + . . . + rn epn t + L1 [k(s)]

SIMBOLICA

3.4. RESOLUCION

35

Como aplicacion, vamos a resolver mediante Matlab el ejercicio de la figura.

k
f (t)

x(t)

La ecuacion diferencial de este sistema es


m
x(t) + bx(t)
+ kx(t) = f (t)
La transformada de Laplace, con condiciones iniciales nulas, es
ms2 X(s) + bsX(s) + kX(s) = F (s)

Si, por ejemplo, f (t) es la funcion escalon unitario, f (t) = u(t), F (s) = 1/s, queda

X(s) =

ms3

1
+ bs2 + ks

Notese que el termino independiente del polinomio denominador de X(s) es cero.


La resolucion con Matlab, para los valores m = 1, b = 1, k = 1, se puede hacer del
siguiente modo:

>>
>>
>>
>>
>>
>>
>>

m=1; b=1; k=1;


B=1;
A=[m b k 0];
[r,p,k]=residue(B,A)
t=[0:0.05:15];
x=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t)+r(3)*exp(p(3)*t);
plot(t,x)


CAPITULO 3. EJERCICIOS DE CALCULO

36

y(t)
1.2

0.8

0.6

0.4

0.2

10

15

Esto mismo se puede hacer de modo a


un mas sencillo utilizando la funcion step
(escalon) o la funcion lsim del ToolBox Signals and Systems de Matlab.

3.5

Resoluci
on simb
olica

La librera Symbolic Toolbox de Matlab permite hallar, mediante las ordenes laplace
e ilaplace, las transformadas directa e inversa de Laplace. Dada una funcion f (t),
denotamos por F (s) su transformada de Laplace. Es decir
L(f (t)) = F (s).
Para hallar la transformada de Laplace F (s) de la funcion f (t) hemos de escribir
>> F = laplace(f)
en donde f es la expresion simbolica de f (t). Por defecto Matlab asume que la variable
independiente de f es t. Para hallar la transformada inversa f (t) de una F (s), pondremos
>> f = ilaplace(F)
en donde f es la expresion simbolica de F (s). Por defecto Matlab asume que la variable
independiente de F es s.
Como ejercicio, vamos a resolver de nuevo el ejemplo mecanico que antes hemos calculado numericamente.
>> syms s m b k
>> G = 1/(m*s^2+b*s+k)
>> G1 = subs(G,[m,b,k],[1,1,1])

SIMBOLICA

3.5. RESOLUCION
G1 =
1/(s^2+s+1)
>> Y = symmul(G1,1/s);
>> y = ilaplace(Y);
>> ezplot(y, [0,15]), axis([0, 15, 0, 1.25]), title(y(t))
Con esto, debera aparecer en la pantalla una grafica igual que la de antes.

37

38

CAPITULO 3. EJERCICIOS DE CALCULO

Captulo 4
Ejercicios de Algebra Lineal
4.1

Sistemas de ecuaciones lineales

Supongamos que nos dan las matrices A y b del sistema lineal Ax = b. Para introducirlas
en el workspace de Matlab, ponemos
>> A = [1 2 3 4 5; 0 0 0 0 1; 0 0 0 0 1];
>> b = [1 2 3]
Una vez que hemos introducido las matrices, para ver si el sistema tiene solucion, formamos la matriz ampliada Aa ,
>> Aa = [A b];
y, calculando los rangos de las matrices A y Aa,
>> rank(A)
ans =
2
>> rank(Aa)
ans =
3
vemos que el sistema es incompatible, no tiene solucion.
Consideremos ahora el sistema homogeneo Ax = 0. Sabemos que este siempre tiene
solucion (al menos la trivial) y que el conjunto de soluciones son los vectores del n
ucleo
de la matriz A. Para hallar estas soluciones ponemos
>> kerA = nullspace(A)
kerA =
[-2 -3 -4]
[ 1
0
0]
[ 0
1
0]
[ 0
0
1]
[ 0
0
0]
Esta matriz nos da los vectores columna de una base del n
ucleo de la aplicacion lineal
0
0
asociada a A: z1 = [2 1 0 0 0] , z2 = [3 0 1 0 0] y z3 = [4 0 0 1 0]0 . Por tanto, el
n
ucleo de la aplicacion lineal es el conjunto
{z = k1 z1 + k2 z2 + k3 z3 | k1 , k2 , k3 C}.
39

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

40

4.1.1

Aplicaci
on a circuitos el
ectricos

Las leyes basicas de la Teora de Circuitos son la ley de Ohm,


Z =VI
en donde Z es la impedancia del circuito, V el voltaje aplicado e I la intensidad que
circula por el mismo, y las leyes de Kirchhoff. Para calcular las intensidades y voltajes en
los circuitos electricos se suelen aplicar los conocidos metodos de mallas y nudos. Estos
metodos conducen al planteamiento de un sistema de ecuaciones el cual ha de resolverse
para hallar los valores de las intensidades y voltajes del circuito.
Veamos como se resuelve el circuito de la figura, aplicando el metodo de mallas, con
Matlab. Dadas las impedancias z1 , . . . , z6 y el voltaje v(t) aplicado, se pide hallar las
intensidades de malla i1 , i2 e i3 .
Z1
+
v
-

i1

Z4

Z2
i2

i3

Z6

Z5

Z3

Las ecuaciones de las tres mallas indicadas en la figura son:


v = (z1 + z2 + z4 )i1 z2 i2 z4 i3
0 = z4 i1 z5 i2 + (z4 + z5 + z6 )i3
0 = z2 i1 + (z2 + z5 + z3 )i2 z5 i3

(4.1)

o, en forma matricial,


v
z1 + z 2 + z 4
z2
z4
i1
0 =

z4
z5
z 4 + z 5 + z 6 , i2
0
z2
z2 + z 5 + z 3
z5
i3
es decir

V =ZI
en donde V, I C3 y Z C33 . La solucion del problema consiste en hallar i1 , i2 y i3 .
Resoluci
on num
erica
La solucion numerica consiste en despejar el vector I de intensidades, una vez que se
han dado valores numericos (complejos) a las impedancias z1 , . . . , z6 y al voltaje v. Al

4.1. SISTEMAS DE ECUACIONES LINEALES

41

tratarse de un circuito con mallas cerradas y con impedancias no nulas, la matriz Z de


impedancias es siempre no singular y, por tanto, existe la inversa Z 1 . Por tanto,
I = Z 1 V
Para hacer estos calculos con Matlab, escribiremos en un fichero-m los valores dados
al voltaje y a las impedancias. Por ejemplo, podramos poner lo siguiente.
% Ejemplo de circuito
% Datos:
Vef=220; f=50; w=2*pi*f;
R1=1;
L1=0.1;
C1=100e-6; z1=R1+j*L1*w+1/(i*C1*w)
R2=1;
L2=0.03;
C2=220e-6; z1=R2+j*L2*w+1/(i*C2*w)
R3=0.25; L3=0.2;
C3=100e-6; z1=R3+j*L3*w+1/(i*C3*w)
R4=5;
L4=0.1;
C4=100e-6; z1=R4+j*L4*w+1/(i*C4*w)
R5=20;
L5=0.01;
C5=100e-6; z1=R5+j*L5*w+1/(i*C5*w)
R6=25;
L6=0.33;
C6=100e-6; z1=R6+j*L6*w+1/(i*C6*w)
V = [Vef 0 0]
Z = [ z_1+z_2+z_4
- z_2
- z_4
-z_4
- z_5
z_4+z_5+z_6
-z_2
z_2+z_5+z_3
- z_5
];
I = inv(Z)*V
Si el fichero en el que hemos escrito los datos tiene por nombre circuito.m, al ejecutarlo
mediante la orden
>> circuito
obtendremos el valor del vector de intensidades,
I =
17.9962 +10.1363i
2.1462 - 3.5405i
-0.4702 - 1.3816i
en amperios. Finalmente, podemos hallar el valor eficaz y el angulo de fase de las mismas.
>> Ief = abs(I)
Ief =
20.6545
4.1402
1.4594
>> fase = angle(I)
Ief =
0.5130
-1.0258
-1.8988
Este problema se puede tambien resolver simbolicamente de dos formas. La primera,
resolviendo el sistema de ecuaciones (4.1), en forma simbolica, mediante el comando solve
y la segunda, por inversion de la matriz Z de impedancias en forma simbolica.

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

42

4.1.2

Aplicaci
on a los Sistemas de Control

El modelo de estado de un sistema de control viene dado por las ecuaciones


x(t)

= A x(t) + B u(t)
y(t) = C x(t) + D u(t)

(4.2)

en donde A Rnn , B Rnq , C Rpn y D Rpq .


Uno de los problemas que se presentan en las aplicaciones es hallar la solucion del
problema de condiciones iniciales, es decir, la solucion del sistema (4.2) junto con un
sistema de condiciones iniciales dadas x(0) = x0 Rn . La solucion, que se puede hallar
por el metodo de variacion de las constantes (o por otros metodos), viene dada por las
formulas

At

x(t) = e x(0) +

eA(t ) B U ( ) d

(4.3)

y(t) = Cx(t) + Du(t)


El calculo numerico de estas expresiones esta implementado en la funcion lsim de Matlab.
Un sencillo ejemplo nos aclarara sobre su uso. Sea un sistema dinamico lineal definido
por las matrices


 
0
2
0
A=
B=
1 1
1


 
C= 1 1
D= 0

Vamos a calcular la respuesta temporal y(t) cuando la entrada u(t) es una funcion escalon
unitario en t = 0 y las condiciones iniciales vienen dadas por el vector x(0) = [00] 0 . Para
hallar la solucion con Matlab, introducimos las cuatro matrices,
>> A = [0

2; -1

-1],

B = [0; 1], C = [1

1], D = [0]

y las condiciones iniciales


>> x0 = [0

0]

Para hallar la solucion numerica hemos de definir un vector t cuyos elementos son los
valores del tiempo en los que queremos a calcular la solucion. Por ejemplo,
>> t = [0: 0.1; 10];
Ahora definimos los valores de la entrada u(t),
>> u = ones(size(t));
que en este caso es un vector del mismo tama
no que t y cuyos elementos son todos igual
a uno. Para obtener la solucion, ponemos
>> y = lsim(A,B,C,D,u,t,x0);
y Matlab nos calcula x(t) e y(t) para los valores de t antes definidos. Para representar
graficamente y(t), ponemos

43

4.1. SISTEMAS DE ECUACIONES LINEALES


y(t)

1.5

0.5

10

con lo que obtenemos la grafica de la respuesta temporal.


Otra forma de obtener la solucion de las ecuaciones de estado es utilizando la transformada de Laplace. Sabemos que la matriz de transferencia tiene dada por la formula
G(s) = C(sIn A)1 B + D
y que, dadas G(s) y U (s) podemos hallar Y (s) con
Y (s) = G(s)U (s)
en donde U (s) = L(u(t)). Una vez hallada Y (s), la transformada inversa de Laplace nos
dara y(t).
y(t) = L1 (Y (s))

Apliquemos este metodo al mismo ejercicio que acabamos de resolver con lsim. Primero definimos la matriz identidad de orden 2.
>> I2 = [1

0; 0

1];

Ahora, para hacer la operacion G(s) = C(sIn A)1 B + D, escribimos


>> G = C * (s*I2 - A)^(-1) * B + D
G =
(s+2)/(s^2+s+2)
Ahora, para hallar Y (s), ponemos
>> Y = symdiv(G,s)
Y =
(s+2)/(s^2+s+2)/s
y, finalmente,
>> y = ilaplace(Y);
con lo que obtendremos la expresion de y(t). Podemos comprobar con
>> ezplot(y, [0,10]), axis([0, 10, 0, 1.5]), title(y(t))
que obtenemos la misma grafica que antes.

44

4.2

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

Comandos m
as interesantes

El n
umero de ordenes y programas disponibles en Matlab es muy elevado y por ello no
es posible un listado exhaustivo de todos ellos. En esta seccion se da un resumen, a
modo de lista, de los que consideramos mas importantes para las asignaturas del area de
Automatica y Control.

help
demo
who
what
size
length
clear
computer
C
exit
quit

General
help facility
run demonstrations
list variables in memory
list M-files on disk
row and column dimensions
vector length
clear workspace
type of computer
local abort
exit MATLAB
same as exit

Matrix Operators
+
addition

subtraction

multiplication
/
right division
\
left division
b
power

conjugate transpose

Array Operators
+
addition

subtraction
.
multiplication
./
right division
.\
left division
.b
power
.
transpose

Relational and Logical Operators


<
less than
& and
<=
less than or equal
|
or
>
greater than

not
>=
greater than or equal
==
equal
=
not equal

INTERESANTES
4.2. COMANDOS MAS

=
[
]
(
)
.
...
,
;
%
:
!

Special Characters
assignment statement
used to form vectors and matrices
see [
arithmetic expression precedence
see (
decimal point
continue statement to next line
separate subscripts and function arguments
end rows, suppress printing
comments
subscripting, vector generation
execute operating system command

ans
eps
pi
i, j
inf
NaN
clock
date
flops
nargin
nargout

Special Values
answer when expression not assigned
floating point precision

Not-a-Number
wall clock
date
floating point operation count
number of function input arguments
number of function output arguments

chdir
delete
diary
dir
load
save
type
what
fprintf
pack

Disk Files
change current directory
delete file
diary of the session
directory of files on disk
load variables from file
save variables to file
list function or file
show M-files on disk
write to a file
compact memory via save

45

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

46

compan
diag
eye
gallery
hadamard
hankel
hilb
invhilb
linspace
logspace
magic
meshdom
ones
pascal
rand
toeplitz
vander
zeros

rot90
fliplr
flipud
diag
tril
triu
reshape
.
:

Special Matrices
companion
diagonal
identity
esoteric
Hadamard
Hankel
Hilbert
inverse Hilbert
linearly spaced vectors
logarithmically spaced vectors
magic square
domain for mesh points
constant
Pascal
random elements
Toeplitz
Vandermonde
zero

Matrix Manipulation
rotation
flip matrix left-to-right
flip matrix up-to-down
diagonal matrices
lower triangular part
upper triangular part
reshape
transpose
convert matrix to single column; A(:)

Relational and Logical Functions


any
logical conditions
all
logical conditions
find
find array indices of logical values
isnan
detect NaNs
finite
detect infinities
isempty
detect empty matrices
isstr
detect string variables
strcmp
compare string variables

INTERESANTES
4.2. COMANDOS MAS

if
elseif
else
end
for
while
break
return
pause

Control Flow
conditionally execute statements
used with if
used with if
terminate if, for, while
repeat statements a number of times
do while
break out of for and while loops
return from functions
pause until key pressed

Programming and M-Files


input
get numbers from keyboard
keyboard
call keyboard as M-file
error
display error message
function
define function
eval
interpret text in variables
feval
evaluate function given by string
echo
enable command echoing
exist
check if variables exist
casesen
set case sensitivity
global
define global variables
startup
startup M-file
getenv
get environment string
menu
select item from menu
etime
elapsed time

abs
eval
num2str
int2str
setstr
sprintf
isstr
strcomp
hex2num

Text and Strings


convert string to ASCII values
evaluate text macro
convert number to string
convert integer to string
set flag indicating matrix is a string
convert number to string
detect string variables
compare string variables
convert hex string to number

47

48

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

clc
home
format
disp
fprintf
echo

Command Window
clear command screen
move cursor home
set output display format
display matrix or text
print formatted number
enable command echoing

Graph Paper
plot
linear X-Y plot
loglog
loglog X-Y plot
semilogx
semi-log X-Y plot
semilogy
semi-log X-Y plot
polar
polar plot
mesh
3-dimensional mesh surface
contour
contour plot
meshdom
domain for mesh plots
bar
bar charts
stairs
stairstep graph
errorbar
add error bars

Graph Annotation
title
plot title
xlabel
x-axis label
ylabel
y-axis label
grid
draw grid lines
text
arbitrarily position text
gtext
mouse-positioned text
ginput
graphics input

Graph Window Control


axis
manual axis scaling
hold
hold plot on screen
shg
show graph window
clg
clear graph window
subplot
split graph window

Graph
print
prtsc
meta

Window Hardcopy
send graph to printer
screen dump
graphics metafile

INTERESANTES
4.2. COMANDOS MAS

abs
angle
sqrt
real
imag
conj
round
fix
floor
ceil
sign
rem
exp
log
log10

Elementary Math Functions


absolute value or complex magnitude
phase angle
square root
real part
imaginary part
complex conjugate
round to nearest integer
round toward zero
round toward
round toward
signum function
remainder
exponential base e
natural logarithm
log base 10

Trigonometric Functions
sin
sine
cos
cosine
tan
tangent
asin
arcsine
acos
arccosine
atan
arctangent
atan2
four quadrant arctangent
sinh
hyperbolic sine
cosh
hyperbolic cosine
tanh
hyperbolic tangent
asinh
hyperbolic arcsine
acosh
hyperbolic arccosine
atanh
hyperbolic arctangent

bessel
gamma
rat
erf
inverf
ellipk
ellipj

Special Functions
bessel function
gamma function
rational approximation
error function
inverse error function
complete elliptic integral of first kind
Jacobian elliptic integral

49

50

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

Decompositions and Factorizations


balance
balanced form
backsub
backsubstitution
cdf2rdf
convert complex-diagonal to real-diagonal
chol
Cholesky factorization
eig
eigenvalues and eigenvectors
hess
Hessenberg form
inv
inverse
lu
factors from Gaussian elimination
nnls
nonnegative least squares
null
null space
orth
orthogonalization
pinv
pseudoinverse
qr
orthogonal-triangular decomposition
qz
QZ algorithm
rref
reduced row echelon form
schur
Schur decomposition
svd
singular value decomposition

Matrix Conditioning
cond
condition number in 2-norm
norm
1-norm,2-norm,F-norm,-norm
rank
rank
rcond
condition estimate (reciprocal)

Elementary Matrix Functions


expm
matrix exponential
logm
matrix logarithm
sqrtm
matrix square root
funm
arbitrary matrix function
poly
characteristic polynomial
det
determinant
trace
trace
kron
Kronecker tensor product

INTERESANTES
4.2. COMANDOS MAS

poly
roots
roots1
polyval
polyvalm
conv
deconv
residue
polyfit

Polynomials
characteristic polynomial
polynomial rootscompanion matrix method
polynomial rootsLaguerres method
polynomial evaluation
matrix polynomial evaluation
multiplication
division
partial-fraction expansion
polynomial curve fitting

Column-wise Data Analysis


max
maximum value
min
minimum value
mean
mean value
median
median value
std
standard deviation
sort
sorting
sum
sum of elements
prod
product of elements
cumsum
cumulative sum of elements
cumprod
cumulative product of elements
diff
approximate derivatives
hist
histograms
corrcoef
correlation coefficients
cov
covariance matrix
cplxpair
reorder into complex pairs
Signal Processing
abs
complex magnitude
angle
phase angle
conv
convolution
corrcoef
correlation coefficients
cov
covariance
deconv
deconvolution
fft
radix-2 fast Fourier transform
fft2
two-dimensional FFT
ifft
inverse fast Fourier transform
ifft2
inverse 2-D FFT
fftshift
FFT rearrangement

Numerical Integration
quad
numerical function integration
quad8
numerical function integration

51

CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL

52

ode23
ode45

Differential Equation Solution


2nd/3rd order Runge-Kutta method
4th/5th order Runge-Kutta-Fehlberg method

Nonlinear Equations and Optimization


fmin
minimum of a function of one variable
fmins
minimum of a multivariable function
fsolve
solution of a system of nonlinear equations
(zeros of a multivariable function)
fzero
zero of a function of one variable
Interpolation
spline
cubic spline
table1
1-D table look-up
table2
2-D table look-up

Bibliografa
Harel, D. (1987). Statecharts: a visual formalism for complex systems. Science of Compueter Programing 8, 231274.

53

También podría gustarte