【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
和上一个程序运行的结果相同。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)