基于离散、连续、线性和非线性模型进行模型预测(MPC)控制(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
目录
💥1 概述
模型预测控制MPC(Model Predictive Control)是70年代末发展起来的新型计算机控制算法。经过多年的理论研究和应用实践,MPC在算法改进和理论分析方面都有很大发展。它的典型算法有三种:模型算法控制MAC(Model Algorithm Control),动态矩阵控制DMC(Dynamic Matrix Control)和广义预测控制GPC(Generalized Predictive Control) [1.2l。目前,MPC在石油、化工、冶金等多个工业部门都得到了成功的应用。与此同时,不少国外软件公司已经推出了各具特色的MPC商业化应用软件。现在人们已普遍认为MPC是一类最具实用性,有着广泛应用前景的先进控制策略[3]。
模型预测控制 (MPC) 可预测和优化未来时间范围内的时变过程。此控制包接受线性或非线性模型。利用APOPT、IPOPT等大规模非线性规划求解器,解决数据调和、移动视界估计、实时优化、动态仿真、非线性MPC问题[4]。
📚2 运行结果
部分代码:
% define 2 x 2 control matrix in s-domain (continuous)
G11 = 2/((5*s+1)*(2*s+1))*exp(-6*s);
G12 = -1/((4*s+1)*(2*s+1));
G21 = 2/((4*s+1)*(2*s+1))*exp(-4*s);
G22 = 4/((2*s+1)*(s+1)^3)*exp(-3*s);
% overall transfer function
Gc = [G11 G12;...
G21 G22];
% get step response
figure(1)
step(Gc)
% convert to discrete form with 1 second sampling (z-domain)
Gd = c2d(Gc,1);
hold on
step(Gd)
% convert to state space
sys = absorbDelay(ss(Gd));
step(sys)
% extract A, B, C, D matrices in sparse form
[n,m] = size(sys.B);
[p,m] = size(sys.D);
[ai,aj,av] = find(sparse(sys.A));
a = [ai,aj,av]';
[bi,bj,bv] = find(sparse(sys.B));
b = [bi,bj,bv]';
[ci,cj,cv] = find(sparse(sys.C));
c = [ci,cj,cv]';
[di,dj,dv] = find(sparse(sys.D));
d = [di,dj,dv]';
if(size(d,2)==0),
d = [1,1,0]';
end
fid = fopen('lti.apm','w');
fprintf( fid,'\n');
fprintf( fid,'Objects \n');
fprintf( fid,' sys = lti\n');
fprintf( fid,'End Objects \n');
fprintf( fid,'\n');
fprintf( fid,'Connections\n');
fprintf( fid,' u[1:%d] = sys.u[1:%d]\n',m,m);
fprintf( fid,' x[1:%d] = sys.x[1:%d]\n',n,n);
fprintf( fid,' y[1:%d] = sys.y[1:%d]\n',p,p);
fprintf( fid,'End Connections\n');
fprintf( fid,'\n');
fprintf( fid,'Model \n');
fprintf( fid,' Parameters \n');
fprintf( fid,' u[1:%d] = 0\n',m);
fprintf( fid,' End Parameters \n');
fprintf( fid,'\n');
fprintf( fid,' Variables \n');
fprintf( fid,' x[1:%d] = 0\n',n);
fprintf( fid,' y[1:%d] = 0\n',p);
fprintf( fid,' End Variables \n');
fprintf( fid,'\n');
fprintf( fid,' Equations \n');
fprintf( fid,' ! add any additional equations here \n');
fprintf( fid,' End Equations \n');
fprintf( fid,'End Model \n');
fprintf( fid,'\n');
fprintf( fid,'! dimensions\n');
fprintf( fid,'! (nx1) = (nxn)*(nx1) + (nxm)*(mx1)\n');
fprintf( fid,'! (px1) = (pxn)*(nx1) + (pxm)*(mx1)\n');
fprintf( fid,'!\n');
fprintf( fid,'! discrete form\n');
fprintf( fid,'! x[k+1] = A * x[k] + B * u[k]\n');
fprintf( fid,'! y[k] = C * x[k] + D * u[k]\n');
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]万鹏. 基于模型预测控制(MPC)车道保持系统的研究[D].安徽工程大学,2022.DOI:10.27763/d.cnki.gahgc.2022.000005.
[2]哈迪(DHAIF ALLAH HADI). 基于模型预测控制(MPC)的光伏发电智能控制研究[D].华北电力大学(北京),2020.DOI:10.27140/d.cnki.ghbbu.2020.001065.
[3]John Hedengren (2022). Model Predictive Control.
[4]隋丹,冯乐,陈蓓.模型预测控制(MPC)在飞机自动着陆系统中的应用[J].航空计算技术,2003(03):23-26.
🌈4 Matlab代码实现
相关文章
- android 10.0实现通过系统属性控制挂载otg设备功能
- 风电最大化消纳的热电联产机组联合优化控制(Matlab代码实现)
- 基于双层共识控制的直流微电网优化调度(Matlab代码实现)
- 基于复合粒子群优化的模糊神经预测控制的研究(Matlab代码实现)
- 飞行器动力学和控制建模与模拟研究(Matlab代码实现)
- 【库存控制】基于象鼻虫损害优化算法求解库存控制问题(Matlab代码实现)
- 基于强化学习的电动汽车的储能系统优化控制和存储容量优化(Matlab代码实现)
- 【无人机】小型无人机群控制研究(Matlab代码实现)
- 用于自动驾驶汽车轨迹跟踪控制的模型预测控制(Matlab代码实现)
- 基于粒子群优化和行为控制的无人机在最优多跳自组织网络中的部署(Matlab代码实现)
- 基于PID控制的四旋翼飞行器仿真(Matlab代码实现)
- 基于四旋翼无人机的PD控制研究(Matlab代码实现)
- m基于GA遗传算法的高载能负荷响应优化控制模型matlab仿真
- 基于FNN模糊神经网络的控制器解耦控制matlab仿真
- m基于神经网络的飞机垂直尾翼振动主动控制系统matlab仿真,包括系统辨识和在线控制
- 【无人船】基于模型预测控制(MPC)对USV进行自主控制(Matlab代码实现)
- 三维手臂动态matlab仿真,可以灵活控制手指运动
- shell脚本并发控制详解