Está en la página 1de 28

Introducci on a MATLAB y SIMULINK para

Control
Virginia Mazzone
INGENIER

IA EN AUTOMATIZACI

ON Y CONTROL INDUSTRIAL
http://iaci.unq.edu.ar
Av. Calchaqui 5800, Fcio. Varela
Buenos Aires, Argentina

Indice general
1. Introducci on a MATLAB 2
1.1. Conversi on de una funci on transferencia . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Races de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Desarrollo en fracciones simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Funci on transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Respuesta al impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6. Respuesta al escal on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7. Gr acos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8. Toolbox de Matem atica Simb olica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.8.1. Objeto Simb olico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.8.2. Variables Simb olicas y Expresiones . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8.3. C alculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2. Introducci on a SIMULINK 22
2.1. Acceso y descripci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2. Funci on transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3. Respuesta al Escal on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4. Utilizaci on de par ametros ya denidos . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Captulo 1
Introducci on a MATLAB
MATLAB es un programa interactivo para computaci on num erica y visualizaci on de datos. Es
ampliamente usado por Ingenieros de Control en el an alisis y dise no, posee adem as una extraor-
dinaria versatilidad y capacidad para resolver problemas en matem atica aplicada, fsica, qumica,
ingenier a, nanzas y muchas otras aplicaciones. Est a basado en un sosticado software de ma-
trices para el an alisis de sistemas de ecuaciones. Permite resolver complicados problemas num eri-
cos sin necesidad de escribir un programa. Integra an alisis num erico, c alculo matricial, proceso
de se nal y visualizaci on gr aca en un entorno completo donde los problemas y sus soluciones
son expresados del mismo modo en que se escribiran tradicionalmente, sin necesidad de hacer
uso de la programaci on tradicional
Este apunte es una introducci on elemental a MATLAB, destinado a conocer y practicar algunas
de las operaciones b asicas con funciones de transferencia. Los comandos que utilizaremos son los
que guran en la Tabla 1.1. Para mayor informaci on sobre un comando en particular puede ejecu-
tarse help topic o simplemente help comando, desde la ventana de comando de MATLAB.
1.1. Conversi on de una funci on transferencia
Una funci on transferencia puede describirse en MATLAB utilizando dos vectores las: uno
para los coecientes del numerador y otro para los coecientes del denominador. A menudo se
requiere para analizar o dise nar un sistema conocer la ubicaci on de sus polos y ceros; dicha infor-
maci on est a contenida en la funci on transferencia del sistema. Cuando la funci on de transferencia
est a especicada como raz on de polinomios, podemos conocer sus polos, ceros y ganancia, o vi-
ceversa. Los comandos que nos permiten esto son: tf2zp, que de un cociente de polinomios nos
devuelve los ceros, polos y una ganancia, y zp2tf, que de conocer los polos, ceros y la ganancia
de un sistema nos da el numerador y denominador de su funci on de transferencia.
Ejemplo 1. Supongamos la funci on transferencia
G(s) =
5s +20
s
2
+4s +20
,
si sacamos el 5 factor com un del numerador y factorizamos el denominador utilizando sus races,
nos queda de la forma
G(s) =
5(s +4)
(s +2 4j)(s +2 +4j)
.
Para llevar a cabo lo mismo con MATLAB, debemos ingresar los polinomios numerador y
denominador, en forma de vectores de la siguiente manera:
1. Introducci on a MATLAB Conversi on de una funci on transferencia- 3
Comando Breve explicaci on
exp Exponencial.
sin Seno.
cos Coseno.
sinh Seno Hiperb olico.
cosh Coseno Hiperb olico.
clf Elimina la gura actual.
plot Crea gr acas.
subplot Crea m ultiples gr acos en la misma gura.
hold Mantiene la gr aca anterior.
title Agrega ttulo del gr aco.
xlabel Agrega nombre del eje-X.
ylabel Agrega nombre del eje-Y.
text Agrega texto al gr aco.
print Imprime el gr aco o lo guarda en un archivo
figure Crea guras (ventana para gr acos).
impulse Respuesta al Impulso.
step Respuesta al escal on unitario.
tf Crea un modelo en funci on de transferencia.
zpk Crea un modelo de cero-polo-ganancia.
ss2tf Conversi on de modelo en espacio de estados a funci on de transferencia.
tf2zp Conversi on de modelo en funci on de transferencia a polos y ceros.
ss2zp Conversi on de modelo en espacio de estados a polos y ceros.
zp2tf Conversi on de modelo en polos y ceros a funci on de transferencia.
tf2ss Conversi on de modelo en funci on de transferencia a espacio de estados.
zp2ss Conversi on de modelo en polos y ceros a espacio de estados.
Cuadro 1.1: Comandos que utilizaremos
num=[5 20];
den=[1 4 20];
Observemos que para denir el vector lo hacemos colocando entre corchetes los coecientes
de cada t ermino, ordenados de mayor orden al menor. Para separar las columnas del vector lo
hacemos con un espacio, o tambi en podramos utilizar coma. El punto y coma nal es para que el
resultado de lo ejecutado por MATLAB no salga por pantalla.
Si ahora ingresamos:
[z,p,k]=tf2zp(num,den)
Obtenemos:
z=-4
p=[-2+4j -2-4j]
k=5
Dado que toda funci on transferencia dada por un cociente de polinomios se puede escribir de la
forma
G(s) = k

m
i=1
(s z
i
)

n
i=1
(s p
i
)
con m n,
1. Introducci on a MATLAB Races de un polinomio- 4
podemos armar f acilmente nuestra funci on transferencia, haciendo
G(s) =
5(s +4)
(s +2 +4j)(s +2 4j)
.
Si queremos realizar el procedimiento inverso, necesitamos ingresar las variables k, z y p. Con
la instrucci on:
[num,den]=zp2tf(z,p,k);
obtenemos el numerador y denominador de la funci on transferencia:
num=[5 20]
den=[1 4 20]
El hecho de tener el numerador y el denominador de la funci on de transferencia en dos va-
riables, no signica que MATLAB la identique como tal. Para ello se utiliza el comando tf, que
describe en una sola variable la transferencia dada por su numerador y al denominador. Lo utili-
zamos de la siguiente forma:
G=tf(num,den);
Si queremos que MATLAB arme la funci on transferencia como cociente de productos de los
ceros y los polos, para ello utilizamos zpk, de la siguiente forma:
G=zpk(z,p,k);
1.2. Races de un polinomio
En el Ejemplo 1 vimos que el polinomio denominador de la funci on transferencia vena dado
por: s
2
+4s +20, y pudimos hallar sus races dado que se trata de una ecuaci on de segundo orden.
En polinomios de orden superior, la tarea de encontrar sus races no siempre es tan f acil. Con
la funci on de MATLAB roots podemos calcular las races de cualquier polinomio. Para ejecutar
dicha funci on tenemos que ingresar el polinomio, como vector, recordando que los polinomios
se ingresan en la primer componente el t ermino de mayor orden y luego en forma descendente
separados por coma o un espacio.
Ejemplo 2. Consideremos el siguiente polinomio:
P = s
4
+4s
3
+4s
2
+ s +20
Ingresamos el polinomio p=[1 4 4 1 20] y luego:
r=roots(p);
En lugar de hacer la operaci on en dos pasos, podemos hacerlo solo en uno; si tipeamos r=roots([1
4 4 1 20]) obtenemos el mismo resultado Las cuatro races del polinomio anterior que surgen
de MATLAB son: 2,6445 1,2595j y 0,6545 1,3742j.
Si el caso es al rev es, es decir, tengo las races y quiero conocer el polinomio, el comando poly
es el que se utilizaremos. Siguiendo con el mismo ejemplo, supongamos que lo que tenemos son
las races p
1,2
= 2,6445 1,2595j y p
3,4
= 0,6545 1,3742j. Entonces el polinomio al que le
corresponden esas races es:
P=poly([p1,p2,p3,p4]);
Notemos que el polinomio P que obtuvimos es m onico; si quisi eramos cualquier otro, de-
beramos multiplicar a P por el coeciente principal. Otra cosa a tener en cuenta es que siempre
que pongamos una raz compleja debemos poner su conjugada.
1. Introducci on a MATLAB Desarrollo en fracciones simples- 5
1.3. Desarrollo en fracciones simples
Cuando analizamos un sistema de control, por lo general disponemos de su funci on transfe-
rencia a lazo cerrado G(s), donde G(s) =
Y(s)
R(s)
. Con lo que podemos escribir la salida en funci on
de la transferencia y la entrada: Y(s) = G(s) R(s).
Si dese aramos conocer la respuesta temporal g(t) del sistema cuando lo excitamos con una
se nal de entrada r(t), debemos calcular la transformada inversa de Laplace, es decir g(t) =
L
1
{Y(s)} = L
1
{G(s) R(s)}. Como sabemos, es m as sencillo de antitransformar cuando se
trata de un cociente de polinomios, dado que si lo expresamos en fracciones simples podemos
utilizar una tabla de transformadas de Laplace.
Ejemplo 3. Supongamos que tenemos la siguiente funci on transferencia:
G(s) =
16s +16
(s +2)(s +4)
y que R(s) =
1
s
Como las races del denominador sor reales y distintas, el m etodo de desarrollo en fracciones
simples nos permite escribir a G(s) R(s) de la siguiente manera:
16s +16
s(s +2)(s +4)
=
A
s
+
B
s +2
+
C
s +4
Ahora podemos calcular c(t) se la siguiente forma:
c(t) = L
1
_
A
s
+
B
s +2
+
C
s +4
_
= L
1
_
A
s
_
+L
1
_
B
s +2
_
+L
1
_
C
s +4
_
= A + Be
2t
+ Ce
4t
Para calcular los valores de A, B y C lo hacemos mediante la f ormula de residuos, dado que
en este ejemplo los polos son de primer orden, resulta que
Res{p} = lm
sp
(s p)F(s)
donde p es el polo para el cual se est a calculado el residuo. Veamos como sera en este ejemplo:
A = lm
s0
(s)
16s +16
s(s +2)(s +4)
=
16(0) +16
(0 +2)(0 +4)
= 2
B = lm
s2
(s +2)
16s +16
s(s +2)(s +4)
=
16(2) +16
(2)(2 +4)
= 4
C = lm
s4
(s +4)
16s +16
s(s +2)(s +4)
=
16(4) +16
(4)(4 +2)
= 6
Con estos residuos, queda determinada la salida como: c(t) = 2 +4e
2t
6e
4t
En general, estos c alculos pueden tornarse muy complicados de realizar a mano. Veamos como
se simplican utilizando la funci on MATLAB residue. Ingresemos nuevamente los polinomios
numerador y denominador de la misma forma como lo venimos haciendo hasta ahora. Ingrese-
mos ahora la sentencia:
1. Introducci on a MATLAB Funci on transferencia a lazo cerrado- 6
[res,p]=residue(num,den);
Esta funci on nos devuelve dos par ametros vectoriales: en la variable res aparecen los residuos
correspondientes a los polos que guran en la variable p, es decir, el primer residuo corresponde
al primer polo y as sucesivamente.
Si la funci on transferencia resulta ser propia, es decir que el grado del numerador es igual al
del denominador, podemos a nadir una par ametro m as al argumento del lado izquierdo, que lo
podemos llamar k. Veamos como sera esto mediante otro ejemplo:
Ejemplo 4. Supongamos que queremos hallar f (t) siendo:
F(s) =
2s
3
+5s
2
+3s +6
s
3
+6s
2
+11s +6
f (t) = L
1
{F(s)}
Si aplicamos el comando
[res,p,k]=residue(num,den);
y armamos, como lo hicimos anteriormente, la funci on desarrollada en fracciones simples, el
t ermino independiente es el que aparece el la variable k. Por lo tanto
F(s) =
6
s +3
+
4
s +2
+
3
s +1
+2,
de donde ahora calcular la f (t) resulta muy sencillo.
Si ahora nuestro inter es es el inverso, es decir que tenemos una funci on escrita en fraccio-
nes simples y quisi eramos obtener la funci on como cociente de polinomios, analticamente de-
beramos sacar com un denominador y hacer todas las cuentas correspondientes. Esto resulta in-
mediato con el comando de MATLAB:
[num,den]=residue(res,p,k);
Nota: Existe la posibilidad de calcular la inversa de la transformada de Laplace utilizan-
do el comando ilaplace, para ello debemos utilizar variables del tipo simb olica que
se explicar a m as adelante.
1.4. Funci on transferencia a lazo cerrado
En MATLAB la funci on transferencia a lazo cerrado se puede calcular de dos formas:
1. Utilizando SIMULINK (lo veremos m as adelante).
2. Utilizando las funciones de MATLAB series, parallel y feedback.
Las funciones de MATLAB series, parallel y feedback trabajan con argumentos del tipo
polinomio o directamente en objeto transferencia. Para el caso d onde se opere con objetos trans-
ferencia es equivalente utilizar series que directamente especicar G
*
H, lo mismo ocurre con
parallel y G+H y feedback con G/(1+G
*
H), para la Figura 1.1, respectivamente.
1. Introducci on a MATLAB Funci on transferencia a lazo cerrado- 7

- - -
-
6
-

-
-
-
?
6
-
G(s) H(s)
G(s) H(s)
G(s) + H(s) G(s)/(1 + G(s) H(s))
-
G(s)
H(s)
G(s)
H(s)
Figura 1.1: Diagrama de bloques para las operaciones de funciones de transferencia
Veamos c omo operar con funciones transferencia con el siguiente ejemplo.
Ejemplo 5. Supongamos que disponemos del sistema de la Figura 1.2 donde
l l - -

-
6
- -
6
H
1
(s)

H
2
(s)
G
2
(s)
R(s) Y(s) E(s) V(s)
G
1
(s)
Figura 1.2: Diagrama de bloques
G
1
(s) = 0,4; G
2
(s) =
100
s(s +2)
; H
2
(s) =
s
s +20
y H
1
(s) = 1;
y pretendemos hallar la funci on transferencia a lazo cerrado
G(s) =
Y(s)
R(s)
.
Si aplicamos reducci on de bloques, o resolviendo el diagrama de ujo y aplicando Mason,
obtenemos
G(s) =
40s +800
s
3
+22s
2
+180s +800
(1.1)
Para calcular la funci on transferencia a lazo cerrado G(s) sigamos los siguientes pasos:
1 - Denimos los numeradores y denominadores de las funciones transferencia de cada bloque
numg1=0.4; deng1=1;
numg2=100; deng2=[1 2 0];
numh2=[1 0]; denh2=[1 20];
G1=tf(numg1,deng1); G2=tf(numg2,deng2);
H1=tf(1); H2=tf(numh2,denh2);
2 - Calculamos la funci on transferencia de V(s) a Y(s)
1
[numvc,denvc]=feedback(numg2,deng2,numh2,denh2); o
Gvc=feedback(G2,H2);
1
Por defecto la funci on feedback, calcula funciones de transferencia a lazo cerrado con realimentaci on negativa.
1. Introducci on a MATLAB Respuesta al impulso- 8
3 - Ahora calculamos la funci on transferencia de E(s) a Y(s) con
[numec,denec]=series(numg1,deng1,numvc,denvc); o
Gec=series(G1,Gvc);
4 - Por ultimo calculamos el lazo cerrado
[num, den]=feedback(numec,denec,1); o
Gvc=feedback(Gec,H1);
Lo que obtuvimos son los vectores numerador y denominador de la funci on transferencia por
separado. Recordemos que para ingresarla como funci on de transferencia a MATLAB, debemos
utilizar tf.
1.5. Respuesta al impulso
Ahora que ya sabemos como pasar de la respuesta temporal a Laplace, veriquemos que la
respuesta al impulso de la transformada de Laplace coincide con la respuesta temporal. Para ello
utilizaremos el comando de MATLAB impulse.
Ejemplo 6. Supongamos que tenemos una funci on transferencia de la siguiente forma:
G(s) =
1
(s + a)(s + b)
; donde a = 1, b = 2
Si calculamos ahora la antitransformada, desarrollando en fracciones simples como en la Secci on
1.3, resulta que y(t) = e
t
e
2t
. Ingresemos los vectores numerador y denominador y luego
ejecutemos el comando:
impulse(G);
Veremos que este comando devuelve el gr aco de la Figura 1.3.
Como podemos ver, solo nos muestra los primeros 7 segundos de la respuesta. Si quisi eramos
que nos mostrara 12 segundos, debemos enviar el par ametro del tiempo nal de la simulaci on,
impulse(G,12), el gr aco mostrar a los primeros 12 segundos de la respuesta al impulso.
Notemos que este comando no fue asignado a ninguna variable; podramos asignarle un par
de vector, es decir [y,t]=impulse(G,Tfinal), y as tendramos los valores de la salida de
la respuesta al impulso en y y el vector tiempo t. Podramos tambi en gracar este vector con el
comando plot(t,y), comando que veremos en detalle en la Secci on 1.7.
Dado que la funci on transferencia de un sistema lineal invariante en el tiempo se dene como
la transformada de Laplace de la respuesta al impulso cuando todas las condiciones iniciales
son nulas, comparemos el resultado obtenido con el que resultara si calcul aramos la respuesta
temporal. Para ello utilizaremos denimos un vector temporal
2
t=0:0.1:12;
La instrucci on f=exp(-t)-exp(-2
*
t) calcula un vector f cuyos elementos son la funci on eva-
luada en cada elemento del vector t. Ahora podemos comparar los valores obtenidos desde la
respuesta al impulso con estos.
2
Vector cuyos elementos est an espaciados 0.1 segundos desde 0 hasta 12.
1. Introducci on a MATLAB Respuesta al escal on- 9
0 1 2 3 4 5 6 7
0
0.05
0.1
0.15
0.2
0.25
Impulse Response
Time (sec)
A
m
p
l
i
t
u
d
e
Figura 1.3: Respuesta al impulso
1.6. Respuesta al escal on
De la misma forma que en la secci on anterior, podramos querer gracar la respuesta al escal on
unitario. MATLAB posee un comando, llamado step, para calcular la salida temporal cuando la
entrada se trata de un escal on unitario. Lo unico que necesita este comando es la funci on transfe-
rencia denida con tf o zpk.
step(G);
y=step(G);
Si utilizamos el comando sin asignarle la salida a ninguna variable, MATLAB abre una ventana
gr aca mostrando el gr aco de la salida a la excitaci on escal on unitario, de la misma forma que
antes. Sin embargo,al igual que vimos en el comando impulse, cuando este es asignado a una
variable, los valores obtenidos se guardan en el vector y.
Ejemplo 7. Calculemos la respuesta al escal on unitario de la funci on transferencia
G(s) =
Y(s)
R(s)
=
4
s
2
+0,8s +4
.
Si ingresamos el comando step(G), veremos un gr aco similar al que podemos observar en la
Figura 1.4.
Si ahora queremos la respuesta a una entrada rampa unitaria, MATLAB no posee ning un co-
mando que lo resuelva. Por lo que veremos c omo con el comando step podemos obtener una
rampa. Si seguimos con el ejemplo anterior y excitamos al sistema con r(t) = t, es decir que
R(s) =
1
s
2
, tenemos
Y(s) =
_
4
s
2
+0,8s +4
_
1
s
2
Y(s) =
_
4
s
3
+0,8S
2
+4s
_
1
s
1. Introducci on a MATLAB Respuesta al escal on- 10
Time (sec.)
A
m
p
l
i
t
u
d
e
Step Response
0 5 10 15
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
From: U(1)
T
o
:

Y
(
1
)
Figura 1.4: Respuesta al escal on unitario
Por lo que utilizando como denominador de la funci on transferencia al polinomio s
3
+0,8s
2
+
4s, es decir den=[1 0.8 4 0]
3
, y calculando la respuesta al escal on unitario con step(num,den),
obtenemos la respuesta a la rampa unitaria que se muestra en la Figura 1.5.
0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
Step Response
Time (sec)
A
m
p
l
i
t
u
d
e
Figura 1.5: Respuesta a la rampa unitaria
3
El producto de polinomios en MATLAB lo calculamos con el comando den=conv([1 0.8 4],[1 0]).
1. Introducci on a MATLAB Gr acos- 11
1.7. Gr acos
Como vimos en secciones anteriores los comandos step e impulse gracan las respuestas
al escal on y al impulso respectivamente, pero ahora vamos a introducir algo m as general. Para
gracar cualquier funci on en general utilizaremos el comando plot, que s olo necesita denir el
vector a gracar en la forma b asica.
Con
plot(vector);
se obtiene un gr aco donde el eje de abscisas ser a la posici on del elemento del vector y la orde-
nada el valor que tiene el vector en dicha posici on. En el ejemplo 6, guardamos en el vector y los
valores de la salida de la respuesta al impulso. Si ahora ingresamos plot(y), en lugar de tener
segundos en el eje de abscisas tendremos la cantidad de elementos de ese vector. Si ingresamos
plot(t,y), el eje de abscisas corresponder a al vector temporal ya denido e ir a desde t = 0
a t = 12, que es como lo tenamos denido. Graquemos entonces los valores guardados en el
vector f . Estos valores corresponden a la respuesta temporal, por lo que el gr aco deber a ser el
mismo. Si ingresamos plot(t,f), obtendremos el gr aco de la Figura 1.6
0 2 4 6 8 10 12
0
0.05
0.1
0.15
0.2
0.25
Figura 1.6: Respuesta temporal del ejemplo 6
Como podemos ver, no hay casi diferencias con la Figura 1.3, excepto por el ttulo y los nom-
bres de los ejes que el comando impulse pone autom aticamente. Veamos que no es difcil si se lo
queremos agregar a un gr aco, para ello utilizaremos las sentencias title, xlabel y ylabel.
Estos comandos se utilizan luego de ingresar el comando plot, ya que tanto el ttulo, como los
nombres de los ejes, se escribir an el la gura que se encuentre abierta.
title(Respuesta al Impulso);
xlabel(Tiempo(seg.));
ylabel(Salida y(t));
Notemos que el texto que queremos que aparezca est a escrito entre comillas simples. Los co-
mandos anteriores, pueden ser tambi en utilizados con step y impulse, aunque cuando son
1. Introducci on a MATLAB Gr acos- 12
utilizados en estos comandos, el ttulo y el nombre de los ejes que trae la funci on por defecto tam-
bi en aparecen. Otros comandos que pueden ser utiles a la hora de trabajar con gr acos son grid y
text, que se utilizan para agregar una grilla y texto respectivamente. El comando text se utiliza
de la misma forma que que title, es decir, el texto que aparecer a ser a el que se encuentra escrito
entre las comillas simples , pero antes debemos ingresar las coordenadas (x, y) donde queremos
que aparezca el texto. El comando grid, se usa sin par ametros. Veamos un ejemplo.
Ejemplo 8. Supongamos que tenemos la funci on transferencia de la Ecuaci on 1.1, que ya la calcu-
lamos con MATLAB en el Ejemplo 2.2. Abramos un archivo m-le nuevo e ingresemos lo siguiente
num=[40 800];
den=[1 22 180 800];
t=0:0.01:2;
y=step(num,den,t);
plot(t,y);
title(Respuesta al escalon unitario);
xlabel(Tiempo (seg.));
ylabel(Salida del sistema);
text(0.5,1.1,maximo valor);
grid;
Si ejecutamos el programa vamos a obtener el gr aco de la Figura 1.7.
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Respuesta al escaln
Tiempo (seg.)
S
a
l
i
d
a

d
e
l

s
i
s
t
e
m
a
maximo valor
Figura 1.7: Respuesta al escal on del ejemplo
Supongamos ahora que queremos gracar en la misma gura dos o m as gr acos para po-
der compararlas. Esto es posible utilizando el comando hold on - hold off, que mantiene
la gura y superpone el siguiente gr aco sobre la misma gura, como veremos en el siguiente
ejemplo.
Ejemplo 9. Supongamos que queremos gracar tres sinusoides con frecuencias diferentes, ingre-
semos en un archivo nuevo:
1. Introducci on a MATLAB Gr acos- 13
t=0:pi/20:2
*
pi;
y1=sin(t);
y2=sin(t-pi/2);
y3=sin(t-pi);
plot(t,y1);
hold on;
plot(t,y2);
plot(t,y3);
hold off;
Luego de ejecutar estas lneas veremos que en la gura que resulta, aparecen 3 gr acas en el
mismo color, e imposible de identicar cual corresponde a cada una porque ambas se encuentran
gracadas con el mismo tipo de linea y el mismo color. Para ello veamos un par ametro del tipo
string que podemos agregar al comando plot para especicaciones del estilo del gr aco. Los
par ametros que guran en la Tabla 1.2 son para elegir el color de la lnea, los que se encuentran
en la Tabla 1.3 son para elegir el estilo de la lnea y los que se encuentran el la Tabla 1.4 son para
elegir el tipo de marca que aparecer a sobre los puntos del vector gracado.
Espec. Color
r rojo
b azul (por defecto)
w blanco
g verde
c cian
m magneto
y amarillos
k negro
Cuadro 1.2: Especicadores de color
Espec. Estilo de linea
- linea s olida (por defecto)
linea rayada
: linea punteada
-. linea punto-raya
Cuadro 1.3: Especicadores de linea
Ahora especiquemos cada uno de los plot con un estilo diferente, por ejemplo, en lugar del
comando plot(t,y) escribamos:
plot(t,y1,-.rx);
plot(t,y2,--mo);
plot(t,y3,:bs);
Si corremos nuevamente el archivo veremos que hay diferencia entre una funci on y la otra,
pero seguimos sin saber cu al corresponde a qu e funci on. Para ello utilicemos el comando legend,
que pone la leyenda que queramos a cada gr aco. Es decir, escribamos como ultima linea:
legend(sin(t), sin(t-pi/2),sin(t-pi));
1. Introducci on a MATLAB Gr acos- 14
Espec. Estilo de marca
+ signo m` as
o crculo
punto
asterisco
s cuadrado
d diamante
x cruz
p estrella de 5 puntas
h estrella de 6 puntas
Cuadro 1.4: Especicadores de marca
0 1 2 3 4 5 6 7
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
sin(t)
sin(tpi/2)
sin(tpi)
Figura 1.8: Tres gr acos en una misma gura
Ahora si observamos el gr aco debera ser como el de la Figura 1.8.
Tambi en podramos querer cada gr aco en una gura diferente. Para ello debemos ejecutar el
comando figure(2) antes de gracar por segunda vez y figure(3) antes del ultimo gr aco.
Estas sentencias se usan sin el comando de hold on - hold off y lo que hacen es abrir una
nueva gura para cada gr aco. Otra opci on v alida para MATLAB, por ejemplo, es que las tres
funciones aparezcan en una sola gura pero las tres gracadas en forma independiente. Para ello
utilicemos subplot(m,n,p), que dividir a a la gura en m las y n columnas, pero crea una
gura en la posici on p. Ingresemos lo siguiente para ver como funciona.
clf; %borra el grafico actual
subplot(3,1,1);
plot(t,y1,.-r);
title(sin(t));
subplot(3,1,2);
plot(t,y2,--m);
title(sin(t-pi/2));
1. Introducci on a MATLAB Gr acos- 15
subplot(3,1,3);
plot(t,y3,:b);
title(sin(t-pi));
Notemos que con el smbolo %, comentamos texto dentro del archivo. Si ejecutamos nueva-
mente el programa, obtenemos lo que se observa en la Figura 1.9
0 1 2 3 4 5 6 7
1
0.5
0
0.5
1
sin(t)
0 1 2 3 4 5 6 7
1
0.5
0
0.5
1
sin(tpi/2)
0 1 2 3 4 5 6 7
1
0.5
0
0.5
1
sin(tpi)
Figura 1.9: Tres gr acos diferentes en la misma gura
Con respecto a gr acos, MATLAB posee muchas otras opciones, como gracar en escala lo-
gartmica, con loglog, semilogx y semilogy, gr acos en tres dimensiones, plot3, gr a-
cos de barras, bar, etc. Tambi en permite con el comando print, guardar el gr aco en un archivo
de extensi on, por ejemplopostscript o .jpg, o tambi en lo podemos imprimir con el mismo comando
indicando el nombre de la impresora.
Gr acos 3D
Las funciones de dos variables, de la forma f (x; y) se pueden representar gr acamente con
MATLAB en 3D. Para ello es preciso crear un dominio de puntos en forma de malla rectangu-
lar en el plano (x; y), dentro del cual se desea representar la funci on. Esto se hace con la orden
meshgrid. Ve amoslo con un ejemplo.
Ejemplo 10. Sea la funci on z : R
2
R,
z =
_
1 x
2
y
2
,
cuyo dominio es el crculo x
2
+ y
2
< 1, y supongamos que queremos calcular los valores de z en
una regi on rectangular del plano (x; y) denida por los puntos (1,25, 1,25) y (1,25, 1,25), y
representarla gr acamente. Para ello escribiremos:
[x,y] = meshgrid(-1.25:0.2:1.25,-1.25:0.2:1.25);
z = sqrt(1 - x.2 - y.2);
mesh(x,y,real(z));
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 16
y en la pantalla aparecer a la Figura 1.10. Si en lugar de utilizar la funci on mesh, utiliz aramos
surf, obtendramos una supercie como gr aco. La funci on plot3 nos permite gracar curvas
en espacios de 3 dimensiones.
1.5
1
0.5
0
0.5
1
1.5
1.5
1
0.5
0
0.5
Figura 1.10: Gr acos 3D
No nos olvidemos que MATLAB cuenta con una ayuda a la cual podemos recurrir en caso de
no recordar como se utiliza un comando. Si investigamos un poco el help, podemos encontrar
funciones que resuelven muchas otras cosas interesantes. Invito a que se metan a conocerlas, como
as tambi en a que conozcan las distintas demostraciones que pueden encontrar si tipean: demo.
1.8. Toolbox de Matem atica Simb olica
El Toolbox de Matem atica Simb olica (Symbolic Math Toolbox [1]), a nade A MATLAB la capa-
cidad de realizar c alculos simb olicos. Entre otros, los principales tipos de operaciones soportados
son los siguientes:
C alculo: Derivadas, integrales, lmites, sumatorias y series de Taylor.

Algebra Lineal: Inversas, determinantes, autovalores, descomposici on en valores singulares


y formas can onicas de matrices simb olicas.
Simplicaci on: M etodo de simplicaci on de expresiones algebraicas.
Soluci on de ecuaciones: Soluciones simb olicas y num ericas a ecuaciones algebraicas y di-
ferenciales.
Funciones matem aticas especiales: Funciones especiales de matem atica aplicada.
Transformadas: Fourier, Laplace, transformada-z y sus correspondientes inversas.
1.8.1. Objeto Simb olico
El Toolbox de Matem atica Simb olica, dene un nuevo tipo de dato llamado objeto simb olico In-
ternamente, un objeto simb olico en una estructura de dato que almacena una cadena de smbolos.
El toolbox utiliza estos objetos para representar variables simb olicas, expresiones y matrices.
Veamos un ejemplo para ver la diferencia entre trabajar con datos est andar de MATLAB, tal
como long, y objetos simb olicos.
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 17
Ejemplo 11. El comando de MATLAB sqrt(2) devuelve un n umero decimal de punto otante
1,4142. Si convertimos a 2 en un objeto simb olico utilizando el comando sym, y luego tomamos
su raz cuadrada
a = sqrt(sym(2))
el resultado es a = 2(1/2), que signica 2
1
2
, en notaci on simb olica, sin calcular el valor num eri-
co. Si queremos obtener el valor num erico de un objeto simb olico, utilizamos el comando double(a).
Cuando denimos fracciones con objetos simb olicos, MATLAB almacena el numerador y el
denominador:
sym(2)/sym(5)
ans = 2/5
Si ahora sumamos dos fracciones del tipo long obtenemos el resultado num erico:
2/5 + 1/3
ans = 0.7333
pero si lo hacemos como objetos simb olicos, MATLAB calcula el com un denominador y procede
de la forma habitual cuando sumamos n umeros racionales:
sym(2)/sym(5) + sym(1)/sym(3)
ans = 11/15
Supongamos que queremos denir la variable
=
1 +
_
(5)
2
,
para ello denimos rho = sym((1 + sqrt(5))/2). Podemos operar con la variable , por
ejemplo f = rho2 - rho - 1, que nos devuelve
f = (1/2+1/2
*
5(1/2))2-3/2-1/2
*
5(1/2)
que podemos simplicar utilizando el comando
simplify(f)
ans=0
1.8.2. Variables Simb olicas y Expresiones
El comando sym nos permite denir variables simb olicas y expresiones. Por ejemplo,
a = sym(a)
b = sym(b)
c = sym(c)
x = sym(x)
o lo que es equivalente syms a b c x.
Supongamos que queremos la denir la funci on cuadr atica f (x) = ax
2
+ bx + c, entonces
ingresamos directamente
f=a
*
x2+b
*
x+c.
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 18
Si queremos sustituir alguna de las variables por otra, ya sea num erica o simb olica usamos el
comando
subs(f,[a b c],[2 -3 1])
ans = 2
*
x2-3
*
x+1
El comando ezplot nos permite gracar expresiones del tipo f (x) en el dominio 2 < x < 2.
Si queremos otro dominio solo basta con especi arselo:
ezplot(subs(f,[a b c],[2 -3 1]),[-10 10])
dando como resultado la Figura 1.11.
10 5 0 5 10
0
50
100
150
200
x
2 x
2
3 x+1
Figura 1.11: Gr aco obtenido utilizando ezplot
1.8.3. C alculo
A continuaci on veremos la lista de comandos que pueden utilizarse con expresiones simb oli-
cas y los correspondientes operadores matem aticos. Para m as detalle help comando los puede
ayudar.
df
dx
diff(f) o diff(f,x)
d
2
f
db
2
diff(f,b,2)
J =
(r, t)
(u, v)
J=jacobbian([r;t],[u,v])
Cuadro 1.5: Lista de comandos y operadores matem aticos asociados.
Veamos c omo calculamos una linealizaci on de un sistema no lineal con el toolbox simb olico.
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 19
Ejemplo 12. Sea el sistema levitador magn etico, visto en la Clase 3 de Control Autom atico 1 o en [2].
v
m
mg
y
i
El movimiento de la bola se puede aproximar por la ecua-
ci on diferencial no lineal
_
x
1
(t)
x
2
(t)
_
=
_
x
2
(t)
g
L
0
a
2m(a+x
1
(t))
2
[u(t)]
2
_
(1.2)
donde g es la aceleraci on de la gravedad, x
1
(t) es la po-
sici on de la bola, x
2
(t) es la velocidad e i(t) la corriente
de excitaci on del electroim an. Los par ametros L
0
y a son
constantes positivas.
Deseamos obtener un modelo lineal incremental
x(t) = Ax + B u
y = C x + d u.
(1.3)
alrededor del punto de equilibrio inducido por la corriente u(t) = u

. Como la soluci on x

1
y x

2
son constantes, resolvemos el sistema de ecuaciones algebraico
0 = x
2
(t) x

2
= 0
0 = g
L
0
a
2m(a + x
1
(t))
2
[u

]
2
x

1
=

L
0
a
2mg
u

a
que utilizando variables simb olicas, con MATLAB hacemos
syms L0 a m g x1 x2 u
[x1eq,x2eq]=solve(x2=0,g-L0
*
a/(2
*
m
*
(a+x1)2)
*
u2)
y nos devuelve
x1eq =
1/4/g/m
*
(-4
*
g
*
m
*
a+2
*
2(1/2)
*
u
*
(g
*
m
*
L0
*
a)(1/2))
1/4/g/m
*
(-4
*
g
*
m
*
a-2
*
2(1/2)
*
u
*
(g
*
m
*
L0
*
a)(1/2))
x2eq =
0
0
que son los dos pares de soluciones del sistema de ecuaciones, aunque fsicamente no tiene sen-
tido el que nos da como resultado posici on negativa. Es por eso que descartamos el segundo par
de soluciones. Podemos usar comandos como simplify para simplicar expresiones simb olicas
y pretty para que muestre los resultados en forma clara, ejemplo
pretty(simple(x1eq(1)))
1/2 1/2
2 u (g m L0 a)
-a + 1/2 --------------------
g m
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 20
Si ahora calculamos los jacobianos, tenemos
f
x
=
_
_
f
1
x
1
f
2
x
2
f
2
x
1
f
2
x
2
_
_
=
_
_
0 1
L
0
au
2
m(a + x
1
)
3
0
_
_
,
g
x
=
_
g
x
1
g
x
2
_
=
_
1 0

f
u
=
_
_
f
1
u
f
2
u
_
_
=
_
_
0

L
0
au
m(a + x
1
)
2
_
_
,
g
u
= 0
y con MATLAB calculamos
F=[x2; g-L0
*
a/(2
*
m
*
(a+x1)2)
*
u2];
A=jacobian(F,[x1,x2]);
B=jacobian(F,u);
pretty(A)
[ 0 1]
[ ]
[ 2 ]
[ L0 a u ]
[----------- 0]
[ 3 ]
[m (a + x1) ]
pretty(B)
[ 0 ]
[ ]
[ L0 a u ]
[- -----------]
[ 2]
[ m (a + x1) ]
Con los valores num ericos L
0
= 0,01H, a = 0,05m, m = 0,01kg, g = 9,81m/s
2
, y i

= 2A,
reemplazamos en las expresiones de x1eq para ello hacemos
x1s=subs(x1eq(1),[g,m,a,L0,u],[9.81,0.01,0.05,0.01,2])
As=subs(A,[g,m,a,L0,u,x1],[9.81,0.01,0.05,0.01,2,x1s])
Alin=double(As)
Bs=subs(B,[g,m,a,L0,u,x1],[9.81,0.01,0.05,0.01,2,x1s])
Blin=double(Bs)
que devuelve
x1s =
0.0510
Alin =
0 1.0000
194.3272 0
Blin =
0
-9.8100
1. Introducci on a MATLAB Toolbox de Matem atica Simb olica- 21
As, el modelo incremental lineal queda
x =
_
0 1
194,327 0
_
x +
_
0
9,81
_
u
y(t) =
_
1 0

x.
Captulo 2
Introducci on a SIMULINK
Hasta ahora vimos que MATLAB dispone de un entorno de programaci on con lneas de orde-
nes, ahora veremos como se puede suplementar utilizando un interfaz de usuario gr aca llamada
SIMULINK. Este entorno nos permite describir gr acamente un sistema dibujando su diagrama en
bloques, que resulta muy conveniente para la simulaci on y an alisis de sistemas din amicos.
2.1. Acceso y descripci on
Para acceder a SIMULINK, desde la ventana de comandos de MATLAB, tenemos varias opcio-
nes: una es escribiendo el comando simulink, de esta forma se abrir a solo una ventana con las
libreras disponibles; otra es desde la barra de men u File elegir la opci on New Model, de esta forma
se abren no s olo las libreras sino tambi en el entorno donde vamos a trabajar; por ultimo, existe
un bot on de acceso directo a las libreras tanto en el entorno de trabajo de MATLAB como en el de
SIMULINK.
Una vez abiertas las libreras, lo que encontraremos depende de la versi on de MATLAB que
se encuentre instalada. Nos vamos a referir a la versi on 5.3. Dentro de la librera Simulink se
encuentran los elementos que vamos a utilizar organizados en sublibreras de acuerdo con su
comportamiento. Las sublibreras que aparecen son:
Continous (Bloques para sistemas en tiempo continuo)
Discrete: (Bloques para sistemas en tiempo discretos)
Functions & Tables
Math (Sumadores, Ganancias matriciales o constantes, etc.)
Nonlinear
Signals & Sistems(multeplexores, demultexores, etc.)
Sinks (Gracadores, etc.)
Sources (Varias fuentes de entradas)
Con un doble click sobre la librera podemos visualizar los elementos que posee. Por ejemplo
si ingresamos a Continous, entre los elementos disponibles utilizaremos los siguientes:
Derivative: bloque derivador, es decir
du
dt
.
Integrator: bloque integrador, funci on transferencia
1
s
.
2. Introducci on a SIMULINK Funci on transferencia a lazo cerrado- 23
State-Space: bloque para expresar al sistema en modelo de estados.
Transfer Fnc: bloque para expresar al sistema como cociente de polinomios.
Zero-pole: bloque para expresar al sistema con ceros, polos y una ganancia.
2.2. Funci on transferencia a lazo cerrado
En la Secci on 2.2 vimos como podemos calcular la funci on transferencia a lazo cerrado desde
la ventana de comandos. Tomemos el mismo ejemplo para ver como lo hacemos con SIMULINK,
ingresemos el diagrama en bloques como se puede ver en la Figura 2.1.
1
Out1
s
s+20
Transfer Fcn1
100
s +2s
2
Transfer Fcn
.4
Gain
1
In1
Figura 2.1: Diagrama en bloques con SIMULINK
Para poder implementar dicho gr aco se procedi o de la siguiente forma:
1. Para insertar un bloque de funci on transferencia, ya sabemos que se encuentra en Continous,
lo tomamos y lo arrastramos hasta la ventana de trabajo de SIMULINK. Si hacemos doble
click sobre el bloque se despliega una ventana de propiedades del bloque, donde tenemos
que ingresar el numerador y el denominador de la misma forma que lo hacemos desde el
entorno de trabajo de MATLAB, es decir entre corchetes y separado por espacios. Si en lugar
de seleccionar el bloque de funci on transferencia elegimos el bloque de polos y ceros, los
par ametros a denir ser an los polos, los ceros y la ganancia.
2. Para insertar otro bloque igual no es necesario realizar el tem anterior nuevamente, pode-
mos seleccionar el bloque anterior, haciendo un click con el bot on derecho del mouse, copiar
el bloque y pegarlo donde queramos. Esto mismo se puede hacer simplemente arrastrando
el objeto seleccionado con el bot on derecho del mouse. De la misma forma que antes, ingre-
samos los par ametros de esta funci on de transferencia. Para girar el bloque, para que quede
mejor orientado para hacer la realimentaci on, tenemos que seleccionar el objeto, ir a Format
de la barra de men u, y seleccionar Flip Block o simplemente con las teclas ctr-f.
3. El bloque de ganancia lo encontramos en Math, lo mismo que los sumadores. Para ingresar-
los a la gura procedemos de la misma manera, arrastrando el objeto hasta donde queremos
ubicarlo. El sumador, por defecto, viene con dos entradas sumadas, si hacemos doble click
sobre el, podemos no solo cambiar el signo que queramos sino tambi en agregarle las entra-
das que queramos, en este caso solo modicamos ++por +. Otra propiedad que podemos
modicar es la forma del icono. Notemos que cuando hacemos un doble click en cualquier
objeto, encontramos una peque na ayuda en la parte superior de la ventana, esto nos es util
para saber con que datos hay que completar cada campo. Para el bloque de la ganancia, solo
ingresamos el valor que corresponde 0,4.
2. Introducci on a SIMULINK Respuesta al Escal on- 24
4. Para unir los bloques solo tenemos que hacer un click en la salida de un bloque y arrastra
el mouse hasta la entrada de otro, cuando soltamos, si la conecci on est a bien hecha, mar-
car a una echa negra, en caso de estar uniendo con un nodo, deberemos ver un cuadradito
negro. Para borrar cualquier elemento, simplemente lo seleccionamos y con la tecla DEL se
elimina.
5. Por ultimo nos falta solo indicar cu al es la entrada y cual es la salida, esto lo hacemos para
poder sacar la transferencia a lazo cerrado, de otra forma no lo pondramos. La necesidad
de marcar la entrada y la salida es para que MATLAB sepa desde donde hasta donde vamos a
querer la transferencia. Estos bloques los encontramos en Signals & Systems, se llaman In1
e Out1.
6. Salvemos el archivo, por ejemplo con el nombre FuncTrans, si ingresamos desde la venta-
na de comando de MATLAB las sentencias
[A,B,C,D]=linmod(Functtrans);
[num,den]=ss2tf(A,B,C,D);
obtenemos la funci on transferencia. La primer orden produce un modelo de estado del sis-
tema de bloques, tomando la entrada y la salida que seleccionamos; y la segunda sentencia
convierte ese modelo de estados en el numerador y el denominador de la funci on transfe-
rencia. En este caso el resultado es
num=[40 800]
den=[1 22 180 800]
que si los comparamos con los obtenidos antes son id enticos.
2.3. Respuesta al Escal on
Siguiendo con el sistema de la Figura 2.1, nos interesa saber ahora c omo responde a una en-
trada escal on unitario. Como tenemos la funci on transferencia a lazo cerrado, podramos utilizar
el comando step(num,den) desde la ventana de comandos para obtener la salida. Pero veamos
c omo lo podemos hacer desde SIMULINK. Para ello cambiemos el bloque de entrada por un blo-
que de entrada escal on, que lo encontramos el la librera Sources bajo el nombre Step. A dicho
bloque podemos modicarle algunos par ametros como el tiempo en que se realizar a el escal on, el
valor inicial y nal de escal on y en caso de que lo necesitemos discreto, el tiempo de muestreo. Pa-
ra nuestro ejemplo, elegimos como valor inicial 0, valor nal 1 y tiempo de realizaci on del escal on
0seg.. Para poder visualizar la salida, debemos conectar a la salida un osciloscopio. Este bloque
lo encontramos en Sinks bajo el nombre Scope. Luego de agregados estos bloques, el sistema
resultante es el que observamos en la Figura 2.2.
Si hacemos doble click sobre el bloque Scope, veremos la salida del sistema como en la Figu-
ra 2.3. Este bloque tambi en posee algunas propiedades que podemos modicar, entre ellas est an
los valores de los ejes, el ttulo y la escala. Cuenta tambi en con Zoom para visualizar alguna zona
en detalle. Otra propiedad es la posibilidad de asignarle los datos que posee a una variable. Luego
desde la ventana de comandos podemos visualizar los valores o gracarlos dado que SIMULINK
guarda tambi en en una variable el vector temporal que utiliza en la simulaci on, dicha variable se
llama tout.
Si en lugar de la respuesta al escal on unitario queremos la respuesta al impulso, dado que
SIMULINK no posee un bloque generador de impulsos, debemos generarlo nosotros como resta
de dos escalones.
2. Introducci on a SIMULINK Respuesta al Escal on- 25
s
s+20
Transfer Fcn1
100
s +2s
2
Transfer Fcn
Step Scope
.4
Gain
Figura 2.2: Sistema excitado con un escal on
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Figura 2.3: Se nal que muestra el osciloscopio
2. Introducci on a SIMULINK Utilizaci on de par ametros ya denidos- 26
2.4. Utilizaci on de par ametros ya denidos
SIMULINK nos permite utilizar variables denidas ya sea en la ventana de comando de MATLAB,
como tambi en en archivos del editor. Para ello debemos denir las variables con anticipaci on y
luego utilizarlas dentro de los bloques con el mismo nombre. De esta forma, SIMULINK identi-
ca el valor de dicho par ametro y es el que utiliza en los c alculos. Esto resulta apropiado cuando
queremos utilizar un mismo dise no para distintos valores de par ametros, o nos permitir a utilizar
el mismo sistema cada vez que nos encontremos con problemas similares.
Bibliografa
[1] Symbolic Math Toolbox Users Guide c COPYRIGHT 19932008 by The MathWorks, Inc.
[2] Reapaso de Modelos, Se nales y Sistemas Virginia Mazzone http://iaci.unq.edu.ar/
materias/Control1/web/Apuntes/modelos.pdf.
27

También podría gustarte