• 【控制】模型预测控制,公式推导,数值仿真,有程序有图


    1 从连续时间模型到增广模型

    1.1 从连续时间模型到离散模型

    连续时间 (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)

    x˙m(t)ym(t)=Acxm(t)+Bcu(t)=Ccxm(t)
    \tag{1} x˙m(t)ym(t)=Acxm(t)+Bcu(t)=Ccxm(t)(1)

    离散时间 (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)

    xm(k+1)ym(k)=Adxm(k)+Bdu(k)=Cdxm(k)
    \tag{2} xm(k+1)ym(k)=Adxm(k)+Bdu(k)=Cdxm(k)(2)

    在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)

    x˙m(t)ym(t)=030101010xm(t)+113u(t)=[010]xm(t)
    x˙m(t)ym(t)= 030101010 xm(t)+ 113 u(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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    得到的结果如下

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.2 从离散模型到增广模型


    Δ 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(k1)
    Δ u ( k ) = u ( k ) − u ( k − 1 ) \Delta u(k) = u(k) - u(k-1) Δu(k)=u(k)u(k1)
    Δ 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)

    [Δxm(k+1)ym(k+1)]x(k+1)ym(k)=[AdCdAd0I]A[Δxm(k)ym(k)]x(k)+[BdCdBd]BΔu(k)=[0I]A[Δxm(k)ym(k)]x(k)
    \tag{3} x(k+1) [Δxm(k+1)ym(k+1)]ym(k)=A [AdCdAd0I]x(k) [Δxm(k)ym(k)]+B [BdCdBd]Δu(k)=A [0I]x(k) [Δxm(k)ym(k)](3)

    其中 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(k+1)y(k)=Ax(k)+BΔu(k)=Cx(k)
    \tag{4} x(k+1)y(k)=Ax(k)+BΔu(k)=Cx(k)(4)

    其中 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)

    xm(k+1)ym(k)=[1011]xm(k)+[0.51]u(k)=[10]xm(k)
    xm(k+1)ym(k)=[1011]xm(k)+[0.51]u(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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    得到的结果如下

    A =
         1     1     0
         0     1     0
         1     1     1
    
    B =
        0.5000
        1.0000
        0.5000
    
    C =
         0     0     1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    通过上述转换为增广矩阵的过程,我们对增广矩阵式 (4) 中变量 x ( k ) x(k) x(k) 的研究,就等价于对离散时间模型式 (2) 中变量 x m ( k ) x_m(k) xm(k) 的下一时刻与当前时刻差值的研究。

    2 状态预测与优化

    2.1 状态预测

    假设当前时刻为 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+Nu1)(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+mki),,x(ki+Nxxi)(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)+ANx1BΔu(ki)+ANx2BΔu(ki+1)++ANxNuBΔu(ki+Nu1)

    x(ki+1|ki)x(ki+2|ki)x(ki+Nx|ki)=Ax(ki)+BΔu(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)=ANxx(ki)+ANx1BΔu(ki)+ANx2BΔu(ki+1)++ANxNuBΔu(ki+Nu1)
    \tag{7} x(ki+1∣ki)x(ki+2∣ki)x(ki+Nxki)=Ax(ki)+BΔu(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)=ANxx(ki)+ANx1BΔu(ki)+ANx2BΔu(ki+1)++ANxNuBΔu(ki+Nu1)(7)

    得到 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)+CANx1BΔu(ki)+CANx2BΔu(ki+1)++CANxNuBΔu(ki+Nu1)

    y(ki+1|ki)y(ki+2|ki)y(ki+Nx|ki)=CAx(ki)+CBΔu(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)=CANxx(ki)+CANx1BΔu(ki)+CANx2BΔu(ki+1)++CANxNuBΔu(ki+Nu1)
    \tag{8} y(ki+1∣ki)y(ki+2∣ki)y(ki+Nxki)=CAx(ki)+CBΔu(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)=CANxx(ki)+CANx1BΔu(ki)+CANx2BΔu(ki+1)++CANxNuBΔu(ki+Nu1)(8)

    可以看出,所有预测的变量都只与当前观测到的系统状态 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,,Nu1 有关。

    将未来的输出变量序列 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)

    \right]_{N_x \times 1}, ~~~~ \Delta U = \left[Δu(ki)Δu(ki+1)Δu(ki+Nu1)
    \right]_{N_u \times 1} \tag{9} Y= y(ki+1∣ki)y(ki+2∣ki)y(ki+Nxki) Nx×1,    ΔU= Δu(ki)Δu(ki+1)Δu(ki+Nu1) Nu×1(9)

    在单输入单输出 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)]=[CACA2CANx]x(ki)+[CB000CABCB00CA2BCABCB0CANx1BCANx2BCANx3BCANxNuB][Δu(ki)Δu(ki+1)Δu(ki+Nu1)]Y=Fx(ki)+ΦΔU

    \tag{10} y(ki+1∣ki)y(ki+2∣ki)y(ki+Nxki) Y= CACA2CANx x(ki)+ CBCABCA2BCANx1B0CBCABCANx2B00CBCANx3B000CANxNuB Δu(ki)Δu(ki+1)Δu(ki+Nu1) =Fx(ki)+ΦΔU(10)

    2.2 优化

    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[111

    \right]_{N_x \times 1} \tag{11} Rs=r(ki) 111 Nx×1(11)

    定义代价函数为
    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=(RsY)T(RsY)+Δ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,    rw0(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=(RsY)T(RsY)+ΔUTˉRΔU=[(RsFx(ki))ΦΔU]T[(RsFx(ki))ΦΔU]+ΔUTˉRΔU=[(RsFx(ki))TΔUTΦT][(RsFx(ki))ΦΔU]+ΔUTˉRΔU=(RsFx(ki))T(RsFx(ki))(RsFx(ki))TΦΔUΔUTΦT(RsFx(ki))+ΔUTΦTΦΔU+ΔUTˉRΔU=(RsFx(ki))T(RsFx(ki))ΔUTΦT(RsFx(ki))ΔUTΦT(RsFx(ki))+ΔUTΦTΦΔU+ΔUTˉRΔU=(RsFx(ki))T(RsFx(ki))2ΔUTΦT(RsFx(ki))+ΔUT(ΦTΦ+ˉR)ΔU

    \tag{14} J=(RsY)T(RsY)+ΔUTRˉΔU=[(RsFx(ki))ΦΔU]T[(RsFx(ki))ΦΔU]+ΔUTRˉΔU=[(RsFx(ki))TΔUTΦT][(RsFx(ki))ΦΔU]+ΔUTRˉΔU=(RsFx(ki))T(RsFx(ki))(RsFx(ki))TΦΔUΔUTΦT(RsFx(ki))+ΔUTΦTΦΔU+ΔUTRˉΔU=(RsFx(ki))T(RsFx(ki))ΔUTΦT(RsFx(ki))ΔUTΦT(RsFx(ki))+ΔUTΦTΦΔU+ΔUTRˉΔU=(RsFx(ki))T(RsFx(ki))UTΦT(RsFx(ki))+ΔUT(ΦTΦ+Rˉ)ΔU(14)

    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(RsFx(ki))+2(ΦTΦ+ˉR)ΔU

    \tag{15} ΔUJ=2ΦT(RsFx(ki))+2(ΦTΦ+Rˉ)ΔU(15)

    当一阶导数 ∂ J ∂ Δ U = 0 \frac{\partial J}{\partial \Delta U} = 0 ΔUJ=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(RsFx(ki))+2(ΦTΦ+ˉR)ΔU=0(ΦTΦ+ˉR)ΔU=ΦT(RsFx(ki))ΔU=(ΦTΦ+ˉR)1 ΦT(RsFx(ki))

    \tag{16} 2ΦT(RsFx(ki))+2(ΦTΦ+Rˉ)ΔU(ΦTΦ+Rˉ)ΔUΔU=0=ΦT(RsFx(ki))=(ΦTΦ+Rˉ)1 ΦT(RsFx(ki))(16)

    这里我们用了一个假设,也就是 ( Φ 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(RsFx(ki))=(ΦTΦ+ˉR)1 ΦT(r(ki)[111]Fx(ki))

    \tag{17} ΔU=(ΦTΦ+Rˉ)1 ΦT(RsFx(ki))=(ΦTΦ+Rˉ)1 ΦT r(ki) 111 Fx(ki) (17)

    数值例子

    给定离散时间状态空间模型如下,

    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)

    xm(k+1)ym(k)=axm(k)+bu(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

    \right]^\text{T} x(ki)=[0.10.2]T,计算当权重矩阵参数分别 r w = 0 r_w = 0 rw=0 r w = 10 r_w = 10 rw=10 的最优控制解 Δ U ∗ \Delta U^* ΔU,并比较效果。

    (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)]

    [Δxm(k+1)ym(k+1)]ym(k)=[aca01][Δxm(k)ym(k)]+[bcb]Δu(k)=[01][Δxm(k)ym(k)]

    其中增广矩阵分别为 A = [ a 0 c a 1 ] = [ 0.8 0 0.8 1 ] A=\left[a0ca1

    \right]=\left[0.800.81
    \right] A=[aca01]=[0.80.801] B = [ b c b ] = [ 0.1 0.1 ] B=\left[bcb
    \right]=\left[0.10.1
    \right]
    B=[bcb]=[0.10.1]
    C = [ 0 1 ] C=\left[01
    \right]
    C=[01]

    (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

    \right], ~~~~ \Phi=\left[CB000CABCB00CA2BCABCB0CA3BCA2BCABCBCA4BCA3BCA2BCABCA5BCA4BCA3BCA2BCA6BCA5BCA4BCA3BCA7BCA6BCA5BCA4BCA8BCA7BCA6BCA5BCA9BCA8BCA7BCA6B
    \right] F= CACA2CA3CA4CA5CA6CA7CA8CA9CA10 ,    Φ= CBCABCA2BCA3BCA4BCA5BCA6BCA7BCA8BCA9B0CBCABCA2BCA3BCA4BCA5BCA6BCA7BCA8B00CBCABCA2BCA3BCA4BCA5BCA6BCA7B000CBCABCA2BCA3BCA4BCA5BCA6B

    这里我们预测了 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+sk11]

    CACA2CA3CAk=[s11]=[a1]=[s21]=[a2+s11]=[s31]=[a3+s21]=[sk1]=[ak+sk11]

    矩阵 Φ \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+g2CAkB=gk=akb+gk1

    CBCABCA2BCA3BCAkB=g0=b=g1=ab+g0=g2=a2b+g1=g3=a3b+g2=gk=akb+gk1

    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]

    ΦTΦ= 1.15411.04070.91160.77261.04070.95490.84750.72590.91160.84750.76750.66740.77260.72590.66740.5943 ,    ΦTF= 9.23258.32597.29276.18113.21472.76842.33551.9194

    (3) 根据之前的运算,我们知道最优控制为
    Δ U ∗ = ( Φ T Φ + R ˉ ) − 1   Φ T ( R s − F x ( k i ) ) ΔU=(ΦTΦ+ˉR)1 ΦT(RsFx(ki))

    ΔU=(ΦTΦ+Rˉ)1 ΦT(RsFx(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.26.400

    \right]^\text{T} ΔU=[7.26.400]T

    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

    \right]^\text{T} ΔU=[0.12690.10340.08290.065]T

    对比两次的控制量,可以看出来第一种情况控制量的变化较大,而第二种则平稳的多。

    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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    接下来我们用代码将模型绘制出来,并将控制器也一并绘制出来。

    在这里插入图片描述

    在这里插入图片描述

    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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    Ref.

    1. 模型预测控制简介(model predictive control)
    2. 模型预测控制(MPC)解析(一)
    3. 模型预测控制(MPC)解析(二)
  • 相关阅读:
    国资委2022年79号文件关于信创(信息技术创新)领域建设解读
    FFmpeg 解码 H.264 视频出现花屏和马赛克的解决办法
    k8s入门之Deployment(五)
    java-php-python-科大学生党员之家设计计算机毕业设计
    基于瞬时无功功率ip-iq的谐波信号检测Simulink仿真
    NC16422 图书管理员
    线性规划(二)——数学模型样例
    pytest
    单调栈专题
    stable diffusion和midjourney哪个好
  • 原文地址:https://blog.csdn.net/weixin_36815313/article/details/126729394