20210315 matlab 现代控制理论笔记

参考链接: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]
[(4
exp(-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);

在这里插入图片描述
算错了,零极点对消
在这里插入图片描述

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值