一、算法步骤

给定一个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

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐