参考链接:https://zhuanlan.zhihu.com/p/129295463
https://blog.csdn.net/l2014010671/article/details/102724207
https://zhuanlan.zhihu.com/p/138581539
https://matlabexamples.wordpress.com/2013/12/16/design-of-full-order-and-reduced-order-observer/降维与全维观测器
对于系统状态方程:A,B,C,D
https://zhuanlan.zhihu.com/p/136097599
size(A):可以获取矩阵A的行数与列数
rank(A):求矩阵A的秩
Inv(A):求A得逆
[num,den]ss2tf(A,B,C,D):将状态空间表达式化为传递函数形式;返回值[num,den](传递函数的分子,传递函数的分母)
注意:该函数返回值没有约分
[A,B,C,D]=tf2ss(num,den):将传递函数化为状态空间表达式;返回值[A,B,C,D](此为系统的最小实现)
M=ctrb(A,B):返回系统能控性判别矩阵M
N=obsv(A,C):返回系统能观性判别矩阵N
[abar,bbar,cbar,t,k]=ctrbf(A,B,C,D):对系统按能控性分解,t为变换阵,k为各子系统的秩;
[abar,bbar,cbar,t,k]=obsvf(A,B,C,D):对系统按能控性分解,t为变换阵,k为各子系统的秩;
sys=tf(num,den):命令窗口输出传递函数;
sys_min=minreal(sys):对传递函数sys进行约分后,在命令窗口输出约分后的结果;
对于lism(sys,u,t,x0) 这一种命令,若要配置初值x0,当且仅当sys是状态空间方程形式时有效,即对于传递函数形式的sys,应使用ss()函数做转换,即lism(ss(sys),u,t,x0)
%列写状态空间表达式矩阵
A=[-1 -1;6.5 0];
B=[1 1; 1 0];
C=[1 0; 0 1];
D=[0 0;0 0];
%得到传递函数表达式
[num, den]=ss2tf(A, B, C, D, 2);
%在命令行打印传递函数
printsys(num, den);
%列写状态空间表达式矩阵
A=[0 1 0;0 0 1;-24 -26 -9];
B=[0;0;1];
C=[2 1 0];
%D=[0;0;0];
D=0
%得到传递函数表达式
[num, den]=ss2tf(A, B, C, D);
%在命令行打印传递函数
print(num, den);
den = [1, 7.0000, 12.000]
num = 1.0000
第二题:
%列写状态空间表达式矩阵
A=[-2 2 -1;0 -2 0;1 -4 0];
B=[0;0;1];
C=[1 -1 1];
%D=[0;0;0];
D=0
%得到传递函数表达式
[num, den]=ss2tf(A, B, C, D);
%在命令行打印传递函数
print(num, den);
den = [1, 1.0000]
num = 1.0000
下面是填空题第3题
b = [0 1 8 20];
a = [1 12 44 48];
[A,B,C,D] = tf2ss(b,a)
sys1 = ss(A,B,C,D)
csys = canon(sys1,'companion')
A =
-0.0000 -0.0000 -4.8000
-1.0000 0.0000 4.4000
0 -10.0000 -12.0000
B =
2.0000
-0.8000
1.0000
C =
0 0 1
D = 0
参考:https://ww2.mathworks.cn/help/ident/ref/lti.canon.html?searchHighlight=canon&s_tid=srchtitle
b = [0 1 8 20];
a = [1 12 44 48];
[A,B,C,D] = tf2ss(b,a)
sys1 = ss(A,B,C,D)
%csys = canon(sys1,'modal ')
[csys,T]=canon(sys1,'modal ')
csys =
A =
x1 x2 x3
x1 -6 0 0
x2 0 -4 0
x3 0 0 -2
B =
u1
x1 -15.52
x2 -19.6
x3 5.745
C =
x1 x2 x3
y1 -0.06442 0.05103 0.1741
D =
u1
y1 0
Continuous-time state-space model.
T =
-15.5242 -93.1450 -124.1934
-19.5959 -156.7673 -235.1510
5.7446 57.4456 137.8695
syms s t x0 tao phi phi0;%声明变量
A=[-13/7 -2/7;4/7 -22/7];
I=[1 0;0 1];
E=s*I-A;
C=det(E);
D=collect(inv(E));
phi0=ilaplace(D)
phi0 =
[ (8exp(-2t))/7 - exp(-3t)/7, (2exp(-3t))/7 - (2exp(-2t))/7]
[(4exp(-2t))/7 - (4exp(-3t))/7, (8exp(-3t))/7 - exp(-2t)/7]
A=[-3 -2;5 0];
I=[1 0;0 1];
E=s*I-A;
C=det(E);
D=collect(inv(E));
phi0=ilaplace(D)
phi0 =
[exp(-(3*t)/2)*(cos((31^(1/2)*t)/2) - (3*31^(1/2)*sin((31^(1/2)*t)/2))/31), -(4*31^(1/2)*exp(-(3*t)/2)*sin((31^(1/2)*t)/2))/31]
[ (10*31^(1/2)*exp(-(3*t)/2)*sin((31^(1/2)*t)/2))/31, exp(-(3*t)/2)*(cos((31^(1/2)*t)/2) + (3*31^(1/2)*sin((31^(1/2)*t)/2))/31)]
>>
所以答案错了
A=[1 3 2;1 4 6;2 1 7];
C=[1 0 0;2 1 0];
N=obsv(A,C);
极点配置
A=[0 1 0;0 -1 1;0 -1 10];B=[0;0;10];D=0;P=[-10,-1+sqrt(3),-1-sqrt(3)];
k=acker(A,B,P)
k
运行:
k =
-2.0000 0.6000 2.1000
http://www.ece.northwestern.edu/local-apps/matlabhelp/toolbox/control/ref/acker.html Matlab里是A-BK,负号
A=[0 1 0;0 0 1;0 -3 -4];
B=[0;0;1];
C=[2 1 0];
D=0;
k=[8 5 0];
A1=A-B*k;
sys=ss(A1,B,C,D);
G1=zpk(sys);
算错了,零极点对消