实    验    报    告
实验名称                利用MATLAB 实现极点配置、设计状态观测器                                       
专业现代a7
自动化
姓名
学号
授课老师
预定时间
实验时间
实验台号
一、目的要求
    1、掌握状态反馈和输出反馈的概念及性质。
    2、掌握利用状态反馈进行极点配置的方法。学会用MATLAB 求解状态反馈矩阵。
    3、掌握状态观测器的设计方法。学会用MATLAB 设计状态观测器。
    4、熟悉分离定理,学会设计带有状态观测器的状态反馈系统
二、原理简述
1、状态反馈和输出反馈
设线性定常系统的状态空间表达式为
如果采用状态反馈控制规律u= r-Kx,其中 r是参考输入,则状态反馈闭环系统的传递函数为:
2、极点配置   
如果 SISO 线性定常系统完全能控,则可通过适当的状态反馈, 将闭环系统极点配置到任意期望的位置。
MATLAB 提供的函数acker( )是用Ackermann 公式求解状态反馈阵K。该函数的调用格
式为
K=acker(A,B,P)
其中A 和B 分别为系统矩阵和输入矩阵。P 是期望极点构成的向量。
MATLAB 提供的函数place( )也可求出状态反馈阵K。该函数的调用格式为
K=place(A,B,P)
函数place( )还适用于多变量系统极点配置,但不适用含有多重期望极点的问题。函数acker( )不适用于多变量系统极点配置问题,但适用于含有多重期望极点问题。
三、仪器设备
PC 计算机,MATLAB 软件
四、内容步骤、数据处理
题5-1 某系统状态方程如下
理想闭环系统的极点为,试
(1)采用直接计算法进行闭环系统极点配置;
(2)采用Ackermann公式计算法进行闭环系统极点配置;
(3)采用调用place函数法进行闭环系统极点配置。
>> A=[0 1 0;0 0 1;-4 -3 -2];
B=[1;3;6];
C=[1 0 0];
D=0;
G=ss(A,B,C,D);
[Q,D]=eig(A)
结果:
Q =
  0.2995            0.3197 - 0.0731i  0.3197 + 0.0731i
  -0.4944            0.0573 + 0.5074i  0.0573 - 0.5074i
  0.8160              -0.7948            -0.7948         
  D =
      -1.6506                  0              0         
        0            -0.1747 + 1.5469i        0         
        0                  0            -0.1747 - 1.5469i
则矩阵A的特征根为:-1.6506,-0.1747 + 1.5469i-0.1747 - 1.5469i
程序:
>> A=[0 1 0;0 0 1;-4 -3 -2];
B=[1;3; -6];
C=[1 0 0];
D=0;
p=[-1 -2 -3];
k=acker(A,B,p)
结果:k =1.4809    0.7481  -0.0458
验证:
>> A=[0 1 0;0 0 1;-4 -3 -2];
  B=[1;3;6];
  C=[1 0 0];
  D=0;
  k=[0.5053 0.7052 0.2299];
  A1=A-B*k;
  sys=ss(A1,B,C,D);
  G1=zpk(sys)
结果:Zero/pole/gain:
    (s^2  + 5s + 15)
-------------------------
(s+1) (s+1.999) (s+3.001)
则其极点为-1 ,-2 ,-3
(2)
程序:
>> A=[0 1 0;0 0 1;-4 -3 -2];
B=[1;3; -6];
C=[1 0 0];
D=0;
p=[-1 -2 -3];
k=place(A,B,p)
结果:k = 1.4809    0.7481  -0.0458
验证:
程序:
>> A=[0 1 0;0 0 1;-4 -3 -2];
  B=[1;3; -6];
  C=[1 0 0];
  D=0;
  p=[-1 -2 -3];
  k=place(A,B,p);
  A1=A-B*k;
  sys=ss(A1,B,C,D);
  G1=zpk(sys)
结果:
Zero/pole/gain:
(s+4.303) (s+0.6972)
--------------------
(s+3) (s+2) (s+1)
则其极点为-1,-2,-3
题5-2 某控制系统的状态方程描述如下:
y=[1 7 24 24]x
通过状态反馈使系统的闭环极点配置在[-30 -1.2 ]位置上,求出状态反馈矩阵K,验证闭环极点,并绘制闭环系统的阶跃响应曲线进行对比。
程序>> A=[-10 -35 -50 -24;1 0 0 0;0 1 0 0;0 0 1 0];
      B=[1;0;0;0];
      C=[1 7 24 24];
      D=0;
      p=[-30 -1.2 -2.4+4i -2.4-4i];
      k=place(A,B,p)
结果:k = 26.0000  172.5200  801.7120  759.3600
验证:
程序:>> A=[-10 -35 -50 -24;1 0 0 0;0 1 0 0;0 0 1 0];
B=[1;0;0;0];
C=[1 7 24 24];
D=0;
p=[-30 -1.2 -2.4+4i -2.4-4i];
k=place(A,B,p);
A1=A-B*k;
sys=ss(A1,B,C,D);
G1=zpk(sys)
结果:Zero/pole/gain:
  (s+1.539) (s^2  + 5.461s + 15.6)
------------------------------------
(s+30) (s+1.2) (s^2  + 4.8s + 21.76)
>> A=[-10 -35 -50 -24;1 0 0 0;0 1 0 0;0 0 1 0];
B=[1;0;0;0];
C=[1 7 24 24];
D=0;
G=ss(A,B,C,D);
p=[-30 -1.2 -2.4+4i -2.4-4i];
k=place(A,B,p);
A1=A-B*k;
G1=ss(A1,B,C,D);
t=0:0.5:20;
u=ones(size(t));
y2=lsim(G1,u,t);
y1=lsim(G,u,t);
plot(t,y1,':',t,y2,'-')
蓝为配置前,绿为配置后
题5-3 某系统状态空间描述如下
设计全状态观测器,要求状态观测器的极点为
程序>> A=[0 1 0;0 0 1;-4 -3 -2];
  B=[1;3;-6]';
  C=[1 0 0];
  D=0;
  p=[-1 -2 -3];
  L=(acker(A',C',p))'
结果:L = 4
    0
    -10
题5-4已知系统
y=[6 6 0]x
(1)求系统的零点,极点和传递函数,并判断系统的能控性和能观测性。
(2)分别选取K=[0 3 0].K=[1 3 2],K=[0 3 1]为状态反馈矩阵,求解闭环系统的零点,极点和传递函数,并判断系统的能控性和能观测性。它们是否发生改变?为什么?
(1)
程序
>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
sys=ss(A,B,C,D);
G=zpk(sys)
结果:
Zero/pole/gain:
  6 (s+1)
-------------
(s+2)^2 (s+3)
则系统的零点为:-1
则系统的极点为:-2,-2,-3
程序
>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
Uc=ctrb(A,B);rank(Uc)
结果:ans =  3
则系统能控
程序:
>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
Vo=obsv(A,C);
rank(Vo)
结果:ans =3
则系统能观
(2)
k=[0 3 0]时:
程序>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
k=[0 3 0];
A1=A-B*k;
sys=ss(A1,B,C,D);
G=zpk(sys)
结果:    Zero/pole/gain:
            6 (s+1)
---------------------------------
(s+0.8821) (s^2  + 6.118s + 13.6)
则零点为-1
>> pole(G)
ans =
  -0.8821         
  -3.0589 + 2.0606i
  -3.0589 - 2.0606i
>> Uc=ctrb(A,B);rank(Uc)
ans =
    3
>> Vo=obsv(A,C);
rank(Vo)
ans =
    3
k=[1 3 2]时:
程序>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
k=[1 3 2];
A1=A-B*k;
sys=ss(A1,B,C,D);
G=zpk(sys)
结果:
Zero/pole/gain:
            6 (s+1)
---------------------------------
(s+6.319) (s^2  + 2.681s + 2.057)
则闭环系统的零点为:-1
>> pole(G)
ans =
  -6.3186         
  -1.3407 + 0.5099i
  -1.3407 - 0.5099i
>>  Uc=ctrb(A,B);rank(Uc)
ans =
    3
则系统具有能控性
>> Vo=obsv(A,C);
rank(Vo)
ans =
    3
则系统具有能观测性
k=[0 1 3]时:
>> A=[0 1 0;0 0 1;-12 -16 -7];
B=[0;0;1];
C=[6 6 0];
D=0;
k=[0 1 3];
A1=A-B*k;
sys=ss(A1,B,C,D);
G=zpk(sys)
Zero/pole/gain:
            6 (s+1)
-------------------------------
(s+8.08) (s^2  + 1.92s + 1.485)
>> Uc=ctrb(A,B);rank(Uc)
ans =
    3
则系统具有能控性
>> Vo=obsv(A,C);
rank(Vo)
ans =
    3
则系统具有能观测性
分析:
系统完全能控则可以任意配置极点,配置极点不改变系统的能控性,但可能改变系统的能观测性。不存在零极相消的情况下,则不改变系统的能观测性。
五、分析讨论
通过本次试验,掌握了状态反馈和输出反馈的概念及性质。掌握了利用状态反馈进行极点配置的方法。学会了用MATLAB 求解状态反馈矩阵。掌握了状态观测器的设计方法。学会了用MATLAB 设计状态观测器。熟悉了分离定理,学会了设计简单的带有状态观测器的状态反馈系统。原本通过平常的上课,对于一些概念我还是没有完全掌握,比如极点配置,状态反馈,输出反馈。通过实验的验证,翻阅书籍,使我对于书本上的概念产生了更深的理解,学会了分析验证书本上的定理而不是盲目学习。