• 基于离散、连续、线性和非线性模型进行模型预测(MPC)控制(Matlab代码实现)


     💥💥💞💞欢迎来到本博客❤️❤️💥💥

    🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

    ⛳️座右铭:行百里者,半于九十。

    目录

    💥1 概述

    📚2 运行结果

    🎉3 参考文献

    🌈4 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代码实现

  • 相关阅读:
    【To .NET】C#集合类源码解析
    将GC编程语言引入WebAssembly的新方法
    class的流光效果
    举例详解 TCP/IP 五层(或四层)模型与 OSI七层模型对比 (画图详解 一篇看懂!)
    Bigemap添加自定义地图,第三方地图
    5G网络架构与组网部署01--5G网络架构的演进趋势
    JVM学习笔记(五)内存模型
    requests处理 multipart/form-data 请求以及 boundary值问题
    Python Wordcloud报错:Only supported for TrueType fonts,多种解决方案
    电脑屏幕怎么录制?5 个最佳免费录屏软件
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/127825983