Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matlab Ejercicios PDF
Matlab Ejercicios PDF
Fundamentos:
a=4/3
a=
1.3333
Almacena en la variable a el valor 1.3333 y lo saca por pantalla
a=4/3;
Lo mismo que en el caso anterior. Almacena el valor pero no lo saca por
pantalla (por el ;)
Se pueden utilizar variables que ya tienen un valor en expresiones.
b=1.34*37;
c=b-a
c=
48.2467
Para recordar rdenes previas y corregir letras dentro de una orden utilizamos
las teclas de los cursores.
Las variables pueden tener como mximo 19 caracteres ( a-z, A-Z, 0-9, _ ), y la
primera debe ser una letra.
MATLAB es sensible a las maysculas y minsculas (las distingue).
Cualquier cosa que venga despus del carcter % se interpreta como un
comentario
Borrado de variables:
clear: borramos TODAS del espacio de trabajo.
2
5
8
3
6
9
1.7321 15.5885
B=
-1.3000
1.7321 15.5885
B'
ans =
-1.3000
1.7321
15.5885
Luego podemos hacer
C=A*B'
C=
48.9295
96.9910
145.0525
Sellecin de elementos en matrices
D=A(1:2,:)
D=
1
4
2
5
3
6
Forma una matriz D con las dos primeras filas de A y todas sus columnas
E=A(2:3,1:2)
E=
4
7
5
8
A(:,[1 3])
ans =
1
4
7
3
6
9
10
1.2000
1.4000
1.6000
1.8000
2.0000
who
Your variables are:
A
B
C
D
E
a
ans
b
help control por ejemplo nos muestra todas las funciones disponibles en la
toolbox de control.
help control
Control System Toolbox.
Version 4.2 (R11) 15-Jul-1998
What's new.
Readme
- New features and enhancements in this version.
Creation of LTI models.
tf
- Create a transfer function model.
zpk
- Create a zero/pole/gain model.
ss
- Create a state-space model.
.
Demonstrations.
ctrldemo - Introduction to the Control System Toolbox.
jetdemo - Classical design of jet transport yaw damper.
diskdemo - Digital design of hard-disk-drive controller.
milldemo - SISO and MIMO LQG control of steel rolling mill.
kalmdemo - Kalman filter design and simulation.
Podemos obtener ayuda de alguna funcin en particular.
help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM.
Overloaded methods
help sym/sqrt.m
Escribiendo doc funcion nos da documentacin sobre el manejo de la funcion.
Ej doc sqrt
Veamos algunas funciones para construir matrices
zeros(2,3)
ans =
0
0
0
0
0
0
1
1
1
1
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
rand(10,2)
ans =
0.9501
0.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
0.6154
0.7919
0.9218
0.7382
0.1763
0.4057
0.9355
0.9169
0.4103
0.8936
A = [1 2 3]; B = [1 0 -1];
A+B
A + 100
A * B'
A' * B
A .* B
[1:10] .^ 2
D = rand(5,3)
sum(D)
sum(D(:))
help elfun
(exp,round,etc...)
% Suma de vectores
% El 100 se suma a cada elemento
% Producto escalar
% El producto externo es una matriz
% Utilizar . Para especificar producto de elementos
% Eleva cada nmero al cuadrado
% Crea vector de nmeros aleatorios
% Suma las columnas de D
% Suma todos los elementos de D
% Lista todas las funciones elementales
Operadores relacionales
<
<=
>
>=
==
~=
~
menor que
menor o igual que
mayor que
mayor o igual que
igual que
distinto de
not
% Ms funciones
det(x)
trace(x)
% Determinate de la matriz x
% Suma de los elementos de la diagonal
-2.6180
-0.3820
poly(A)
poly([1 2])
ans =
1
-3
2
% Es el producto de (x-1)(x-2)
abs(x)
abs(3+4*i)
ans =
5
angle(x)
angle(3+4*i)
ans =
0.9273
real(x)
imag(x)
Bsqueda de elementos:
>>A=[8 2 -3; 4 -5 6];
>>[i,j]=find(A>5)
5
>>max(A)
>>min(A)
Control de flujo:
MATLAB posee una serie de sentencias que nos permiten alterar el flujo
secuencial de una funcin. En el editor las instrucciones de los bucles aparecen
de color azul.
Bucle For
for i=1:5
ordenes
end
Tambin pueden anidarse varios bucles.
Estructura if
if expr1
ordenes1
elseif expr2
ordenes2
else
ordenes3
end
Bucle while
while expresion
ordenes
end
break
Sentencia que nos permite saltar o salir de un bucle while o for. Si hay bucles
anidados, nicamente se abandona el bucle ms interno.
Creacin de funciones
Otra forma de utilizacin de los archivos *.m: En el caso que deseemos realizar
clculos donde utilizamos varias rdenes y deseamos cambiar el valor de
alguno de los argumentos, en lugar de volver a escribir cada vez estas rdenes
en la lnea de comandos, MATLAB nos proporciona la capacidad de agrupar
todas las rdenes dentro de un archivo que debe cumplir las siguientes
caractersticas:
* El archivo debe crearse con un editor de tipo ASCII
* La extensin del archivo debe ser *.m (mifuncin.m)
* El archivo debe encontrarse en un directorio conocido por MATLAB.
* El nombre del archivo no debe coincidir con algn comando de
MATLAB, ya que estos tienen prioridad y el programa no se ejecutar.
En cuanto a la escritura del cdigo de la funcin dentro del archivo deberemos
tener en cuenta los siguientes puntos:
* La primera lnea debe declarar el archivo como de tipo funcin, y se
deben indicar los argumentos de dicha funcin y sus valores devueltos.
Los valores devueltos pueden ser uno o varios, en cuyo caso deben
escribirse entre corchetes.
function [res1,res2,...]=mifuncion(arg1,arg2,...)
* La segunda lnea debe ser de comentario (se denomina lnea H1), y en
ella se debe dar una breve descripcin de lo que hace la funcin. Esta
lnea es examinada por la orden de bsqueda de ayuda lookfor.
%MIFUNCION esta es mi maravillosa funcin
As cuando desde la lnea de comandos ejecutemos la orden lookfor
obtendremos lo siguiente:
>>lookfor maravillosa
MIFUNCION esta es mi maravillosa funcin
* A partir de la segunda lnea de comentario el resto de lneas que sean
%Funcion spico(c)
% Determina el sobrepico a partir el coeficiente de amortiguamiento
% Argumentos:
%
c: coefieciente de amortiguamiento
function [] = spico(c)
Mp=exp(-pi*c/sqrt(1-c*c))
Creando dibujos
plot(v) ;
% dibuja vector v
plot(x,y);
plot(x1,y1,x2,y2,x2,y3);
plot(X,Y)
% Construimos un ejemplo:
>> t=[0:0.2:2*pi];
>> x=sin(t);
>> y=cos(t);
>> figure(1);
>> plot(t, x, '+', t, y, '*')
>> figure(2)
>> plot(t, x, 'r+', t, y, 'm*')
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
-0.2
-0.2
-0.4
-0.4
-0.6
-0.6
-0.8
-0.8
-1
FIGURE (1)
Otras funciones relacionadas son:
>>xlabel(string)
>>text(x,y,string)
-1
FIGURE (2)
>>title(string)
>>gtext
% crea regilla
>>bar
>>stairs
Ejemplo
>>subplot(211),plot(1:3),subplot(212),(plot(sin(1:3));
Funciones de Control
Y(s)= G(s)= .
18(s+20)
.
U(s)
(s+15)(s+25)(s+0.4)
num=18*[1 20];
den=conv(conv([1 15],[1 25]),[1 0.4]);
printsys(num,den)
num/den =
18 s + 360
---------------------------s^3 + 40.4 s^2 + 391 s + 150
wn=2;
damping=0.707;
[num,den]=ord2(wn,damping);
printsys(num,den,'s')
num/den =
1
----------------------s^2 + 2.828 s + 4
Construyendo sistemas
s+1
(s+3)(s+5)
ngo=[1 1];
dgo=conv([1 3],[1 5]);
[ngc1,ngc2]=cloop(ngo,dgo);
s+1
(s+3)(s+5)
s+6
(s+10)
ngo=[1 1];
dgo=conv([1 3],[1 5]);
nh=[1 6];
dh=[1 10];
[ngc2,dgc2]=feedback(ngo,dgo,nh,dh);
printsys(ngc2,dgc2,'s')
num/den =
s^2 + 11 s + 10
------------------------------------s^3 + 19 s^2 + 102 s + 156
para bloques funciones: series, parallel, blkbuild,connect
num=[1 2];
den=[1 6 10];
rlocus(num,den)
1
0.8
0.6
Imag Axis
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-5
-4
-3
-2
-1
Real Axis
[k,polos]=rlocfind(num,den)
Select a point in the graphics window
selected_point =
-3.3065 + 0.5322i
k=
0.6195
polos =
-3.3097 + 0.5335i
-3.3097 - 0.5335i
1
0.8
0.6
0.4
Imag Axis
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-5
-4
-3
-2
-1
Real Axis
num=[3 2 5 4 6];
den=[1 3 4 2 7 2];
[z,p,k]=tf2zp(num,den)
z=
0.4019 + 1.1965i
0.4019 - 1.1965i
-0.7352 + 0.8455i
-0.7352 - 0.8455i
p=
-1.7680 + 1.2673i
-1.7680 - 1.2673i
0.4176 + 1.1130i
0.4176 - 1.1130i
-0.2991
k=
3
Funcin de transferencia a partir de ceros y polos
z=[0; 0; 0; -1];
p=[-1+i -1-i -2 -3.15+2.63*i -3.15-2.63*i];
k=2;
[num,den]=zp2tf(z,p',k)
num =
0
den =
1.0000 10.3000 48.0394 109.1576 126.2364 67.3576
Respuesta temporal
Escaln
grid on
step(num,den)
Step Response
From: U(1)
0.15
0.05
To: Y(1)
Amplitude
0.1
-0.05
-0.1
0.5
1.5
2.5
Time (sec.)
step(num,den,0:0.1:10)
se puede obtener los valores para luego tratarlos
[y,x,t]=step(num,den,0:0.1:10);
plot(t,y);
Impulso:
impulse(num,den)
Entradas arbitrarias
3.5
t=[0:0.1:20];
u=exp(-t);
lsim(num,den,u,t)
Si se quiere ver la salida con la entrada
y=lsim(num,den,u,t);
plot(t,u,t,y)
1.5
0.5
-0.5
10
12
14
16
18
20
function [] = paso(num,den)
[numexp,denexp]=cloop(num,den)
step(numexp,denexp)
pause
valorfinal=polyval(numexp,0)/polyval(denexp,0)
[y,x,t]=step(numexp,denexp);
[Y,kexp]=max(y);
tiempopico=t(kexp)
sobrepaso=100*(Y-valorfinal)/valorfinal
n=1;
while y(n)<0.1*valorfinal, n=n+1; end
m=1;
while y(m)<0.9*valorfinal, m=m+1; end
tiempo_subida=t(m)-t(n)
l=length(t);
while (y(l)>0.98*valorfinal)&(y(l) < 1.02*valorfinal)
l=l-1;
end
tiempo_establecimiento=t(l)
paso(num,den)
numexp =
0 0 1
denexp =
1 1 2
valorfinal =
0.5000
tiempopico =
2.4294
sobrepaso =
30.4117
tiempo_subida =
0.8834
tiempo_establecimiento =
7.7300
Dibujos en el dominio de la frecuencia
Bode Diagrams
From: U(1)
30
10
0
-10
0
-100
To: Y(1)
20
-200
-300
-400
10-1
100
Frequency (rad/sec)
subplot(211),nyquist(num,den)
z=[-2 -2+5*i -2-5*i];
p=[-1 -5 -7 -1+7*i -1-7*i];
k=30;
subplot(211),nyquist(num,den)
subplot(212),axis([-360 0 -40 30]);
101
102
nichols(num,den)
ngrid
Nyquist Diagrams
From: U(1)
10
To: Y(1)
Imaginary Axis
20
0
-10
-20
-8
-6
-4
-2
-150
-100
-50
Real Axis
Nichols Charts
20
To: Y(1)
From: U(1)
30
10
0
-10
-400
-350
-300
-250
-200
Obteniendo informacin
num=10*[1 1];
den=conv([1 -1+5*i],[1 -1-5*i]);
bode(num,den)
[mag,phase,w]=bode(num,den);
[Mp,k]=max(mag)
Mp =
5.0767
k=
29
wp=w(k)
wp =
5.1784
n=1;
while 20*log10(mag(n))>=-3,n=n+1;end
anchobanda=w(n)
anchobanda =
0.1000
Margen de fase y margen de ganancia
[Gm,Pm,Wcg,Wcp]=margin(num,den)
Gm =
0.2000
Pm =
73.7398
Wcg =
5.2915
Wcp =
12.0000
Bode Diagrams
Gm=-13.979 dB (at 5.2915 rad/sec), Pm=73.74 deg. (at 12 rad/sec)
20
10
0
-10
-20
300
200
100
0
-100
-200
10-1
100
101
102
Frequency (rad/sec)
Ejemplo funcin:
%Funcion mibode(num,den,d1,d2)
% Dibuja diagrama de bode en un ranfo de frecuencias
function [] = mibode(num,den,d1,d2)
w=logspace(d1,d2,d2-d1*100);
[mag,fase,w]=bode(num,den,w);
semilogx(w,20*log10(mag));
ylabel('Ganancia dB');
xlabel('Frecuencia (rad/seg)');
grid
axis tight
figure
semilogx(w,fase);
ylabel('Fase en grados');
xlabel('Frecuencia (rad/seg)');
grid
mibode(num,den,-1,2)
num=1;
den=[1 1 1];
sys=tf(num,den)
Transfer function:
1
--------------s^2 + s + 1
sys1=zpk(z,p,k)
Zero/pole/gain:
29 (s+2) (s^2 + 4s + 29)
--------------------------------(s+1) (s+5) (s+7) (s^2 + 2s + 50)
sys*sys1
Zero/pole/gain:
29 (s+2) (s^2 + 4s + 29)
----------------------------------------------(s+1) (s+5) (s+7) (s^2 + s + 1) (s^2 + 2s + 50)
feedback(sys1,sys)
Zero/pole/gain:
29 (s+2) (s^2 + s + 1) (s^2 + 4s + 29)
--------------------------------------------------------------------------(s+6.81) (s+5.292) (s+1.334) (s^2 + 0.5767s + 1.434) (s^2 + 1.988s + 49.79)
Programa compensacin en Adelanto:
% Compensacion en adelanto
% Formato: adelanto(num,den,tipo)
% tipo: 'alfa' Red adelanto alfa min
%
'vertical'
Red adelanto polo en vertical
%
'compen' Red de adelanto por compensacin
%
'pd'
P
function [numct,denct] = adelanto (num,den,tipo)
n=1;
%%%%%%%%% RED DE ADELANTO %%%%%%%%%%%%%%%%%
if tipo(1) == 'a'
echo on
% Red adelanto alfa min
echo off
if cang > 60
pause % Dos controladores en cascada
n=2;
cang=cang/2;
cang
end
theta=180-angle(s1)*180/pi
gamma=0.5*(180-theta-cang)
zc=sin(gamma*pi/180)*wn/sin((180-theta-gamma)*pi/180);
pc=sin((gamma+cang)*pi/180)*wn/sin((180-theta-gamma-cang)*pi/180);
numc=[1 zc];
denc=[1 pc];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))^n/((abs(polyval(num,s1))
*abs(polyval(numc,s1))^n));
pause
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
else
kc=kc
printsys(numc,denc,'s');
end
end
%%% Fin red de adelanto %%%%%%
%%% Compensador por cancelacin
if (tipo(1)=='c')
echo on
% Compensacin por cancelacin
echo off
zc=input('Introduce posicin del polo a cancelar ');
if cang > 60
pause % Dos controladores en cascada
n=2;
cang=cang/2;
cang
end
numc=[1 -zc];
angnum=angle(polyval([1 -zc],s1))*180/pi;
zp=-real(s1)+imag(s1)/tan((angnum-cang)*pi/180);
denc=[1 zp];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))^n/((abs(polyval(num,s1))
*abs(polyval(numc,s1))^n));
kc=abs(kc);
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
else
kc=kc
printsys(numc,denc,'s');
end
end
%% Fin compensador de cancelacin
%% Compensador enla vertical
if (tipo(1)=='v')
echo on
% Compensacin en la vertical
echo off
if cang > 60
pause % Dos controladores en cascada
n=2;
cang=cang/2;
cang
end
zc=-real(s1)
numc=[1 zc];
angnum=angle(polyval([1 zc],s1))*180/pi;
zp=-real(s1)+imag(s1)/tan((angnum-cang)*pi/180);
denc=[1 zp];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))^n/((abs(polyval(num,s1))
*abs(polyval(numc,s1))^n));
kc=abs(kc);
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
else
kc=kc
printsys(numc,denc,'s');
end
end
%% Fin compensador en la vertical
echo on
% Compensador PD
echo off
zc=-real(s1)+imag(s1)/tan(cang*pi/180);
numc=[1 zc]
denc=[1];
kc=polyval(den,s1)/((polyval(numc,s1)*polyval(num,s1)));
kc=abs(kc)
% printsys(numc,[],'s');
end
%% Comprobacin
if n==1
[numt,dent]=cloop(kc*conv(num,numc),conv(den,denc));
elseif n==2
[numt,dent]=cloop(kc*kc*conv(conv(num,numc),numc),conv(conv(den,denc),
denc));
end
roots(dent)
% Preparo argumentos
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
numct=kc*conv(numc,numc);
denct=conv(denc,denc);
else
numct=kc*numc;
denct=denc;
end
num=4;
den=conv([1 0],[1 2]);
sys=tf(num,den);
rltool(sys)
Permite aadir ceros, polos, variar la ganacia y observar la respuesta temporal
y frecuencial.
Sistemas Discretos
[NUMd,DENd] = C2DM(NUM,DEN,Ts,'method') converts the continuoustime polynomial transfer function G(s) = NUM(s)/DEN(s) to discrete
time, G(z) = NUMd(z)/DENd(z), using 'method'.
'zoh'
t=0:0.1:10;
[numd,dend]=c2dm(num,den,Ts,'zoh');
[numdc,dendc]=cloop(numd,dend);
dstep(numdc,dendc,t);
Ejercicio: Dibujar el lugar geomtrico de las raices para Ts=0.5s, T=1s, T=2s.
Determinar el valor crtico de k y localizar los polos de lazo cerrado en los tres
casos.
1
s(s+1)
%%
%%
%%
%%
%%
%%
num=1;
den=[1 1 0];
% Planta
capa=0.5;
wn=4.5345;
% Especificaciones
Ts=0.2;
% Periodo de muestreo
% Polo dominante
s1=-capa*wn+wn*sqrt(1-capa*capa)*i;
% Diseo controlador continuo
zc=-1;
numc=[1 -zc];
ang=angle(polyval(num,s1)/polyval(den,s1))*180/pi;
if ang<0
% Contribucion angular Compensador
cang=ang+180;
else
cang=180-ang;
end
angnum=angle(polyval([1 -zc],s1))*180/pi;
zp=-real(s1)+imag(s1)/tan((angnum-cang)*pi/180);
denc=[1 zp];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))/((abs(polyval(num,s1))*a
bs(polyval(numc,s1))));
fprintf('Controlador continuo\n');
printsys(kc*numc,denc);
[numcc,dencc]=cloop(kc*conv(num,numc),conv(den,denc));
step(numcc,dencc,0:0.05:2);
pause
% controlador continuo con mantenedor a entrada
num1=1;
den1=conv(den,[Ts/2 1]);
% Diseo controlador continuo
zc=-1;
numc=[1 -zc];
ang=angle(polyval(num1,s1)/polyval(den1,s1))*180/pi;
if ang<0
% Contribucion angular Compensador
cang=ang+180;
else
cang=180-ang;
end
angnum=angle(polyval([1 -zc],s1))*180/pi;
zp=-real(s1)+imag(s1)/tan((angnum-cang)*pi/180);
denc=[1 zp];
kc=abs(polyval(den1,s1))*abs(polyval(denc,s1))/((abs(polyval(num1,s1))
*abs(polyval(numc,s1))));
[numcd,dencd]=c2dm(kc*numc,denc,Ts,'matched');
fprintf('Controlador discreto equivalente al continuo\n');
printsys(numcd,dencd,'z');
% Calculo G(z)
[numd,dend]=c2dm(num,den,Ts,'zoh');
printsys(numd,dend,'z');
% Lazo cerrado
[numdt,dendt]=cloop(conv(numd,numcd),conv(dend,dencd));
hold on
dstep(numdt,dendt,0:Ts:2);
pause
%% Calculo en digital directamente
z1=exp(Ts*s1); % Polo dominante en el plano z
% Diseo controlador discreto
zdc=exp(-1*Ts);
ndc=[1 -zdc];
ang=angle(polyval(numd,z1)/polyval(dend,z1))*180/pi
if ang<0
% Contribucion angular Compensador
cang=ang+180;
else
cang=180-ang;
end
angnum=angle(polyval([1 -zdc],z1))*180/pi;
zdp=-real(z1)+imag(z1)/tan((angnum-cang)*pi/180);
ddc=[1 zdp];
kdc=abs(polyval(ddc,z1))*abs(polyval(dend,z1))/((abs(polyval(ndc,z1))*
abs(polyval(numd,z1))));
fprintf('Controlador discreto diseo en z\n');
printsys(kdc*ndc,ddc,'z');
[numdt2,dendt2]=cloop(kdc*conv(ndc,numd),conv(ddc,dend));
dstep(numdt2,dendt2,0:Ts:2);
hold off
%%
%%
%%
%%
num=1;
den=[1 1];
% Planta
capa=0.5;
n=10;
Ts=1;
% Especificaciones
% muestras por oscilacin amortiguada
% Polo dominante
z1=exp((-2*pi*capa/(sqrt(1-capa^2)*n) + i*2*pi/n))
% Calculo G(z)
[numd,dend]=c2dm(num,den,Ts,'zoh');
dend=conv(dend,[1 0 0]);
% incluyo retraso 2 segundos
% Diseo controlador discreto
ddc=[1 -1]; % Posiciono el polo en z=1
ang=angle(polyval(numd,z1)/polyval(conv(dend,ddc),z1))*180/pi
if ang<0
% Contribucion angular Compensador
cang=ang+180;
else
cang=180-ang;
end
zz=-real(z1)+imag(z1)/tan(cang*pi/180);
ndc=[1 zz];
kdc=abs(polyval(ddc,z1))*abs(polyval(dend,z1))/((abs(polyval(ndc,z1))*
abs(polyval(numd,z1))));
fprintf('Controlador discreto diseo en z\n');
printsys(kdc*ndc,ddc,'z');
[numdt2,dendt2]=cloop(kdc*conv(ndc,numd),conv(ddc,dend));
roots(dendt2)
% Respuesta escaln
figure(1);
dstep(numdt2,dendt2,0:Ts:40);
kv=polyval((1/Ts)*kdc*conv(ndc,numd),1) /polyval(dend,1);
ess=1/kv
%respuesta a rampa
figure(2);
t=0:Ts:30;
u=t;
plot(t,u);
[Y]=dlsim(numdt2,dendt2,u);
hold on
stairs(t,Y);
title('Respuesta entrada escaln');
hold off
Espacio de estado
Clculo de los autovalores de una matriz
A x= x
|A- I|=0
eig(A)
valores propios
si A es real y simtrica los valores propios son reales
A=[0 1; -1 0];
eig(A)
ans =
0 + 1.0000i
0 - 1.0000i
Clculo de autovalores y auto vectores
D=
-1.0000
0
0
0 -2.0000
0
0
0 -3.0000
Forma de jordan
A=[0 1 0; 0 0 1; 1 -3 3];
[V,J]=jordan(A)
V=
1
1
1
-1
0
1
1
0
0
1
0
0
1
1
0
0
1
1
J=
y(s)/u(s)=num/den=C(sI-A)-1B+D
num=1;
den=[1 1 1];
[A,B,C,D]=tf2ss(num,den)
A=
-1
1
-1
0
B=
1
0
C=
0
D=
0
Si el sistema tiene ms de una entrada
[num,den]=ss2tf(A,B,C,D,iu) donde iu es el nmero de entrada
Ejemplo;
A=[0 1; -2 -3];
B=[1 0; 0 1];
D=[0 0];
C=[1 0];
[num1,den1]=ss2tf(A,B,C,D,1)
num1 =
0
den1 =
1
[num2,den2]=ss2tf(A,B,C,D,2)
num2 =
0
den2 =
1
x1
-1
1
x1
x2
u1
1
0
b=
c=
x2
-1
0
y1
x1
0
y1
u1
0
x2
1
d=
A=[0 1; -2 3];
B=[1 1]';
Ts=0.1;
[G,H]=c2d(A,B,Ts)
%Periodo de muestreo
G=
0.9889
-0.2325
0.1162
1.3376
H=
0.1052
0.1052
A=[-3 1 0 0; 0 0 -2 0; -4 0 0 1; 0 0 -3 0];
B=[0 2; 1 0; 0 3; 1 -3];
C=[1 0 0 0; 0 0 1 0];
D=[0 0; 0 1];
eig(A)
% Calculo de matriz de Jordan
[S,J]=jordan(A);
A1=J;
B1=inv(S)*B;
C1=C*S;
D1=D;
printsys(A1,B1,C1,D1);