MPC matlab仿真代码框架

摘抄自B站DR_CAN大神,万分感谢传授知识。我仅在此做一下记录,方便日后学习。

首先写一个MPC函数:

function [M,C,Q_bar,R_bar,G,E,H,U_k,u_k]=MPC_Zero_Ref(A,B,Q,R,F,N,x_k)  % N是预测区间
n=size(A,1); % 得到A的行数
p=size(B,2); % 得到B的列数
M=[eye(n);zeros(N*n,n)]; % 初始化M矩阵,上面是n*n的单位矩阵,下面是n列0矩阵
C=zeros((N+1)*n,N*p);  % 初始化C矩阵

% 定义M和C
tmp=eye(n);  %定义一个n*n的单位矩阵
for i=1:N
    rows=i*n+(1:n);  % i=1,n=2的时候,(1:2)就是对第三行、第四行赋值
    C(rows,:)=[tmp*B,C(rows-n, 1:end-p)]; % 将C矩阵填满
    tmp=A*tmp;
    M(rows,:)=tmp ; % 将矩阵M写满
end
% 定义Q_bar和
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
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')';  %定义f矩阵
U_k=quadprog(H,f);
end

然后在命令行输入:

clc;clear;
A=[1,0.1;0,2];
B=[0;0.5];
N=25;
x_k=[5;5];
Q=[1 0;0 1];
R=0.1;
F=[1 0;0 1];
[M,C,Q_bar,R_bar,G,E,H,U_k]=MPC_Zero_Ref(A,B,Q,R,F,N,x_k);  %前面是输出,后面是输入的初始状态量
% M C Q_bar R_bar,G E H是根据MPC推导出来的,主要就是看输出的控制量U_K
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值