Professional Documents
Culture Documents
MATLAB Y SIMULINK
MATLAB Y SIMULINK
ESQUEMA DE CONTENIDO
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Vectores y matrices
1.1. Operaciones matemticas simples con matrices y
vectores
Los vectores y matrices en MATLAB se trabajan igual en cuanto a
asignacin, por eso se explican juntos. Pero las operaciones posibles, si son
diferentes, y estn separadas bajo los encabezados correspondientes.
Asignacin:
La asignacin de variables en MATLAB es sencilla, y los vectores y
matrices no son la excepcin. Cuando se desea dar el valor a toda una matriz
se puede realizar directamente de la siguiente forma:
A = [1 2 3 4 ; 5 6 7 8; 9 0 1 2];
A = [1, 2, 3, 4;5, 6, 7, 8;9, 0, 1, 2];
donde la matriz escrita arriba es:
Las filas se separan por punto y coma y las columnas por espacios o
comas. De lo anterior se ve fcilmente que un vector fila se asigna as:
v = [1 2 3];
v = [1, 2, 3];
y un vector columna se asigna as:
v = [1; 2; 3];
Manejo de subndices:
Otra forma de asignar valores a una matriz (o un vector) es por medio de
los subndices. El menor subndice utilizado por MATLAB es 1. Y va aadiendo
valores a medida que se requieran. Los subndices se escriben entre
parntesis. Por ejemplo:
A(2, 3) =1; Asigna al elemento en la fila 2, columna 3 el valor de 1.
Si se desea cambiar todo el valor de una fila o una columna, es muy
sencillo hacerlo con el operador : as:
A(1 , :) = [4 5 6];
Asigna a la fila 1 el vector [4, 5, 6] (cambia la fila 1 por 4, 5, 6). As si A
era una matriz de 3 x 3 de ceros, ahora queda:
Kenneth R
MATLAB Y SIMULINK
v = A(:,1);
Asigna al vector v la primera columna (completa) de la matriz A.
MATLAB Y SIMULINK
Tipo es el tipo de norma que se desea calcular. Tipo puede ser una de
las siguientes:
Si se omite:
calcula la norma 2
En un vector es la magnitud del vector
2:
calcula la norma 2
inf:
v=
Para la matriz:
n2 =
5.4650
ni =
7
Para el vector:
n2 =
Kenneth R
MATLAB Y SIMULINK
5.4772
ni =
4
1.2.2. Comando MIN
Retorna el (los) menor (es) componente (s) de un vector o matriz. Para el
caso de los vectores: retorna el menor valor contenido en sus componentes. En
el caso de una matriz MIN retorna un vector (fila) que contiene el mnimo
elemento que se encontr en cada una de las columnas (la primera
componente del vector tiene el menor elemento en la primera columna de la
matriz, y as sucesivamente).
La sintaxis de la orden es:
v=
Kenneth R
MATLAB Y SIMULINK
M=
1
m=
1
1.2.3. Comando MAX
Retorna el (los) mayor (es) componente (s) de un vector o matriz. Para el
caso de los vectores: retorna el mayor valor contenido en sus componentes. En
el caso de una matriz MAX retorna un vector (fila) que contiene el mximo
elemento que se encontr en cada una de las columnas (la primera
componente del vector tiene el mayor elemento en la primera columna de la
matriz, y as sucesivamente).
La sintaxis de la orden es:
Mximo = max(Matriz);
v=
1
M=
Kenneth R
MATLAB Y SIMULINK
m=
4
1.2.4. Comando CROSS
Calcula el producto cruz entre dos vectores.
La sintaxis de la orden es:
Vector1 = Cross (Vector2, Vector 3);
Vector2 y Vector3 son los vectores a los que se les quiere aplicar el
producto cruz. Tanto Vector2 como Vector3 deben ser vectores
tridimensionales.
Vector1 es el vector (tridimensional) resultante del producto cruz de Vector2 y
Vector3.
El siguiente ejemplo ilustra el uso de cross:
>>%Ejemplo de uso de cross.
>>x = [1 0 0]
>>y = [0 1 0]
>>z = cross(x, y)
Al correr el programa se obtiene la siguiente salida:
x=
1
y=
z=
Kenneth R
MATLAB Y SIMULINK
l=
7
1.3. Comandos matemticos para matrices:
Los comandos matemticos ms empleados con matrices son:
1.3.1. Comando NORM
Calcula la norma de un vector o matriz.
1.3.2. Comando MIN
Retorna el (los) menor (es) componente (s) de un vector o matriz.
1.3.3. Comando MAX
Retorna el (los) mayor (es) componente (s) de un vector o matriz.
1.3.4. Comando SIZE
Devuelve el tamao de la matriz (dimensiones).
La sintaxis de la orden es:
Kenneth R
MATLAB Y SIMULINK
y=
2
f=
2
c=
3
1.3.5. Comando EIG
Calcula los valores y vectores propios (ortovalores y ortovectores) de la
matriz.
La sintaxis de la orden es:
[Vectores, Diagonal] = eig( Matriz );
(Los smbolos [ ] se escriben.) tambin:
Valores = eig( Matriz );
Matriz es la matriz (cuadrada) a la que se le desea calcular los valores o
vectores propios. Diagonal es una matriz diagonal que contiene los valores
propios de Matriz. Vectores es una matriz en la que se devuelven los vectores
propios (unitarios) donde cada columna de la matriz Vector es un vector propio
de matriz; tal que el primer vector corresponde al primer valor propio y as
sucesivamente.
Kenneth R
MATLAB Y SIMULINK
y=
-0.3723
5.3723
V=
-0.8246
-0.4160
0.5658
-0.9094
D=
-0.3723
0
0
5.3723
Kenneth R
desea
invertir
MATLAB Y SIMULINK
I=
-2.0000
1.0000
1.5000
-0.5000
-7
10
d=
-284
Kenneth R
MATLAB Y SIMULINK
1.4.
Kenneth R
MATLAB Y SIMULINK
Entonces escribimos:
>>A=[1 2 3 4;5 6 7 8;9 10 11 12;13,14,15,16];
>>x=4:-1:1
Genera el vector fila x=[4,3,2,1]. La instruccin
>>C=A(3:4,1:3);
Se refiere a la submatriz
Kenneth R
MATLAB Y SIMULINK
19
11
13
7
>>A+B
??? Error using ==> +
Matrix dimensions must agree.
>>3*A
ans =
12
6
15
9
MATLAB Y SIMULINK
>>inv(A)
ans =
1.5000
-2.5000
-1.0000
2.0000
>>A^3
ans =
174
94
235
127
10
12
>>A.^2
ans =
16
4
25
9
Kenneth R
MATLAB Y SIMULINK
Kenneth R
0
1.0000
0
0
0
1.0000
-0.0417
0.4167
0.6250
MATLAB Y SIMULINK
>>flops
ans =
483
El cual requiere 483 operaciones de punto flotante.
Finalmente el mtodo de la inversa se realiza con la siguiente
secuencia de instrucciones:
>>flops(0)
>>x=inv(A)*b
x=
-.0417
0.4167
0.6250
>>flops
ans =
108
El cual toma 108 operaciones.
Vemos pues que la eliminacin Gaussiana es el mejor de los tres
mtodos lo cual es cierto en general.
Usando MATLAB podemos estudiar la relacin entre la solubilidad del
sistema Ax=b y la no singularidad de la matriz de coeficientes A. En clase
vimos que el sistema Ax=b tiene solucin nica para cualquier lado derecho b
si y solo si la matriz A es no singular. Qu sucede si A es singular? Entonces
Ax=b no tiene solucin? Si A es singular el sistema Ax=b puede tener solucin
para algunos bs pero de seguro hay al menos un b * para el cual Ax=b* no tiene
solucin. Vamos a generar una matriz singular con MATLAB:
>>A=round(10*rand(6));
>>A(:,3)=A(:,1:2)*[4 3]
A=
2
0
7
7
Kenneth R
5
8
0
1
23
24
28
31
9
8
5
1
7
9
8
3
3
6
8
10
MATLAB Y SIMULINK
9
4
5
7
51
37
7
4
0
7
4
2
0
1
0
0
0
0
4
3
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
Kenneth R
MATLAB Y SIMULINK
ans =
1
0
0
0
0
0
0
1
0
0
0
0
4
3
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
30
19
3
-9
3
0
Donde x3 es arbitrario.
Recordemos que MATLAB posee una gran cantidad de funciones
matriciales. De las ms comunes que tenemos que repasarlas son:
min(A), max(A) - dan el mnimo y mximo respectivamente por
columnas de A
sum(A), prod(A) - producen la suma y producto respectivamente por
columnas de A
norm(A,p) - norma p de la matriz A donde p=1,2, inf
eig(A) - vector cuyos componentes son los valores propios de A
det(A) - el determinante de A
inv(A) - la matriz inversa de A
1.4.5. Polinomios
Esta es una seccin importante, dado que las funciones de transferencia
de los sistemas se introducirn habitualmente en la forma numeradordenominador, los cuales sern tratado como polinomios por matlab. En las
demos que acompa~nan a estas notas se podrn analizar numerosos ejemplos.
Los polinomios se representan por vectores, cuyos elementos son los
coeficientes del polinomio en orden descendente. Por ejemplo, el polinomio s3 +
2s2 + 3s + 4 se representa:
p=[1 2 3 4];
Que muy bien podra ser el denominador de una funcin de
transferencia. Mediante la funcin roots se pueden encontrar las
races de esa ecuacin: roots(p)
De modo complementario, se puede calcular un polinomio a partir de
sus races usando la funcin poly:
Kenneth R
MATLAB Y SIMULINK
p2=poly([-1 -2]);
Si el argumento de entrada a poly es una matriz, devuelve el polinomio
caracterstico de la Un polinomio puede ser evaluado en un punto determinado
usando polyval(p,s), donde p es el polinomio y s es el punto donde va a ser
evaluado. Por ejemplo:
p2=[1 3 2]; a=[1 2; 3 4]; polyval(p2,a)
Si se introduce, como en este caso, un vector o una matriz, en lugar de un
valor individual, la evaluacin se hace elemento a elemento.
Podemos realizar cmodamente operaciones de multiplicacin y divisin de
polinomios mediante las funciones conv y deconv, respectivamente:
conv([1,2],[2,0])
1.4.6.1.
LIMITES
Lmite en un punto
>> y = sin(x)/x
y=
sin(x)/x
>> limit(y,x,0)
ans =
1
Una funcin limit tiene como parmetros: 1) una funcin, 2) una variable
libre, 3) un punto donde debe ser calculado el lmite.
Kenneth R
MATLAB Y SIMULINK
DERIVADAS
MATLAB Y SIMULINK
>> diff(z,y)
ans =
2*y
Derivadas de rdenes superiores
>> syms y x
>> y = (x^2 -1)/(x-3)
y=
(x^2-1)/(x-3)
>> diff(y,x,2)
ans =
2/(x-3)-4*x/(x-3)^2+2*(x^2-1)/(x-3)^3
1.4.6.3.
INTEGRALES
>> int(y,x)
ans =
1/3*x^3
Integral definida
>> int(sin(x),x,0,2*pi)
ans =
0
>> int(sin(x),x,0,pi)
ans =
Kenneth R
MATLAB Y SIMULINK
2
El tercero y cuarto parmetro de la funcin int son los lmites inferior y
superior de la integracin.
1.4.6.4.
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
nos permite conocer las alturas (z) de los diferentes puntos de la grfica, esto
se consigue con el comando colorbar.
Curvas de Nivel
Dada una funcin z=f(x,y), las curvas sobre el plano XY, determinadas
por f(x,y)=k, k constante se llaman curvas de nivel. Hay varias formas de
obtenerlas usando MATLAB, con los siguientes comandos:
contour(), representa las curvas de nivel en el plano XY.
contour3(), lo mismo pero en el espacio.
pcolor(), dibuja un mapa de colores por niveles.
clabel(), etiqueta las curvas de nivel.
Otras Funciones 3D
Las siguientes funciones se derivan directamente de las anteriores, pero
aaden algn pequeo detalle y/o funcionalidad:
surfc(), combinacin de surf y contour en z=0.
meshz(), una especie de cortina en los bordes del dominio de la funcin.
surfl(), para controlar la iluminacin determinando la posicin e
intensidad de un foco de luz.
light(), crea un foco de luz en los ejes actuales capaz de actuar sobre
superficies 3D.
view(), sirve para localizar el punto de vista o direccin de observacin.
Se pueden probar estas funciones, con la ayuda del help.
MATLAB Y SIMULINK
>>den=conv(den1,den2)
>>tf(num,den)
3.2. Dominio temporal de funciones en control.
La respuesta a una entrada escaln se pueden analizar en sistemas que
tengan una descripcin en forma de funcin de transferencia o representacin
en el espacio de estados generado una funcin de tiempos y usando el
comando Step de la siguiente manera:
>>t=[0: 0.3: 15];
>>y=step(num,den,t);
>>plot(t,y);
>>tittle(respuesta en tiempo a un escaln)
>>xlabel(tiempo en segundos)
>>grid
La respuesta puede verse en la ventana grafica como sigue:
Para obtener una respuesta ante una entrada impulso utilizamos los
mismos comandos, solo en vez de utilizar el comando step usamos el comando
impulse de la siguiente manera:
>>t=[0: 0.3: 15];
>>y=impulse(num,den,t);
>>plot(t,y);
>>tittle(respuesta en tiempo a un impulso)
>>xlabel(tiempo en segundos)
>>grid
Kenneth R
MATLAB Y SIMULINK
Para obtener una respuesta ante una entrada Rampa utilizamos los
mismos comandos, solo en vez de utilizar el comando step o impulse usamos
el comando ramp y ligndolo con una funcin seno nos queda de la siguiente
manera:
>>t=[0: 0.3: 15];
>>ramp=t;
>>y=lsim(num,den,ramp,t);
>>plot(t,y,t,ramp);
>>tittle(respuesta en tiempo a una Rampa)
>>xlabel(tiempo en segundos)
>>grid
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
NYQUIST
>> nyquist(num,den,w)
>>[re,im]= nyquist(num,den,w)
Estos comandos computan las partes reales y las partes imaginarias y
realiza la representacin si no se le pone un comando de salida. Para obtener
su representacin grafica por nosotros mismos, solo hay que dibujar la parte
real sobre la parte imaginaria. Este resultado se puede ver en la figura:
NICHOLS
>> nichols(num,den,w)
>>[mag,fase]= nichols(num,den,w);
>>ngrid;
Kenneth R
MATLAB Y SIMULINK
Estos comandos para verlos basta dibujar la magnitud del bucle abierto
en dB (en el eje de la ordenada). Frente a la fase del bucle abierto en grados
(en el eje de las abscisas).
>>[N12,D12]=series(N1,D1,N2,D2);
Este comando devuelve la resultante de colocar en serie 2 funciones de
transferencia. El mismo resultado podra obtenerse llamando 2 veces al
comando conv.
Kenneth R
MATLAB Y SIMULINK
>>[N12,D12]=parallel(N1,D1,N2,D2);
Este comando devuelve la resultante de colocar en paralelo 2 funciones
de transferencia.
>>[Nbc,Dbc]=feedback(N1,D1,N2,D2,-1);
En MatLab seria:
>>K=1;
>>tau=1;
>>num=k;
>>den=[tau 1];
La respuesta a un escaln unitario como anteriormente se vio se da con
el comando step.
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Donde:
Frecuencia natural
Ganancia Esttica
Factor de amortiguamiento
Se va a estudiar el comportamiento para el conjunto de valores del factor
de amortiguamiento en respuesta a un escaln unitario asumiendo la
frecuencia natural unitaria.
Primer Caso: 2 races reales distintos (Sobreamortiguados)
>>t=[0: 0.2: 20:];
>> =1
>> =2
>>num=[wn^2];
>>den=[1, 2*d*wn, wn^2];
>>ye=(num,den,t);
>>plot(t,ye)
>>tittle(respuesta a un escalon)
>>xlabel(tiempo en segundos)
>>grid
Segundo Caso: 2 races reales iguales (crticamente Amortiguados)
>>t=[0: 0.2: 20:];
>> =1
>> =1
>>num=[wn^2];
>>den=[1, 2*d*wn, wn^2];
>>ye=(num,den,t);
>>plot(t,ye)
>>tittle(respuesta a un escalon)
>>xlabel(tiempo en segundos)
>>grid
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Solucion en Matlab:
>>clc
>>numa=130;
>>dena=[1 15 130];
>>Ta=tf(numa,dena)
>>omegana=sqrt(dena(3))
>>zeta=dena(2)/(2*omegana)
Kenneth R
MATLAB Y SIMULINK
>>Tsa=4/(zetaa*omegana)
>>Tpa=pi/(omegana*sqrt(1-zetaa^2))
>>tra=(1.76*zetaa^3 0.417*zetaa^2 + 1.039*zetaa + 1)/omegana
>>percenta=exp(zetaa*pi/ sqrt(1zetaa^2))*100
>>subplot(221)
>>step(Ta)
>>tittle((a))
Ejemplo de aplicacin de Lugar geomtrico de las Races (LGR)
Para el siguiente sistema de control cuya ecuacin es la siguiente:
Solucin en MatLab:
Root Locus
5
4
3
2
Imaginary Axis
>>clc
>>num=[1 5];
>>den=[1 7 25];
>>rlocus(num,den)
>>Xlabel(real axis)
>>Ylabel(Imag. Axis)
>>grid
1
0
-1
-2
-3
-4
-5
-18
-16
-14
-12
-10
-8
-6
-4
-2
Real Axis
MATLAB Y SIMULINK
>>num=[1 7];
>>den=conv(conv([1 0],[1 5]),conv([1 15],[1 20]));
>>rlocus(num,den)
>>axis([-22 3 -15 15])
>>Xlabel(Real Axis)
>>Ylabel(Img. Axis)
Eleccin de un valor para K del lugar de races
El grfico de arriba muestra los posibles lugares del polo a lazo cerrado
para un controlador solo proporcional. Obviamente no todos esos polos a lazo
cerrado satisfarn los criterios de diseo. Para determinar cul es la parte
aceptable del locus, podemos usar el comando sgrid(Zeta,Wn) para dibujar
lneas de coeficiente de amortiguamiento y de frecuencia natural constantes.
Sus dos argumentos son el coeficiente de amortiguamiento (Zeta) y la
frecuencia natural (Wn) [pueden ser vectores si quiere mirar un rango de
valores aceptables]. En nuestro problema, necesitamos un sobrepico menor
que 5% (lo que significa una razn de amortiguacin Zeta mayor que 0.7) y un
tiempo de subida de 1 segundo (lo que significa a frecuencia natural Wn mayor
que 1.8). Ingrese en la ventana de comandos del Matlab:
>>zeta=0.7;
>>Wn=1.8;
>>sgrid(zeta, Wn)
Kenneth R
MATLAB Y SIMULINK
De la figura de arriba vemos que hay partes del lugar de races dentro de
la regin deseada. Con lo que en este caso slo necesitamos un controlador
proporcional para mover los polos a la regin deseada. Puede usarse el
comando rlocfind para elegir los polos deseados en el locus ya hecho:
[kd,poles] = rlocfind(num,den)
Haga clic en el diagrama, en el punto donde quiera que se encuentre el
polo a lazo cerrado. Seguramente querr elegir los puntos indicados en la
figura de abajo para satisfacer los criterios de diseo.
Note que como el lugar de races podra tener ms de una rama, cuando
selecciona un polo, quisiera averiguar dnde estar/n el/los otro/s polo/s .
Recuerde que stos afectarn tambin la respuesta. De la figura de arriba
vemos que los polos elegidos (todos los "+" blancos) se encuentran en
posiciones razonables. Podemos continuar y usar el kd elegido como nuestro
controlador proporcional.
Kenneth R
MATLAB Y SIMULINK
>>Kp=300;
>>num=[Kp];
>>den=[1 10 20+Kp];
>>t=0:0.01:2;
>>step(num,den,t)
Haga Kp igual a 300 como antes e iguale Kd a 10. Ingrese los siguientes
comandos en un archivo-m y ejectelo en la ventana de comandos del MatLab.
Kenneth R
MATLAB Y SIMULINK
>>Kp=300;
>>Kd=10;
>>num=[Kd Kp];
>>den=[1 10+Kd 20+Kp];
>>t=0:0.01:2;
>>step(num,den,t)
>>Kp=30;
>>Ki=70;
>>num=[Kp Ki];
>>den=[1 10 20+Kp Ki];
>>t=0:0.01:2;
>>step(num,den,t)
Corra este archivo-m en la ventana de comandos del MatLab, y obtenga
la figura siguiente:
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
>>J=3.2284E-6;
>>b=3.5077E-6;
>>K=0.0274;
>>R=4;
>>L=2.75E-6;
>>num=K;
>>den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2) 0];
>>numcf=[1];
>>dencf=[1 0];
>>numf=conv(numcf,num);
>>denf=conv(dencf,den);
>>rlocus(numf,denf)
>>sgrid(.5,0)
>>sigrid(100)
>>axis([-400 100 -200 200])
Note que esto adiciona un trmino 1/s al lazo directo. En este archivo-m,
estamos ignorando el polo rpido, y slo nos acercamos a la porcin de baja
ganancia del lugar de races. Corriendo este archivo-m obtendr la figura
siguiente.
Kenneth R
MATLAB Y SIMULINK
MATLAB Y SIMULINK
Biblioteca de simulink
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
4.2.
Creacin de un modelo
MATLAB Y SIMULINK
Para visualizar los resultados de la misma son muy tiles los bloques se
encuentran en el grupo sinks de la biblioteca de simulink. De entre ellos,
quizs el ms til es el bloque scope que simula el comportamiento de un
osciloscopio. Tras realizar una simulacin se pueden ver los resultados que ha
registrado haciendo un doble click sobre l. Para ver correctamente los
resultados se usan los controles de Zoom, siendo conveniente pulsar siempre
tras una simulacin el botn de autoescala (el de los prismticos) para ver el
total de datos registrados. Los otros 3 botones de zoom permiten
respectivamente ampliar un area sealada con un arrastre del ratn, ampliar
el eje X de la misma manera el eje Y.
Kenneth R
MATLAB Y SIMULINK
SOLUCION:
>>g=tf([8], [1 4 9])
>>g=8/(s^2+4s+9)
>>impulse(g)
>>Step(g)
Kenneth R
MATLAB Y SIMULINK
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R
MATLAB Y SIMULINK
Kenneth R