| 目录 | 模型预测控制的一点笔记和看法 |
|---|---|
| 1 | 【控制】模型预测控制 model predictive control 简介 |
| 2 | 【控制】模型预测控制,公式推导,数值仿真,有程序有图 |
连续时间 (continuous time) 模型的状态空间表达式为
x
˙
m
(
t
)
=
A
c
x
m
(
t
)
+
B
c
u
(
t
)
y
m
(
t
)
=
C
c
x
m
(
t
)
(1)
˙xm(t)=Acxm(t)+Bcu(t)ym(t)=Ccxm(t)
离散时间 (discrete time) 模型的状态空间表达式为
x
m
(
k
+
1
)
=
A
d
x
m
(
k
)
+
B
d
u
(
k
)
y
m
(
k
)
=
C
d
x
m
(
k
)
(2)
xm(k+1)=Adxm(k)+Bdu(k)ym(k)=Cdxm(k)
在Matlab中可以通过 c2dm() 函数,同时指定一个采样时间间隔
d
T
dT
dT,将连续时间模型转换成离散模型。
给定连续时间状态空间模型如下,求出对应的离散时间状态空间模型,采样时间间隔为1。
x
˙
m
(
t
)
=
[
0
1
0
3
0
1
0
1
0
]
x
m
(
t
)
+
[
1
1
3
]
u
(
t
)
y
m
(
t
)
=
[
0
1
0
]
x
m
(
t
)
˙xm(t)=[010301010]xm(t)+[113]u(t)ym(t)=[010]xm(t)
Matlab程序为
A_c = [0 1 0; 3 0 1; 0 1 0 ];
B_c = [1; 1; 3];
C_c = [0 1 0];
D_c = zeros(1,1);
dT = 1;
[A_d, B_d, C_d, D_d] = c2dm(A_c, B_c, C_c, D_c, dT)
得到的结果如下
A_d =
3.0716 1.8134 0.6905
5.4403 3.7622 1.8134
2.0716 1.8134 1.6905
B_d =
2.9107
5.9567
4.9107
C_d =
0 1 0
D_d =
0
令
Δ
x
m
(
k
+
1
)
=
x
m
(
k
+
1
)
−
x
m
(
k
)
\Delta x_m(k+1) = x_m(k+1) - x_m(k)
Δxm(k+1)=xm(k+1)−xm(k),
Δ
x
m
(
k
)
=
x
m
(
k
)
−
x
m
(
k
−
1
)
\Delta x_m(k) = x_m(k) - x_m(k-1)
Δxm(k)=xm(k)−xm(k−1),
Δ
u
(
k
)
=
u
(
k
)
−
u
(
k
−
1
)
\Delta u(k) = u(k) - u(k-1)
Δu(k)=u(k)−u(k−1),
Δ
y
m
(
k
+
1
)
=
y
m
(
k
+
1
)
−
y
m
(
k
)
\Delta y_m(k+1) = y_m(k+1) - y_m(k)
Δym(k+1)=ym(k+1)−ym(k)。
于是,有如下增广模型
[
Δ
x
m
(
k
+
1
)
y
m
(
k
+
1
)
]
⏟
x
(
k
+
1
)
=
[
A
d
0
C
d
A
d
I
]
⏟
A
[
Δ
x
m
(
k
)
y
m
(
k
)
]
⏟
x
(
k
)
+
[
B
d
C
d
B
d
]
⏟
B
Δ
u
(
k
)
y
m
(
k
)
=
[
0
I
]
⏟
A
[
Δ
x
m
(
k
)
y
m
(
k
)
]
⏟
x
(
k
)
(3)
[Δxm(k+1)ym(k+1)]⏟x(k+1)=[Ad0CdAdI]⏟A[Δxm(k)ym(k)]⏟x(k)+[BdCdBd]⏟BΔu(k)ym(k)=[0I]⏟A[Δxm(k)ym(k)]⏟x(k)
其中 0 , I 0,I 0,I 分别是适当维度的全零矩阵和单位矩阵。
根据式 (3),我们就有了如下的增广矩阵
x
(
k
+
1
)
=
A
x
(
k
)
+
B
Δ
u
(
k
)
y
(
k
)
=
C
x
(
k
)
(4)
x(k+1)=Ax(k)+BΔu(k)y(k)=Cx(k)
其中 x , y , Δ u x,y,\Delta u x,y,Δu 和 A , B , C A,B,C A,B,C 的定义参考式 (3)。
给定离散时间状态空间模型如下,
x
m
(
k
+
1
)
=
[
1
1
0
1
]
x
m
(
k
)
+
[
0.5
1
]
u
(
k
)
y
m
(
k
)
=
[
1
0
]
x
m
(
k
)
xm(k+1)=[1101]xm(k)+[0.51]u(k)ym(k)=[10]xm(k)
求对应的增广模型矩阵。
Matlab程序为
A_d = [1 1;0 1];
B_d = [0.5;1];
C_d = [1 0];
[BRow, BCol] = size(B_d);
[CRow, CCol] = size(C_d);
A = eye(BRow+CRow, BCol+CCol);
A(1:BRow, 1:CCol) = A_d;
A(BRow+1:BRow+CRow, 1:CCol) = C_d * A_d
B = zeros(BRow+CRow, BCol);
B(1:BRow, 1:BCol) = B_d;
B(BRow+1:BRow+CRow, 1:BCol) = C_d*B_d
C = zeros(CRow, BRow + CRow);
C(CRow, CCol+1:BRow+CRow) = eye(CRow)
得到的结果如下
A =
1 1 0
0 1 0
1 1 1
B =
0.5000
1.0000
0.5000
C =
0 0 1
通过上述转换为增广矩阵的过程,我们对增广矩阵式 (4) 中变量 x ( k ) x(k) x(k) 的研究,就等价于对离散时间模型式 (2) 中变量 x m ( k ) x_m(k) xm(k) 的下一时刻与当前时刻差值的研究。
假设当前时刻为 k i k_i ki, x ( k i ) x(k_i) x(ki) 为通过检测得到的系统状态变量,这里假设状态变量可以检测到。那么 N u N_u Nu 个未来的控制变量序列表示为
Δ u ( k i ) , Δ u ( k i + 1 ) , ⋯ , Δ u ( k i + N u − 1 ) (5) \Delta u(k_i), ~\Delta u(k_i+1), \cdots, \Delta u(k_i+N_u-1) \tag{5} Δu(ki), Δu(ki+1),⋯,Δu(ki+Nu−1)(5)
N
x
N_x
Nx 个预测的状态变量表示为
x
(
k
i
+
1
∣
k
i
)
,
x
(
k
i
+
2
∣
k
i
)
,
⋯
,
x
(
k
i
+
m
∣
k
i
)
,
⋯
,
x
(
k
i
+
N
x
∣
x
i
)
(6)
x(k_i+1 | k_i), ~x(k_i+2 | k_i), \cdots, x(k_i+m | k_i), \cdots, x(k_i+N_x | x_i) \tag{6}
x(ki+1∣ki), x(ki+2∣ki),⋯,x(ki+m∣ki),⋯,x(ki+Nx∣xi)(6)
注意,这里仅使用了当前时刻的状态值 x ( k i ) x(k_i) x(ki) 就预测了之后的 N p N_p Np 个时刻
代入增广模型中,得到
N
x
N_x
Nx 个预测状态变量的表达式为
x
(
k
i
+
1
∣
k
i
)
=
A
x
(
k
i
)
+
B
Δ
u
(
k
i
)
x
(
k
i
+
2
∣
k
i
)
=
A
x
(
k
i
+
1
∣
k
i
)
+
B
Δ
u
(
k
i
+
1
)
=
A
(
A
x
(
k
i
)
+
B
Δ
u
(
k
i
)
)
+
B
Δ
u
(
k
i
+
1
)
=
A
2
x
(
k
i
)
+
A
B
Δ
u
(
k
i
)
+
B
Δ
u
(
k
i
+
1
)
⋮
x
(
k
i
+
N
x
∣
k
i
)
=
A
N
x
x
(
k
i
)
+
A
N
x
−
1
B
Δ
u
(
k
i
)
+
A
N
x
−
2
B
Δ
u
(
k
i
+
1
)
+
⋯
+
A
N
x
−
N
u
B
Δ
u
(
k
i
+
N
u
−
1
)
(7)
x(ki+1|ki)=Ax(ki)+BΔu(ki)x(ki+2|ki)=Ax(ki+1|ki)+BΔu(ki+1)=A(Ax(ki)+BΔu(ki))+BΔu(ki+1)=A2x(ki)+ABΔu(ki)+BΔu(ki+1)⋮x(ki+Nx|ki)=ANxx(ki)+ANx−1BΔu(ki)+ANx−2BΔu(ki+1)+⋯+ANx−NuBΔu(ki+Nu−1)
得到
N
x
N_x
Nx 个预测输出变量的表达式为
y
(
k
i
+
1
∣
k
i
)
=
C
A
x
(
k
i
)
+
C
B
Δ
u
(
k
i
)
y
(
k
i
+
2
∣
k
i
)
=
C
A
x
(
k
i
+
1
∣
k
i
)
+
C
B
Δ
u
(
k
i
+
1
)
=
C
A
(
A
x
(
k
i
)
+
B
Δ
u
(
k
i
)
)
+
C
B
Δ
u
(
k
i
+
1
)
=
C
A
2
x
(
k
i
)
+
C
A
B
Δ
u
(
k
i
)
+
C
B
Δ
u
(
k
i
+
1
)
⋮
y
(
k
i
+
N
x
∣
k
i
)
=
C
A
N
x
x
(
k
i
)
+
C
A
N
x
−
1
B
Δ
u
(
k
i
)
+
C
A
N
x
−
2
B
Δ
u
(
k
i
+
1
)
+
⋯
+
C
A
N
x
−
N
u
B
Δ
u
(
k
i
+
N
u
−
1
)
(8)
y(ki+1|ki)=CAx(ki)+CBΔu(ki)y(ki+2|ki)=CAx(ki+1|ki)+CBΔu(ki+1)=CA(Ax(ki)+BΔu(ki))+CBΔu(ki+1)=CA2x(ki)+CABΔu(ki)+CBΔu(ki+1)⋮y(ki+Nx|ki)=CANxx(ki)+CANx−1BΔu(ki)+CANx−2BΔu(ki+1)+⋯+CANx−NuBΔu(ki+Nu−1)
可以看出,所有预测的变量都只与当前观测到的系统状态 x ( k i ) x(k_i) x(ki) 和未来的变量序列 Δ u ( k i + j ) , j = 1 , 2 , ⋯ , N u − 1 \Delta u(k_i+j), j=1,2,\cdots,N_u-1 Δu(ki+j),j=1,2,⋯,Nu−1 有关。
将未来的输出变量序列 y y y 的和未来的控制变量序列 Δ u \Delta u Δu 写成向量的形式
Y
=
[
y
(
k
i
+
1
∣
k
i
)
y
(
k
i
+
2
∣
k
i
)
⋮
y
(
k
i
+
N
x
∣
k
i
)
]
N
x
×
1
,
Δ
U
=
[
Δ
u
(
k
i
)
Δ
u
(
k
i
+
1
)
⋮
Δ
u
(
k
i
+
N
u
−
1
)
]
N
u
×
1
(9)
Y = \left[y(ki+1|ki)y(ki+2|ki)⋮y(ki+Nx|ki)
在单输入单输出 SISO 系统中, Y Y Y 的维度是 N x × 1 N_x \times 1 Nx×1, Δ U \Delta U ΔU 的维度是 N u × 1 N_u \times 1 Nu×1。
合并式 (8) 和 式 (9),我们有
[
y
(
k
i
+
1
∣
k
i
)
y
(
k
i
+
2
∣
k
i
)
⋮
y
(
k
i
+
N
x
∣
k
i
)
]
=
[
C
A
C
A
2
⋮
C
A
N
x
]
x
(
k
i
)
+
[
C
B
0
0
⋯
0
C
A
B
C
B
0
⋯
0
C
A
2
B
C
A
B
C
B
⋯
0
⋮
⋮
⋮
⋱
⋮
C
A
N
x
−
1
B
C
A
N
x
−
2
B
C
A
N
x
−
3
B
⋯
C
A
N
x
−
N
u
B
]
[
Δ
u
(
k
i
)
Δ
u
(
k
i
+
1
)
⋮
Δ
u
(
k
i
+
N
u
−
1
)
]
Y
=
F
x
(
k
i
)
+
Φ
Δ
U
(10)
[y(ki+1|ki)y(ki+2|ki)⋮y(ki+Nx|ki)]=[CACA2⋮CANx]x(ki)+[CB00⋯0CABCB0⋯0CA2BCABCB⋯0⋮⋮⋮⋱⋮CANx−1BCANx−2BCANx−3B⋯CANx−NuB][Δu(ki)Δu(ki+1)⋮Δu(ki+Nu−1)]Y=Fx(ki)+ΦΔU
在 k i k_i ki 时刻的期望输入值为 r ( k i ) r(k_i) r(ki),需要通过MPC控制,将系统输出尽可能的接近系统输入。假设在优化窗口内,输入是恒定值。问题就转换成了需要在优化窗口内,找到一个最佳的控制变量序列,使得系统输出与输入的误差最小。
将输入
r
(
k
i
)
r(k_i)
r(ki) 写成向量的形式有
R
s
=
r
(
k
i
)
[
1
1
⋮
1
]
N
x
×
1
(11)
R_s = r(k_i) \left[11⋮1
定义代价函数为
J
=
(
R
s
−
Y
)
T
(
R
s
−
Y
)
+
Δ
U
T
R
ˉ
Δ
U
(12)
J = (R_s - Y)^\text{T} (R_s-Y) + \Delta U^\text{T} \bar{R} \Delta U \tag{12}
J=(Rs−Y)T(Rs−Y)+ΔUTRˉΔU(12)
其中 R ˉ \bar{R} Rˉ 是权重矩阵。上述代价函数是一个典型的二次型代价函数,第一项反映了输入信号 R s R_s Rs 与预测的输出信号 Y Y Y 之间的误差,第二项则是为了限制控制量 Δ U \Delta U ΔU,避免控制量过大。
关于权重矩阵
R
ˉ
\bar{R}
Rˉ 的选择,这里我们使用
R
ˉ
=
r
w
I
N
u
×
N
u
,
r
w
≥
0
(13)
\bar{R} = r_w I_{N_u \times N_u},~~~~ r_w \ge 0 \tag{13}
Rˉ=rwINu×Nu, rw≥0(13)
其中 r w r_w rw 是影响闭环性能的可调参数。如果 r w = 0 r_w = 0 rw=0,则说明忽略 Δ U \Delta U ΔU 的大小,只考虑控制误差。
根据上述分析过程,代价函数
J
J
J 可以写成
J
=
(
R
s
−
Y
)
T
(
R
s
−
Y
)
+
Δ
U
T
R
ˉ
Δ
U
=
[
(
R
s
−
F
x
(
k
i
)
)
−
Φ
Δ
U
]
T
[
(
R
s
−
F
x
(
k
i
)
)
−
Φ
Δ
U
]
+
Δ
U
T
R
ˉ
Δ
U
=
[
(
R
s
−
F
x
(
k
i
)
)
T
−
Δ
U
T
Φ
T
]
[
(
R
s
−
F
x
(
k
i
)
)
−
Φ
Δ
U
]
+
Δ
U
T
R
ˉ
Δ
U
=
(
R
s
−
F
x
(
k
i
)
)
T
(
R
s
−
F
x
(
k
i
)
)
−
(
R
s
−
F
x
(
k
i
)
)
T
Φ
Δ
U
−
Δ
U
T
Φ
T
(
R
s
−
F
x
(
k
i
)
)
+
Δ
U
T
Φ
T
Φ
Δ
U
+
Δ
U
T
R
ˉ
Δ
U
=
(
R
s
−
F
x
(
k
i
)
)
T
(
R
s
−
F
x
(
k
i
)
)
−
Δ
U
T
Φ
T
(
R
s
−
F
x
(
k
i
)
)
−
Δ
U
T
Φ
T
(
R
s
−
F
x
(
k
i
)
)
+
Δ
U
T
Φ
T
Φ
Δ
U
+
Δ
U
T
R
ˉ
Δ
U
=
(
R
s
−
F
x
(
k
i
)
)
T
(
R
s
−
F
x
(
k
i
)
)
−
2
Δ
U
T
Φ
T
(
R
s
−
F
x
(
k
i
)
)
+
Δ
U
T
(
Φ
T
Φ
+
R
ˉ
)
Δ
U
(14)
J=(Rs−Y)T(Rs−Y)+ΔUTˉRΔU=[(Rs−Fx(ki))−ΦΔU]T[(Rs−Fx(ki))−ΦΔU]+ΔUTˉRΔU=[(Rs−Fx(ki))T−ΔUTΦT][(Rs−Fx(ki))−ΦΔU]+ΔUTˉRΔU=(Rs−Fx(ki))T(Rs−Fx(ki))−(Rs−Fx(ki))TΦΔU−ΔUTΦT(Rs−Fx(ki))+ΔUTΦTΦΔU+ΔUTˉRΔU=(Rs−Fx(ki))T(Rs−Fx(ki))−ΔUTΦT(Rs−Fx(ki))−ΔUTΦT(Rs−Fx(ki))+ΔUTΦTΦΔU+ΔUTˉRΔU=(Rs−Fx(ki))T(Rs−Fx(ki))−2ΔUTΦT(Rs−Fx(ki))+ΔUT(ΦTΦ+ˉR)ΔU
对
J
J
J 关于控制量
Δ
U
\Delta U
ΔU 求一阶偏导数
∂
J
∂
Δ
U
=
−
2
Φ
T
(
R
s
−
F
x
(
k
i
)
)
+
2
(
Φ
T
Φ
+
R
ˉ
)
Δ
U
(15)
∂J∂ΔU=−2ΦT(Rs−Fx(ki))+2(ΦTΦ+ˉR)ΔU
当一阶导数
∂
J
∂
Δ
U
=
0
\frac{\partial J}{\partial \Delta U} = 0
∂ΔU∂J=0 时,有最优的控制量为
−
2
Φ
T
(
R
s
−
F
x
(
k
i
)
)
+
2
(
Φ
T
Φ
+
R
ˉ
)
Δ
U
=
0
(
Φ
T
Φ
+
R
ˉ
)
Δ
U
=
Φ
T
(
R
s
−
F
x
(
k
i
)
)
Δ
U
=
(
Φ
T
Φ
+
R
ˉ
)
−
1
Φ
T
(
R
s
−
F
x
(
k
i
)
)
(16)
−2ΦT(Rs−Fx(ki))+2(ΦTΦ+ˉR)ΔU=0(ΦTΦ+ˉR)ΔU=ΦT(Rs−Fx(ki))ΔU=(ΦTΦ+ˉR)−1 ΦT(Rs−Fx(ki))
这里我们用了一个假设,也就是 ( Φ T Φ + R ˉ ) (\Phi^\text{T} \Phi +\bar{R}) (ΦTΦ+Rˉ) 的逆一定存在。
换种形式表示最优控制量
Δ
U
∗
\Delta U^*
ΔU∗ 还可以为
Δ
U
∗
=
(
Φ
T
Φ
+
R
ˉ
)
−
1
Φ
T
(
R
s
−
F
x
(
k
i
)
)
=
(
Φ
T
Φ
+
R
ˉ
)
−
1
Φ
T
(
r
(
k
i
)
[
1
1
⋮
1
]
−
F
x
(
k
i
)
)
(17)
ΔU∗=(ΦTΦ+ˉR)−1 ΦT(Rs−Fx(ki))=(ΦTΦ+ˉR)−1 ΦT(r(ki)[11⋮1]−Fx(ki))
给定离散时间状态空间模型如下,
x
m
(
k
+
1
)
=
a
x
m
(
k
)
+
b
u
(
k
)
y
m
(
k
)
=
c
x
m
(
k
)
xm(k+1)=axm(k)+bu(k)ym(k)=cxm(k)
其中
a
=
0.8
,
b
=
0.1
,
c
=
1
a = 0.8, b=0.1, c=1
a=0.8,b=0.1,c=1,求
(1) 求对应的增广模型矩阵,
(2) 计算矩阵
F
,
Φ
F, \Phi
F,Φ 和
Φ
T
Φ
,
Φ
T
F
\Phi^\text{T}\Phi, \Phi^\text{T} F
ΦTΦ,ΦTF,
(3) 假设在
k
i
=
10
k_i = 10
ki=10 时刻有
r
(
k
i
)
=
1
r(k_i) = 1
r(ki)=1,
x
(
k
i
)
=
[
0.1
0.2
]
T
x(k_i) = \left[0.10.2
(1) 增广状态空间方程为
[
Δ
x
m
(
k
+
1
)
y
m
(
k
+
1
)
]
=
[
a
0
c
a
1
]
[
Δ
x
m
(
k
)
y
m
(
k
)
]
+
[
b
c
b
]
Δ
u
(
k
)
y
m
(
k
)
=
[
0
1
]
[
Δ
x
m
(
k
)
y
m
(
k
)
]
[Δxm(k+1)ym(k+1)]=[a0ca1][Δxm(k)ym(k)]+[bcb]Δu(k)ym(k)=[01][Δxm(k)ym(k)]
其中增广矩阵分别为
A
=
[
a
0
c
a
1
]
=
[
0.8
0
0.8
1
]
A=\left[a0ca1
(2) 矩阵
F
F
F 和
Φ
\Phi
Φ 和下,
F
=
[
C
A
C
A
2
C
A
3
C
A
4
C
A
5
C
A
6
C
A
7
C
A
8
C
A
9
C
A
10
]
,
Φ
=
[
C
B
0
0
0
C
A
B
C
B
0
0
C
A
2
B
C
A
B
C
B
0
C
A
3
B
C
A
2
B
C
A
B
C
B
C
A
4
B
C
A
3
B
C
A
2
B
C
A
B
C
A
5
B
C
A
4
B
C
A
3
B
C
A
2
B
C
A
6
B
C
A
5
B
C
A
4
B
C
A
3
B
C
A
7
B
C
A
6
B
C
A
5
B
C
A
4
B
C
A
8
B
C
A
7
B
C
A
6
B
C
A
5
B
C
A
9
B
C
A
8
B
C
A
7
B
C
A
6
B
]
F=\left[CACA2CA3CA4CA5CA6CA7CA8CA9CA10
这里我们预测了
k
i
k_i
ki 时刻之后10个状态变量和未来4个控制变量。矩阵
F
F
F 中的系数可以按如下方式计算
C
A
=
[
s
1
1
]
=
[
a
1
]
C
A
2
=
[
s
2
1
]
=
[
a
2
+
s
1
1
]
C
A
3
=
[
s
3
1
]
=
[
a
3
+
s
2
1
]
⋮
C
A
k
=
[
s
k
1
]
=
[
a
k
+
s
k
−
1
1
]
CA=[s11]=[a1]CA2=[s21]=[a2+s11]CA3=[s31]=[a3+s21]⋮CAk=[sk1]=[ak+sk−11]
矩阵
Φ
\Phi
Φ 中的系数可以按如下方式计算
C
B
=
g
0
=
b
C
A
B
=
g
1
=
a
b
+
g
0
C
A
2
B
=
g
2
=
a
2
b
+
g
1
C
A
3
B
=
g
3
=
a
3
b
+
g
2
⋮
C
A
k
B
=
g
k
=
a
k
b
+
g
k
−
1
CB=g0=bCAB=g1=ab+g0CA2B=g2=a2b+g1CA3B=g3=a3b+g2⋮CAkB=gk=akb+gk−1
将
a
=
0.8
,
b
=
0.1
a=0.8, b=0.1
a=0.8,b=0.1 代入后有
Φ
T
Φ
=
[
1.1541
1.0407
0.9116
0.7726
1.0407
0.9549
0.8475
0.7259
0.9116
0.8475
0.7675
0.6674
0.7726
0.7259
0.6674
0.5943
]
,
Φ
T
F
=
[
9.2325
3.2147
8.3259
2.7684
7.2927
2.3355
6.1811
1.9194
]
ΦTΦ=[1.15411.04070.91160.77261.04070.95490.84750.72590.91160.84750.76750.66740.77260.72590.66740.5943], ΦTF=[9.23253.21478.32592.76847.29272.33556.18111.9194]
(3) 根据之前的运算,我们知道最优控制为
Δ
U
∗
=
(
Φ
T
Φ
+
R
ˉ
)
−
1
Φ
T
(
R
s
−
F
x
(
k
i
)
)
ΔU∗=(ΦTΦ+ˉR)−1 ΦT(Rs−Fx(ki))
当
r
w
=
0
r_w = 0
rw=0 时,有
R
ˉ
=
0
\bar{R} = 0
Rˉ=0,计算得到的
N
u
=
4
N_u = 4
Nu=4 个控制量序列为
Δ
U
∗
=
[
7.2
−
6.4
0
0
]
T
\Delta U^* = \left[7.2−6.400
当
r
w
=
10
r_w = 10
rw=10 时,有
R
ˉ
=
10
I
\bar{R} = 10 I
Rˉ=10I,计算得到的
N
u
=
4
N_u = 4
Nu=4 个控制量序列为
Δ
U
∗
=
[
0.1269
0.1034
0.0829
0.065
]
T
\Delta U^* = \left[0.12690.10340.08290.065
对比两次的控制量,可以看出来第一种情况控制量的变化较大,而第二种则平稳的多。
clear
clc
a = 0.8;
b = 0.1;
c = 1;
N_u = 4;
N_x = 10;
% discrete model
A_d = a;
B_d = b;
C_d = c;
% augmented model
[BRow, BCol] = size(B_d);
[CRow, CCol] = size(C_d);
A = eye(BRow+CRow, BCol+CCol);
A(1:BRow, 1:CCol) = A_d;
A(BRow+1:BRow+CRow, 1:CCol) = C_d * A_d;
B = zeros(BRow+CRow, BCol);
B(1:BRow, 1:BCol) = B_d;
B(BRow+1:BRow+CRow, 1:BCol) = C_d*B_d;
C = zeros(CRow, BRow + CRow);
C(CRow, CCol+1:BRow+CRow) = eye(CRow);
% matrix F
F = zeros(N_x, 2);
for i=1:N_x
F(i,:) = C * A^i;
end
% matrix Phi
Phi = zeros(N_x, N_u);
for i=1:N_x
for j=1:N_u
if i < N_u && i接下来我们用代码将模型绘制出来,并将控制器也一并绘制出来。


clear
clc
a = 0.8;
b = 0.1;
c = 1;
N_x = 10;
N_u = 4;
% discrete model
A_d = a;
B_d = b;
C_d = c;
% augmented model
[BRow, BCol] = size(B_d);
[CRow, CCol] = size(C_d);
A = eye(BRow+CRow, BCol+CCol);
A(1:BRow, 1:CCol) = A_d;
A(BRow+1:BRow+CRow, 1:CCol) = C_d * A_d;
B = zeros(BRow+CRow, BCol);
B(1:BRow, 1:BCol) = B_d;
B(BRow+1:BRow+CRow, 1:BCol) = C_d*B_d;
C = zeros(CRow, BRow + CRow);
C(CRow, CCol+1:BRow+CRow) = eye(CRow);
% matrix F
F = zeros(N_x, 2);
for i=1:N_x
F(i,:) = C * A^i;
end
% matrix Phi
Phi = zeros(N_x, N_u);
for i=1:N_x
for j=1:N_u
if i < N_u && i