L01-Guia Laboratorio 1
L01-Guia Laboratorio 1
L01-Guia Laboratorio 1
INGENIERÍA MECATRÓNICA
GUÍA LABORATORIO
LABORATORIO 1
PIURA - 2024
UNIVERSIDAD NACIONAL DE PIURA
LABORATORIO No1
OBJETIVOS
INTRODUCCIÓN AL MATLAB
Funcionalidades básicas:
- Cálculo matemático.
- Cálculo matricial.
- Programación y desarrollo de algoritmos.
- Desarrollo e implementación de aplicaciones.
- Gráficos científicos y de ingeniería.
- Modelamiento, simulación y diseño de prototipos.
- Análisis de datos, exploración y visualización.
Otros toolboxes:
- Math, Statistics and Optimization.
- Signal Processing and Communications.
- Image Processing and Computer Vision.
- Computational Finance.
- Parallel Computing, otros. 2
Entero
Real
Complejo
Carácter
>> Jesus =7
Jesus =7
Esta sentencia crea la variable entera Jesus y le asigna el valor 7. Matlab muestra en
pantalla el resultado de cada operación. Si no se quiere visualizar el resultado, basta
poner un punto y coma después de cada sentencia:
>> Jesus = 7;
Todas las variables en Matlab son consideradas matrices. Las posibilidades que
utilizaremos son:
Empecemos ingresando una matriz como una lista de sus elementos. Se sigue las
siguientes reglas:
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
Como puede apreciarse en el ejemplo, los distintos elementos de una fila se separan
mediante espacios (o comas) y las distintas filas se separan mediante puntos y coma.
La Tabla 1 resume los comandos y símbolos especiales para gestionar una sesión de
trabajo.
Comando Descripción
clc Limpia la ventana de comandos
close all Cierra todas las ventanas que muestren gráficos.
clear Remueve todas las variables de memoria
clear var1 var2 Remueve las variables var1 y var2 de
exist(‘name’) memoria
quit Determina si existe una variable con el nombre name
who Detiene la ejecución del Matlab
whos Lista las variables en memoria
Lista las variables y tamaños e indica si tienen parte
: imaginaria
Dos puntos, genera un arreglo con elementos
, igualmente especiados
; Coma, separa elementos de un arreglo
Punto y coma, suprime la impresión en pantalla;
… también denota una nueva fila en un arreglo
Tres puntos, permite continuar una línea
Si se necesita escribir una línea larga, se pueden usar tres puntos, por ejemplo:
Usar las teclas de desplazamiento (flechas), teclas Tab y Ctrl para rellamar, editar y
reusar funciones y variables tipeadas previamente. Por ejemplo, si se escribe la siguiente
línea erróneamente:
>>volumen = 1+sqr(5)
Matlab responde con un mensaje de error porque se escribió mal sqrt. En lugar de
teclear toda la línea, presionar la tecla de desplazamiento hacia arriba (↑) una vez para
mostrar la línea tecleada previamente. Presionar la tecla de desplazamiento hacia la
izquierda (←) varias veces para mover el cursor y agregar la letra t faltante, luego
presionar Enter. El uso repetido de la tecla de desplazamiento hacia arriba permite
visualizar las líneas tecleadas con anterioridad.
6. Manejo de matrices.-
Nota: ans es la variable por defecto donde Matlab guarda cualquier resultado; si
hubiéramos deseado utilizar otra variable deberíamos haberlo especificado:
» k = A(1,3)
k =
3
También se puede acceder a toda una fila o toda una columna, utilizando el
operador dos puntos. Este primer comando muestra todos los elementos de la
fila 2:
» A(2,:)
ans =
4 5 6
O bien a grupos de filas y/o columnas: Este comando muestra los elementos de
las filas 1 hasta la 2 y de las columnas 2 hasta la 3:
» A(1:2,2:3)
ans =
2 3
5 6
Matlab ofrece una serie de operadores aritméticos válidos tanto para cálculo matricial
como para cálculo escalar:
Suma: +
Resta: -
Producto: *
División: /
Transpuesta: ‘
Potencia: ^
» A = [1 2; 3 4]
A =
1 2
3 4
» B = [2 4; 6 8]
B =
2 4
6 8
» C = A*B % producto matricial
C =
14 20
30 44
» D = A.*B % el punto indica operación elemento a elemento
D =
2 8
18 32
Además de los operadores comentados, existen una serie de funciones muy útiles en
cálculo y generación de matrices:
8
Generación de matrices:
Manejo de matrices:
Ejemplos.-
» A = [1 2; 3 4]
A =
1 2
3 4
» B = inv(A)
B =
-2.0000 1.0000
1.5000 -0.5000
» A = zeros(1,4)
A =
0 0 0 0
» B = ones(2,3)
B =
1 1 1
1 1 1
Podemos crear cualquier vector creciente o decreciente que deseemos. Esta operación
será bastante útil para formar bases de tiempo sobre las que se evaluará el valor de
funciones.
9. Manejo de polinomios.-
Matlab puede manejar muy bien los polinomios al representarlos mediante vectores.
Los coeficientes de un polinomio son los elementos del vector, en orden descendente de
potencias. Si queremos calcular las raíces del polinomio a continuación:
10
>>roots(p)
>>q=[ 1 6 11 6];
>>roots(q)
>>pq=conv(p,q)
>>roots(pq)
Muchas funciones que hasta ahora se han usado, tales como sqrt y sin son
funciones incorporadas del Matlab. La Tabla 2 lista algunas de las funciones más
usadas. La creaciones funciones definidas por el usuario es vista al detalle en el ítem 16.
Si se desea guardar una sesión de Matlab para uso posterior, se deben usar los
comandos save y load. Teclear save hace que el Matlab guarde las variables de la
ventana de variables, esto es los nombres de las variables, sus tamaños, y sus valores, en
un archivo binario llamado matlab.mat, que el Matlab puede leer. Para recuperar las
variables de la ventana de variables, teclear load. Luego se puede continuar la sesión
como anteriormente.
Para guardar las variables de la ventana de variables con otro nombre, teclear save
‘nombre de archivo’. Si el archivo guardado contiene las variables A, B y C,
luego cargando el archivo con load ‘nombre de archivo’ se posicionan
dichas variables en la ventana de comandos, y de existir algunas variables con nombres
similares, éstas son reemplazadas.
Para guardar solo unas cuantas variables, digamos var1 y var2, teclear save
‘nombre de archivo’ var1 var2. Para recuperar var1 y var2 solo es
necesario teclear load ‘nombre de archivo’.
11
Con la opción File->New->Script o bien con el icono New script (Ctrl+N) abrir el
Editor/Depurador de código Matlab, ver Figura 2. Tipear en el archivo abierto lo
siguiente:
% Program Example_1.m
% This program computes the cosine of
% the square root and displays the result.
x = sqrt(13:3:25);
y = cos(x)
12
Recordar también que un script no puede tener un nombre con espacios ni guiones
medios.
Ejemplo:
La creación de una función de Matlab se verá con detalle en el ítem 16, Creación de
funciones definidas por el usuario.
14
Bucles:
if expresión
sentencias
elseif expresión
sentencias
elseif expresión
sentencias
else
sentencias
end
Deseamos crear una función de Matlab que, a partir de una matriz dada, genere una
matriz cuadrada añadiendo filas o columnas de ceros, según sea necesario. La función
se llamará cuadra y se guardará en el archivo cuadra.m (mismo nombre que el nombre
de la función creada). Con la opción File->New->Function se abre el editor/depurador
de código Matlab, similar a la Figura 2, pero que ya trae embebida la notación
correspondiente, con las palabras claves: function y end.
15
if x>y
b(:,y+1:x)=0; %añade columnas
elseif y>x
b(x+1:y,:) =0; %añade filas
end
function b = inversa(a)
16
Algunos de los comandos para dibujar gráficos bidimensionales son los siguientes:
Dibujo de gráficas:
clear all
clc
%Definiendo los vectores de tiempo y las
%funciones de seno y coseno.
t=0:0.05:10;
y=sin(t);
z=cos(t);
%Graficando en una sola grafica ambas %curvas
figure(1)
plot(t,y,'o',t,z,'x')
grid
title('Graficas del seno y
coseno')
xlabel('Seg')
legend('y=seno(t)','z=coseno(t)')
%Graficando en una sola ventana las 2 %curvas
pero en diferentes
graficas
figure(2)
subplot(211)
plot(t,y)
title('Grafica del seno')
xlabel('seg')
ylabel('y=sin(t)')
Observe que el vector t es una partición del dominio 0≤ t ≤ 10 con paso 0.05,
mientras que y, z son vectores que dan los valores del seno y coseno en los puntos
de partición.
El programa anterior nos manda a graficar dos funciones trigonométricas, las cuales
podemos verlas en las gráficas de la Figura 3.
18
19
close all
clear all
clc
[X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X.* exp(-X.^2 - Y.^2);
mesh(X, Y, Z)
20
𝐻𝐿𝑃 1
(j𝜔) = , (j𝜔) = 1 − j𝜔𝑇
1+ = 1 + j𝜔𝑇
j𝜔𝑇 𝐻𝐻𝑃 𝐻𝐿𝑃
close all
clear all
clc
T = 0.05; %constante de tiempo [s]
omega = logspace(0,8,100); %vector de frecuencias [rad/s]
H_LP = (T*j*omega+1).^(-1); %filtro pasa-baja
H_HP = 1-H_LP; %filtro pasa-alta
21
pasa_baja=tf([1],[0.05 1]);
pasa_alta=1-pasa_baja;
bode(pasa_baja,'b-',pasa_alta,'r--');
grid on;
23
24
25
Matlab cuenta con un amplio grupo de funciones que resultan muy útiles tanto para el
análisis de sistemas lineales (y no lineales) como para el diseño de sistemas de control.
Muchas de las tareas de análisis y diseño asociadas a dichos sistemas implican
operaciones de matrices, aritmética de números complejos, determinación de raíces,
conversiones de modelos y ploteo de funciones complicadas. Matlab fue diseñado para
facilitar la realización de muchas de estas operaciones.
1. Fundamentos.-
Dado que los sistemas LTI pueden ser representados usando modelos en la forma de
funciones de transferencia o ecuaciones de espacio de estados, Matlab trabaja con
dichos modelos, haciendo posible el empleo de técnicas tanto clásicas como modernas
en el análisis y diseño de sistemas de control. Cualquiera de estas formas de modelos se
puede expresar en forma de tiempo continuo (analógicas) o de tiempo discreto
(digitales). Las funciones de transferencia se pueden expresar como un cociente de
polinomios o una de sus dos formas factorizadas: cero-polo-ganancia o fracciones
parciales. Los modelos de sistemas de la forma espacio estados son idóneos para Matlab
porque son una expresión basada en matrices.
Para ilustrar las diversas formas en las que podemos formular modelos, usaremos el
ejemplo clásico de un sistema resorte-masa-amortiguador, el cual se muestra en la
Figura 7. En este sistema tres fuerzas actúan sobre una masa m: una fuerza de entrada
que depende del tiempo u(t), un resorte con constante de rigidez k y un amortiguador
viscoso con constante de amortiguación b. La posición de la masa en función del tiempo
26
𝑦(𝑡) = 𝑝𝑥(𝑡).
y la ecuación para el potenciómetro es:
El análisis de los sistemas LTI con frecuencia implica determinar ciertas propiedades
dinámicas como estabilidad y respuesta en frecuencia, que no son fáciles de determinar
usando análisis en el dominio del tiempo. Para estos análisis, muchas veces hacemos
uso de la transformada de Laplace, así se aplica la transformada de Laplace a la
ecuación en el dominio de tiempo para luego poder analizar el sistema en el dominio de
la frecuencia.
X(𝑠) 1
𝑈(𝑠) 𝑚𝑠 + 𝑏𝑠 + 𝑘,
= 2
27
𝑌(𝑠)
X(𝑠)= 𝑝
.
Con frecuencia se usan diagramas de bloques para mostrar la relación entre las
funciones de transferencia y las variables de entrada y salida de un sistema.
También podemos combinar los bloques en un solo bloque de modelo del sistema como
se muestra en la Figura 9.
(𝑠 − 𝑧1)(𝑠 − 𝑧2) … (𝑠
− 𝑧𝑛) (𝑠 − 𝑝1)(𝑠 − 𝑝2)
𝐻(𝑠) = 𝑘
.
… (𝑠 − 𝑝𝑚)
3𝑠2 + 18𝑠 + 24
𝐻(𝑠) = .
𝑠3 + 9𝑠2 + 23𝑠 + 15
Laboratorio de Ingeniería de Control 01
UNIVERSIDAD NACIONAL DE PIURA
28
es:
(𝑠 + 2)(𝑠 + 4)
𝐻(𝑠) = 3 (𝑠 + 1)(𝑠 + 3)(𝑠 + .5)
Esta forma es de especial utilidad, pues muestra directamente las raíces de los
polinomios del numerador y del denominador (los ceros y los polos de sistema
respectivamente).
Por último, las funciones de transferencia también pueden escribirse en la forma de
𝑟1 𝑟2 𝑟𝑛
expansión de fracciones parciales, o residuo, que es:
Esta forma es útil para determinar la transformada inversa de Laplace y para diseñar
ciertos tipos de filtros.
𝑥1 = 𝑥
Podemos definir:
𝑥2 = 𝑥˙
𝑥˙1 𝑘= 𝑥2 𝑏 𝑢
𝑥 =− 𝑥 − 𝑥 + = −3𝑥 − 4𝑥 + 𝑢
𝑚 1 𝑚 2 𝑚
2 1 2
𝑦 = 𝑔(𝑥, 𝑢) = 10𝑥1
y la ecuación de medición como:
Usando notación de matrices, este modelo de sistema puede escribirse como un modelo
𝑥˙ = 𝐴𝑥 + 𝐵𝑢
de espacio de estados:
𝑦 = 𝐶𝑥 + 𝐷𝑢
] 𝑢,
2 −3 −4 2 1
30
2. Procedimiento.-
𝐾0𝑠
𝐻 (𝑠) =
0
𝑇0𝑠 + 1
En el script:
K0=2; T0=4;
num0=[K0 0]; den0=[T0 1];
H0=tf(num0,den0);
4s + 1
Continuous-time transfer function.
K0=2; T0=4;
num0=[K0 0]; den0=[T0 1];
H0=tf(num0,den0);
Td=1;
Hd=tf(num0,den0,'InputDelay',Td)
En el script:
[numHd,denHd,Ts]=tfdata(Hd,'v')
>> [numHd,denHd,Ts]=tfdata(Hd,'v')
numHd =
0 1
denHd =
1 1
Ts =
0
s = tf('s');
H = exp(-s)*(2*s)/(4*s+1);
>> H
H =
2 s
exp(-1*s) * -------
4 s + 1
Continuous-time transfer function.
En el script:
H=zpk([-6 1 1],[-5 1],3);
31
>> H
H =
3 (s+6) (s-1)^2
(s+5) (s-1)
Continuous-time zero/pole/gain model.
También se puede usar la variable s para definir el modelo como una función
racional en s.
En el script:
s=zpk('s')
H=2*1/(s-1)*(s+2)
>> s =
s
Continuous-time zero/pole/gain model.
H =
2 (s+2)
(s-1)
Continuous-time zero/pole/gain model.
𝑥˙ = 𝐴𝑥 + 𝐵𝑢
𝑦 = 𝐶𝑥 + 𝐷𝑢
𝑦 = 𝑥1.
Este modelo es creado
por:
ss1 =
32
a =
x1 x2
x1 0 1
x2 -4 -2
b =
u1
x1 0
x2 2
c =
x1 x2
y1 1 0
d =
u1
y1 0
Continuous-time state-space model.
a, b, c, y d, son nombres por defecto, son usados únicamente con el objetivo de mostrar
los datos, ellos no existen en el workspace de Matlab. Para obtener los parámetros del
sistema y darles nombres específicos, en el script:
[A1,B1,C1,D1,Ts]=ssdata(ss1)
>> [A1,B1,C1,D1,Ts]=ssdata(ss1)
A1 =
0 1
-4 -2
B1 =
0
2
C1 =
1 0
D1 =
0
Ts =
0
33
Hcont1 =
4 s + 10
s + 1
Continuous-time transfer function.
𝑦(𝑠) 10
transferencia de sistema:
𝑢(𝑠) 𝑠 + 4𝑠 + 3,
= 2
34
B=[10];
A=[1,4,3];
[r,p,k]=residue(B,A);
>> [r,p,k]=residue(B,A)
r =
-5
5
p =
-3
-1
k =
[]
𝑢(𝑠) 𝑠 + 3 𝑠 + 1
𝑦(𝑠) 10
La función de transferencia polinómica:
𝑢(𝑠) = 𝑠2 + 4𝑠 + 3,
num=[10];
den=[1,4,3];
[z,p,k]=tf2zp(num,den);
z =
Empty matrix: 0-by-1
p =
-3
35
-1
k =
10
𝑦(𝑠) 10
Por tanto, la función de transferencia cero-polo-ganancia es: sistema es:
La función zp2tf determina los vectores num y den que contienen los
coeficientes, en orden descendente de potencias de s, del numerador y denominador de
la función de transferencia polinómica, p es un vector columna que contiene las
posiciones de polos de la función de transferencia cero-polo-ganancia, z es una
matriz que contiene las posiciones de ceros correspondientes, con una columna para
cada salida de un sistema de múltiples salida, k es la ganancia de la función de
transferencia cero-polo-ganancia. La función de transferencia cero-polo-ganancia:
𝑦(𝑠) 10
𝑢(𝑠) (𝑠 + 3)(𝑠 + 1).
=
puede convertirse en una función de transferencia polinómica usando estas
instrucciones:
z=[]
p=[-3 -1]’;
k=10;
[num,den]=zp2tf(z,p,k);
num =
0 0 10
den =
1 4 3
𝑦(𝑠) 10
𝑢(𝑠) 𝑠 + 4𝑠 + 3,
=2
TF → ZPK → SS →
TF:[num,den]= zp2tf(z,p,k) ss2tf(A,B,C,D,iu)
ZPK:[z,p,k]= tf2zp(num,den) ss2zp(A,B,C,D,iu)
SS:[A,B,C,D]= tf2ss(num,den) zp2ss(z,p,k)
36
Un modelo puede ser representado por un bloque con entradas y salidas ya sea
conteniendo una función de transferencia o un modelo en espacio estado dentro de él.
Las funciones series, parallel, y feedback pueden ser usadas para realizar
manipulaciones básicas de bloques como se mostrara a continuación.
3
Como ejemplo asuma dadas las siguientes funciones de transferencia:
𝐻𝑎 ( 𝑠 ) = 1 ( 𝑠 ) =
,
𝑠 + 𝐻𝑏 𝑠+4
2
𝐻𝑏(𝑠) 𝐻𝑎(𝑠)
Hser=series(Ha,Hb)
La respuesta de Matlab:
Hser =
3
s^2 + 6 s + 8
Continuous-time transfer function.
𝐻𝑝𝑎𝑟(𝑠)
b. Conexión en Paralelo
(Suma).-
𝐻𝑎(𝑠)
𝐻𝑏(𝑠)
37
Hpar=parallel(Ha,Hb)
Hpar=
4 s + 10
s^2 + 6 s + 8
𝐻ƒ𝑒𝑒𝑑𝑏(𝑠)
realimentación.-
𝐻𝑎(𝑠)
𝐻𝑏(𝑠)
Finalmente, Ha(s) y Hb(s) son conectados en un lazo realimentado negativo con Ha(s) en
el lazo directo y Hb(s) en el lazo de realimentación:
feedbsign=-1; Hfeedb=feedback(Ha,Hb,feedbsign)
Hfeedb =
s + 4
s^2 + 6 s + 11
Continuous-time transfer function.
38
Como punto de partida de esta sección definamos una función de transferencia continua,
H1c(s). Tomaremos H1c(s) como:
𝑦(𝑠) 𝑠 + 0.5
𝑢(𝑠) =𝑠2 + 2𝑠 + ,4
Y creamos H1c(s) con:
n1=[1,0.5]; d1=[1,2,4];
H1c=tf(n1,d1);
>> H1c
H1c =
s + 0.5
s^2 + 2 s + 4
Continuous-time transfer function.
Aún sin conocer las respuestas a diversas señales de prueba es posible analizar diversas
propiedades de un sistema dinámico, tales como estabilidad, frecuencias de resonancia,
y características del estado estacionario y transitorio.
ganancia_dc=dcgain(H1c);
>> ganancia_dc
ganancia_dc =
0.1250
b. Ancho de banda.-
Otro valor interesante de un sistema dinámico es su ancho de banda, que se define como
la primera frecuencia (en rad/s) en la que la ganancia cae por debajo del 70.79% (-3 dB)
de su valor en estado estacionario (ganancia DC). El comando en Matlab es
bandwidth.
ancho_banda=bandwidth(H1c);
39
>> ancho_banda
ancho_banda =
11.4812
p=pole(H1c)
p=
-1.0000 + 1.7321i
-1.0000 - 1.7321i
[A,B,C,D]=ssdata(H1c);
p0=eig(A);
p0 =
-1.0000 + 1.7321i
-1.0000 - 1.7321i
z=tzero(H1c)
Con pzmap podemos calcular y graficar tanto los polos y los ceros. Omitiendo los
parámetros de retorno solamente grafica los polos y los ceros en el plano complejo:
40
Figura 10. Grafica de ubicación de polos y ceros en el plano complejo generada usando
la función pzmap
Los polos y autovalores siempre son números reales y/o complejos conjugados.
damp(H1c)
H1c_ss=ss(H1c);
Xo=[0 1];
figure(1)
initial(H1c_ss,Xo); %grafica la respuesta en el tiempo a las
%condiciones iniciales Xo
[y,t,x]= initial(H1c_ss,Xo); %permite obtener los vectores
%correspondientes a la respuesta libre del sistema
Tf=10;
figure(1)
impulse(H1c,Tf); %grafica la respuesta al impulso unitario
[y,t,x]= impulse(H1c); %permite obtener los vectores
%correspondientes a la respuesta impulsiva del sistema
42
Podemos simular la respuesta escalón de uno o varios modelos LTI con step. La
entrada escalón es entonces unitaria (la altura del escalón es uno). Simulemos H1c desde
t=0 hasta Tf=10 segundos:
Tf=10;
step(H1c,Tf)
Tf=10;
[y,t]=step(H1d,Tf);
lsim es una función mas general de simulación ya que acepta una señal de entrada
cualquiera, no necesariamente un salto o un impulso. Para generar la señal de entrada
podemos usar gensig, que produce una onda senoidal, o una onda cuadrada, o pulsos
periódicos.
Como ejemplo simulemos H1c con una entrada sinusoidal, u, con un periodo Tp=0.5,
tiempo final Tf=10, y un paso Tstep=0.01:
Figura 14. Grafica de la respuesta a una entrada sinusoidal usando las funciones
gensig y lsim
44
Para cálculo rápido de las respuestas en frecuencias se pueden usar los comandos
evalfr y freqresp. Para calcular la respuesta en frecuencia de un sistema para una
única frecuencia se usa evalfr. El comando freqresp permite calcular la respuesta
en frecuencia para varias frecuencias.
sys=tf([3,-1],[-2 1 1])
w=[-j, -2-j,-2+j]
H1=[evalfr(sys,w(1));evalfr(sys,w(2));evalfr(sys,w(3))]
H2=freqresp(sys,w)
En Matlab se obtiene:
>>
sys =
-3 s + 1
2 s^2 - s - 1
Continuous-time transfer function.
w =
0 - 1.0000i -2.0000 - 1.0000i -2.0000 + 1.0000i
H1 =
0 - 1.0000i
0.5846 - 0.3231i
0.5846 + 0.3231i
H2(:,:,1) =
0 - 1.0000i
H2(:,:,2) =
0.5846 - 0.3231i
H2(:,:,3) =
0.5846.3231i
45
b. Diagrama de Bode.-
sys=tf([3,-1],[-2 1 1])
figure(1)
bode(sys); %grafica diagrama de Bode
grid on;
[mag, fase, w]=bode(sys); %no grafica, solo entrega los
%datos de magnitude, fase y frecuencia
c. Diagrama de Nyquist.-
sys=zpk([],[-1 -1 -1],4);
figure(1)
nyquist(sys,'r-');
46
[re,im]=nyquist(sys,w)
[re,im,w]=nyquist(sys)
47
El visor LTI (LTI-viewer) hace muy simple realizar simulaciones, graficas de respuesta
en el tiempo y en la frecuencia, para uno o muchos modelos LTI que existan en el
directorio de trabajo. El visor LTI es fácil de ejecutar, por ejemplo:
[num,den]=ord2(10,0.2);
sys=tf(num,den);
h=ltiview({'step';'pzmap'},sys);
ltiview('current',tf(dcgain(sys),[0.3 1]),h)
Figura 17. Ventana que permite visualizar diversas respuestas (tiempo y frecuencia) de
un sistema, función ltiview
Matlab cuenta con un GUI para diseño interactivo de compensadores para el caso de
plantas SISO. Este GUI permite diseñar compensadores SISO usando el lugar
geométrico de las raíces, diagrama de Bode, técnicas de Nyquist y Nichols.
[num,den]=ord2(10,0.2);
sys=tf(num,den);
sisotool(sys);
48
Figura 18. Ventanas que permiten (a) modificar parámetros para diseño de
compensadores, y (b) visualizar diversas respuestas (tiempo y frecuencia) del sistema en
lazo abierto y lazo cerrado
49
EJEMPLO 1
X(𝑠) 𝑌(𝑠
1 )
𝑥(𝑡) 𝐺(𝑠 ) =
𝑠2 + 4𝑠 + 9 𝑦(𝑡
)
clc
clear all
close all
s=tf('s');
G=1/(s^2+4*s+9);
Gss=ss(G);
Xo=[0 1];
[y,t,x]=initial(Gss,Xo); %respuesta libre
figure(1)
subplot(223)
plot(t,x(:,1),'r-',t,x(:,2),'g--');
title('Estados x(t)');
xlabel('t');
ylabel('x(t)');
legend('x_1(t)','x_2(t)');
subplot(221)
plot(t,y);
title('Salida y(t)');
xlabel('t');
ylabel('y(t)')
subplot(122)
plot(x(:,1),x(:,2));
title('Phase Potrait');
xlabel('x_1(t)');
ylabel('x_2(t)')
50
[u,t]=gensig('square',3,10,0.01);
[y,t]=lsim(G,u,t);
figure(3)
plot(t,y,'r-',t,u,'b--');
legend('y(t)','u(t)')
title('Respuesta a una entrada arbitraria');
xlabel('t');
EJEMPLO 2
X(𝑠) 𝑌(𝑠
1 )
𝑥(𝑡) 𝐺(𝑠 ) =
0.05𝑠 + 1 𝑦(𝑡
)
X(𝑠) 𝑌(𝑠
1 )
𝑥(𝑡) 𝐺(𝑠 ) =
𝑠2 + 0.05𝑠 + 𝑦(𝑡
10
52
53
clc
clear all
close all
sysPT1=tf(1,[0.05 1]);
figure(1)
subplot(121)
bode(sysPT1,'r-');
sysPT2=tf(10,[1 0.05 10]);
d=[sqrt(2)/2 1.6 3];
for n=1:1:length(d)
sysPT2=[sysPT2; tf(10,[1 d(n) 10])];
grid on;
end;
subplot(122)
hold on
stil={'r-' 'b-' 'k-' 'g--'};
for n=1:1:length(d)+1
bode(sysPT2(n),stil{n});
grid on;
end
54