【MATLAB】状态反馈极点配置
判断(A,b)能控性。若完全能控,进入下一步;若完全不能控,则不能进行所有极点配置。给定一个n维单输入连续时间线性时不变受控系统。给定单输入3维连续时间线性时不变受控系统为。,求满足极点配置要求的状态反馈矩阵。和上一个程序运行的结果相同。和一组任意的期望闭环特征值。计算能控规范形变换矩阵。计算有期望闭环特征值。
文章目录
一、算法步骤
给定一个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 ∣sI−A∣=α(s)=sn+an−1sn−1+...+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=1∏n(s−λi∗)=sn+an−1∗sn−1+...+a1∗s+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=[a0∗−a0,a1∗−a1,...,an−1∗−an−1]
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=[An−1b,An−2b,...,Ab,b]
1an−1⋮a10⋱⋱⋯⋱⋱an−1001
Step6: 计算 Q = T p − 1 Q=T_p^{-1} Q=Tp−1
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ˉ=
0100−6100−12
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∗=−1−j,求满足极点配置要求的状态反馈矩阵 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
和上一个程序运行的结果相同。
更多推荐
所有评论(0)