MPC(模型预测控制)

本文详细介绍了模型预测控制(MPC)的理论基础,包括单输入单输出、多输入多输出系统及离散模型的代价函数,并提供了MATLAB代码示例,展示了如何使用该算法进行系统控制优化。通过调用`mpc_1`函数,可以计算得到控制器参数和优化的控制序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、理论

1.对于一个单输入单输出的系统来说:
在这里插入图片描述
其误差e_error = |y(t) - u(t)|
设计以下两种积分:
在这里插入图片描述
cost function:
在这里插入图片描述
其中q,r为可调节参数:q>>r看重误差,q<<r看重输入。
2.对于一个多输入多输出的系统
在这里插入图片描述
cost function:
在这里插入图片描述
其中Q、R为调节矩阵
3.对于离散模型
在这里插入图片描述
cost function:
在这里插入图片描述
最后一项为横截误差。

离散状态下进行推导:
在k时刻:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得(1)式:
在这里插入图片描述
在这里插入图片描述
得(2)式
在这里插入图片描述
将(1)带入(2)得:
在这里插入图片描述

二、MATLAB代码

%mpc模型预测控制建议去看B站up主DR_CAN的视频
function [M,C,Q_bar,R_bar,G,E,H,U_k]=mpc_1(A,B,N,x_k,Q,R,F)
%N是第n步预测
n=size(A,1);
p=size(B,2);
M=[eye(n);zeros(N*n,n)];
C=zeros((N+1)*n,N*p);
tmp=eye(n);
for i=1:N
    rows=i*n+(1:n);
    C(rows,:)=[tmp*B,C(rows-n,1:end-p)];
    tmp=A*tmp;
    M(rows,:)=tmp;
end
S_q=size(Q,1);
S_r=size(R,1);
Q_bar=zeros((N+1)*S_q,(N+1)*S_q);
for i=0:N
    Q_bar(i*S_q+1:(i+1)*S_q,i*S_q+1:(i+1)*S_q)=Q;
end
Q_bar(N*S_q+1:(N+1)*S_q,N*S_q+1:(N+1)*S_q)=F;
R_bar=zeros(N*S_r,N*S_r);
for i=0:N-1
     R_bar(i*S_r+1:(i+1)*S_r,i*S_r+1:(i+1)*S_r)=R;
end
G=M'*Q_bar*M;
E=C'*Q_bar*M;
H=C'*Q_bar*C+R_bar;
f=(x_k'*E')';
U_k=quadprog(H,f);
end
%计算演示:
A =

    1.0000    0.1000
         0    2.0000
         
B =

         0
    0.5000
    
N =

     3
     
x_k =

     5
     5
     
Q =

     1     0
     0     1
     
R =

    0.1000
    
 F=Q
 
[M,C,Q_bar,R_bar,G,E,H,U_k]=mpc_1(A,B,N,x_k,Q,R,F)  %调用mpc计算模块,可得以下结果

M =

    1.0000         0
         0    1.0000
    1.0000    0.1000
         0    2.0000
    1.0000    0.3000
         0    4.0000
    1.0000    0.7000
         0    8.0000

C =

         0         0         0
         0         0         0
         0         0         0
    0.5000         0         0
    0.0500         0         0
    1.0000    0.5000         0
    0.1500    0.0500         0
    2.0000    1.0000    0.5000

Q_bar =

     1     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0
     0     0     1     0     0     0     0     0
     0     0     0     1     0     0     0     0
     0     0     0     0     1     0     0     0
     0     0     0     0     0     1     0     0
     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     1

R_bar =

    0.1000         0         0
         0    0.1000         0
         0         0    0.1000

G =

    4.0000    1.1000
    1.1000   85.5900

E =

    0.2000   21.1200
    0.0500   10.0350
         0    4.0000

H =

    5.3750    2.5075    1.0000
    2.5075    1.3525    0.5000
    1.0000    0.5000    0.3500

U_k =

  -18.0330
   -3.7563
   -0.2540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值