【MATLAB】状态反馈极点配置


一、算法步骤

给定一个n维单输入连续时间线性时不变受控系统 x ˙ = A x + b u \dot x=Ax+bu x˙=Ax+bu和一组任意的期望闭环特征值 { λ 1 ∗ , λ 2 ∗ , . . . , λ n ∗ } \{\lambda_1^*,\lambda_2^*,...,\lambda _n^* \} {λ1,λ2,...,λn},要来确定一个 1 × n 1\times n 1×n的状态反馈矩阵 K K K

极点配置中确定状态反馈矩阵 K K K的算法如下:

Step1: 判断(A,b)能控性。若完全能控,进入下一步;若完全不能控,则不能进行所有极点配置
Step2: 计算矩阵 A A A的特征多项式。有 ∣ s I − A ∣ = α ( s ) = s n + a n − 1 s n − 1 + . . . + a 1 s + a 0 |sI-A|=\alpha (s)=s^n+a_{n-1}s^{n-1}+...+a_1s+a_0 sIA=α(s)=sn+an1sn1+...+a1s+a0
Step3: 计算有期望闭环特征值 { λ 1 ∗ , λ 2 ∗ , . . . , λ n ∗ } \{\lambda_1^*,\lambda_2^*,...,\lambda _n^* \} {λ1,λ2,...,λn}决定的特征多项式。有 α ∗ ( s ) = ∏ i = 1 n ( s − λ i ∗ ) = s n + a n − 1 ∗ s n − 1 + . . . + a 1 ∗ s + a 0 ∗ \alpha^*(s)=\prod _{i=1}^n(s-\lambda_i^*)=s^n+a^*_{n-1}s^{n-1}+...+a^*_1s+a^*_0 α(s)=i=1n(sλi)=sn+an1sn1+...+a1s+a0
Step4: 计算 K = [ a 0 ∗ − a 0 , a 1 ∗ − a 1 , . . . , a n − 1 ∗ − a n − 1 ] K=[a^*_0-a_0,a^*_1-a_1,...,a^*_{n-1}-a_{n-1}] K=[a0a0,a1a1,...,an1an1]
Step5: 计算能控规范形变换矩阵 T p = [ A n − 1 b , A n − 2 b , . . . , A b , b ] [ 1 0 0 a n − 1 ⋱ ⋱ ⋮ ⋱ ⋱ 0 a 1 ⋯ a n − 1 1 ] T_p=[A^{n-1}b,A^{n-2}b,...,Ab,b]\begin{bmatrix} 1& 0 & &0 \\ a_{n-1}& \ddots & \ddots & \\ \vdots & \ddots & \ddots &0 \\ a_1&\cdots & a_{n-1} &1 \end{bmatrix} Tp=[An1b,An2b,...,Ab,b] 1an1a10an1001
Step6: 计算 Q = T p − 1 Q=T_p^{-1} Q=Tp1
Step7: 计算 K = K ˉ Q K=\bar K Q K=KˉQ
Step8: 停止计算


二、Matlab仿真

例: 给定单输入3维连续时间线性时不变受控系统为 x ˉ = [ 0 0 0 1 − 6 0 0 1 − 12 ] x + [ 1 0 0 ] u \bar x=\begin{bmatrix}0&0&0\\1&-6&0\\0&1&-12\end{bmatrix}x+\begin{bmatrix}1\\0\\0\end{bmatrix}u xˉ= 0100610012 x+ 100 u
期望闭环极点为 λ 1 ∗ = − 2 , λ 2 ∗ = − 1 + j , λ 3 ∗ = − 1 − j \lambda^*_1=-2,\lambda^*_2=-1+j,\lambda^*_3=-1-j λ1=2,λ2=1+j,λ3=1j,求满足极点配置要求的状态反馈矩阵 K K K

程序代码:

clear all;
close all;
A=[0 0 0;1 -6 0;0 1 -12]
b=[1;0;0];
J=[-2,-1+1i,-1-1i];%期望闭环极点

%step1
M=ctrb(A,b)%求能控判别矩阵M
if rank(M)<length(A) %系统不完全能控
    disp('系统不完全能控')
else%系统完全能控
    %step2
    n=size(A,1);
    I=eye(size(A));  %单位矩阵I
    syms s
    F=det(s*I-A);    %求系统的特征多项式
    a=sym2poly(F);   %提取系统的特征多项式的系数向量
    %step3
    ae=poly(J);     %提取系统的期望特征多项式的系数
    %step4
    K_bar=ae(length(ae):-1:2)-a(length(a):-1:2);%计算K_bar
    %step5
    T1=fliplr(M);
    T2=zeros(n);
    for i=1:1:n      
        T2=T2+diag(a(i)*ones(1,n+1-i),1-i);
    end
    Tp=T1*T2;        %计算变换矩阵Tp
    %step6
    Q=inv(Tp);
    %step7
    K=sym(K_bar*Q) %得到状态反馈矩阵K
end

运行结果:

K =
 
[ -14, 186, -1220]

MATLAB中也有直接求取状态反馈矩阵 K K K的函数

函数使用说明
K=acker(A,B,J)A为状态矩阵,B为输入矩阵,J是由n个期望的闭环极点构成的向量

程序代码:

clear all;
close all;
A=[0 0 0;1 -6 0;0 1 -12]
b=[1;0;0];
J=[-2,-1+1i,-1-1i];%期望闭环极点

K=acker(A,b,J)

运行结果:

K =

         -14         186       -1220

和上一个程序运行的结果相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦斯威尔逊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值