MPC模型预测控制+matlab代码实现

  • MPC模型预测控制
    • 原理
    • 步骤
  • matlab代码实现
    • 程序
      • 主程序
      • 函数
    • 参数调试

MPC模型预测控制

原理

步骤

matlab代码实现

程序

主程序

clear;
close all;
clc;
%% 第一步,定义状态空间矩阵
% 定义状态矩阵 A, n x n 矩阵
A = [1 0.1; -1 2];
n= size (A,1);
% 定义输入矩阵 B, n x p 矩阵
B = [ 0.2 1; 0.5 2];
p = size(B,2);
% 定义Q矩阵,n x n 矩阵
Q=[100 0;0 1];
% 定义F矩阵,n x n 矩阵
F=[100 0;0 1];
% 定义R矩阵,p x p 矩阵
R=[1 0 ;0 .1];
% 定义step数量k
k_steps=100;
% 定义矩阵 X_K, n x k 矩 阵
X_K = zeros(n,k_steps);
% 初始状态变量值, n x 1 向量
X_K(:,1) =[20;-20];
% 定义输入矩阵 U_K, p x k 矩阵
U_K=zeros(p,k_steps);%% 定义预测区间K
N=5;
% Call MPC_Matrices 函数 求得 E,H矩阵
[E,H]=MPC_Matrices(A,B,Q,R,F,N);
% 计算每一步的状态变量的值
for k = 1 : k_steps
% 求得U_K(:,k)
U_K(:,k) = Prediction(X_K(:,k),E,H,N,p);
% 计算第k+1步时状态变量的值
X_K(:,k+1)=(A*X_K(:,k)+B*U_K(:,k));
end%% 绘制状态变量和输入的变化
subplot(2, 1, 1);
hold;
for i =1 :size (X_K,1)
plot (X_K(i,:));
end
legend("x1","x2")
hold off;
subplot (2, 1, 2);
hold;for i =1 : size (U_K,1)
plot (U_K(i,:));
end
legend("u1","u2") 

函数

function [E , H]=MPC_Matrices(A,B,Q,R,F,N)
n=size(A,1);% A 是 n x n 矩阵, 得到 n
p=size(B,2);% B 是 n x p 矩阵, 得到 p
M=[eye(n);zeros(N*n,n)]; % 初始化 M 矩阵. M 矩阵是 (N+1)n x n的,它上面是 n x n 个 "I", 这一步先把下半部分写成 0
C=zeros((N+1)*n,N*p); % 初始化 C 矩阵, 这一步令它有 (N+1)n x NP 个 0
% 定义M 和 C
tmp=eye(n); %定义一个n x n 的 I 矩阵
% 更新M和C
for i=1:N % 循环,i 从 1到 Nrows =i*n+(1:n); %定义当前行数,从i x n开始,共n行 C(rows,:)=[tmp*B,C(rows-n, 1:end-p)]; %将c矩阵填满tmp= A*tmp; %每一次将tmp左乘一次AM(rows,:)=tmp; %将M矩阵写满
end
% 定义Q_bar和R_bar
Q_bar = kron(eye(N),Q);
Q_bar = blkdiag(Q_bar,F);
R_bar = kron(eye(N),R);
% 计算G, E, H
G=M'*Q_bar*M; % G: n x n
E=C'*Q_bar*M; % E: NP x n
H=C'*Q_bar*C+R_bar; % NP x NP
end
function u_k= Prediction(x_k,E,H,N,p)
U_k = zeros(N*p,1); % NP x 1
U_k = quadprog(H,E*x_k);
u_k = U_k(1:p,1); % 取第一个结果
end

参数调试

A = [1 0.1; -1 2];
B = [ 0.2 1; 0.5 2];
Q=[1 0;0 1];
F=[1 0;0 1];
R=[0.1 0 ;0 0.1];

状态变量和输入的图像绘制:

A = [1 0.1; -1 2];
B = [ 0.2 1; 0.5 2];
Q=[100 0;0 1];
F=[100 0;0 1];
R=[0.1 0 ;0 0.1];

状态变量和输入的图像绘制:
改变Q和F,使系统更重视x1的变化,使x1迅速衰减为0

A = [1 0.1; -1 2];
B = [ 0.2 1; 0.5 2];
Q=[100 0;0 1];
F=[100 0;0 1];
R=[1 0 ;0 0.1];

状态变量和输入的图像绘制:
改变R,使系统u2输入从600减小到400,能耗明显降低

MPC模型预测控制+matlab代码实现+simulink仿真实现相关推荐

  1. 永磁同步电机模型预测控制(PMSM-MPC)Simulink仿真教程

    本篇文章为永磁同步电机模型预测控制(PMSM-MPC)Simulink仿真教程 包含了控制原理和simulink仿真搭建. 详细的描述了模型预测的研究.个人花费了很久的时间整理和完善!希望对大家有用喔 ...

  2. MPC模型预测控制原理和Matlab以及Python代码实现

    MPC模型预测控制原理和代码 一. 介绍模型预测控制(MPC)原理 简要解释一下最优控制最优控制的目标是在一定的约束条件下达到最优的系统表现,那么要让系统达到最优表现,一般是通过定义损失函数J,通过最 ...

  3. MPC模型预测控制学习笔记-2021.10.27

    MPC模型预测控制学习笔记-点击目录就可以跳转 1. 笔者介绍 2. 参考资料 3. MPC分类 4. 数据的标准化与归一化 5. MATLAB-MPC学习笔记 5.1 获取测试信号:gensig( ...

  4. 风电随机性动态经济调度模型(Matlab代码实现)

    目录 0 写在前面 1 引言 1.1 机会约束规划 1.2 基于场景的方法 1.3 模糊模型 2 六种处理风电随机性动态经济调度模型描述 2.1 考虑正负旋转储备约束的确定性模型 2.2 机会约束的随 ...

  5. 基于MPC 模型预测控制的轨迹跟随,横向控制模型,车道保持

    基于MPC 模型预测控制的轨迹跟随,横向控制模型,车道保持,simulink模型 采用二自由度车辆动力学模型,可以自定义车辆参数,自定义目标轨迹,图中为单移线目标轨迹与实际轨迹偏差 ID:485067 ...

  6. 元胞自动机matlab代码 交通流,交通流中的NaSch模型及MATLAB代码元胞自动机

    元胞自动机NaSch模型及其MATLAB代码 作业要求 根据前面的介绍,对NaSch模型编程并进行数值模拟: ●模型参数取值:Lroad=1000,p=0.3,Vmax=5. ●边界条件:周期性边界. ...

  7. 优化切尔诺贝利灾难模型——附matlab代码

    优化切尔诺贝利灾难模型--附matlab代码 切尔诺贝利核电站事故是人类历史上最严重的核事故之一,对环境和人类健康造成了极大的影响.针对这样的事故,科学家们开发了许多模型用于预测和优化应对措施.本文将 ...

  8. MPC模型预测控制(二)-MATLAB代码实现

    update:MPC的QQ群 第一个群已经满500人(贫穷使我充不起鹅厂会员),这是第二个群. 群都满了. https://blog.csdn.net/tingfenghanlei/article/d ...

  9. MPC(模型预测控制)-Simulink仿真

    文章目录 一.为什么使用MPC控制器? 二.什么是MPC控制器? 三.MPC控制器的参数如何设置? 3.1 采样时间 3.2 预测范围.控制范围 3.3 约束条件 3.4 权重 四.自适应增益调度和非 ...

最新文章

  1. LeetCode中等题之根据字符出现频率排序
  2. 常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
  3. 页面生命周期_微信小程序的生命周期学习笔记-应用篇
  4. Visual Studio 2017 15.6版本预览,增加新功能
  5. Docker 命令详解(run篇)
  6. 【高并发】JUC中的Executor框架详解1
  7. 微软发布面向企业区块链网络的Coco Framework
  8. GNUstep 运行gui程序
  9. 汇编语言数据段查找ASCII码并回显
  10. 相机参数设置程序_摄影:相机通用的参数设置,10个方面带你学会使用相机拍照...
  11. geoserver三维_基于geoserver的伪三维地图制作
  12. linux忘记密码怎么办
  13. 保留(私有)地址简介
  14. 银行业务系统数据库设计与实现
  15. 兼容低版本IE浏览器的一些技巧分享
  16. 畅捷通T+Cloud给客户一站式的产品体验
  17. 高质量的外链怎么去挖掘?
  18. Unity动画系统学习
  19. react中使用构建缓存_如何使用React构建Chatbot
  20. python基础 日常总结——字典 (二)

热门文章

  1. python range函数怎么表示无限_Python range() 函数 | 菜鸟教程
  2. python入门学习之range函数
  3. ACM-polya定理
  4. js - find函数胡实现 (ES6语法)
  5. 画西瓜图的html代码,西瓜图片卡通简笔画步骤
  6. vue点击左右箭头左右滑动效果
  7. 街机扫描线Super_正式版_DIY街机怀旧神器_液晶屏秒变CRT显示器_多种扫描效果无限接近CRT屏怀旧DIY神器__不花钱一样体验CRT_模拟街机荧屏CRT_液晶仿CRT足不出户体验CRT扫描效果
  8. Android 监听系统中消息通知事件
  9. ngin进程间的关系
  10. Linux命令:ld