概述
matlab求取状态方程的传递函数并实现系统解耦
matlab对于求取传递函数有现成的函数可调用,但是要注意单输入和多输入的差别。系统解耦没有响应的函数,需要我们根据系统解耦的原理自行编程。
要解耦,首先需要判断系统是否满足解耦的条件。对于状态方程形式,可以通过判断
c
i
A
u
i
B
≠
0
c_iA^{u_i}Bneq0
ciAuiB=0时,
u
i
u_i
ui的值。
E
i
=
c
i
A
u
B
E_i=c_iA^uB
Ei=ciAuB
E
=
[
E
1
E
2
⋮
]
E=begin{bmatrix} E_1 \ E_2 \ vdots \ end{bmatrix}
E=⎣⎢⎡E1E2⋮⎦⎥⎤
若E非奇异,则系统可解耦。
F
=
[
F
1
F
2
⋮
]
=
[
c
1
A
u
1
+
1
c
2
A
u
2
+
1
⋮
]
F=begin{bmatrix} F_1 \ F_2 \ vdots \ end{bmatrix}=begin{bmatrix} c_1A^{u_1+1} \ c_2A^{u_2+1} \ vdots \ end{bmatrix}
F=⎣⎢⎡F1F2⋮⎦⎥⎤=⎣⎢⎡c1Au1+1c2Au2+1⋮⎦⎥⎤
K
=
E
−
1
F
,
L
=
E
−
1
K=E^{-1}F, L=E^{-1}
K=E−1F,L=E−1
得到控制率
U
=
L
v
−
K
x
U=Lv-Kx
U=Lv−Kx代入原方程得到新的状态方程
x
˙
=
(
A
−
B
L
F
)
x
+
B
L
U
y
=
C
x
dot{x}=(A-BLF)x+BLU\y=Cx
x˙=(A−BLF)x+BLUy=Cx
最后根据要求再进行相应的极点配置。
matlab程序
以三阶为例
A
=
[
0
0
0
0
0
1
−
1
−
1
−
3
]
B
=
[
1
0
0
0
0
1
]
A=begin{bmatrix} 0&0&0 \ 0&0&1 \ -1&-1&-3 \ end{bmatrix} B=begin{bmatrix} 1&0 \ 0&0 \ 0&1\ end{bmatrix}
A=⎣⎡00−100−101−3⎦⎤B=⎣⎡100001⎦⎤
C
=
[
1
1
0
0
0
1
]
C=begin{bmatrix} 1&1&0 \ 0&0&1 \ end{bmatrix}
C=[101001]
// An highlighted block
A=[0 0 0;0 0 1;-1 -1 -3];
B=[1 0;0 0;0 1];
C=[1 1 0;0 0 1];
D=zeros(2,2); %状态矩阵
[num1,den1]=ss2tf(A,B,C,D,1) %传递函数
[num2,den2]=ss2tf(A,B,C,D,2)
%系统解耦-------------------
[m,n]=size(C);
E=zeros(m,m);
F=zeros(m,n);
for i=1:m
u=1;
E(i,:)=C(i,:)*A*B;
while(rank(E)==0)
u=u+1;
E(i,:)=C(i,:)*A^u*B;
end
F(i,:)=C(i,:)*A^(u+1);
end
L=inv(E);
K=L*F;
A0=A-B*L*F; %解耦后的状态矩阵
B0=B*L;
C0=C;
%极点配置-----------
J=[-2 -3 0]; %期望极点
K1=place(A0,B0,J)
最后
以上就是积极星月为你收集整理的matlab求取状态方程的传递函数并实现系统解耦matlab求取状态方程的传递函数并实现系统解耦的全部内容,希望文章能够帮你解决matlab求取状态方程的传递函数并实现系统解耦matlab求取状态方程的传递函数并实现系统解耦所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复