多输入多输出非线性对象的模型预测控制—Matlab实现
本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。
一、非线性对象的线性化
运行该示例需要同时安装 Simulink 和 Simulink Control Design。
% 检查是否同时安装了 Simulink 和 Simulink Control Design
if ~mpcchecktoolboxinstalled('simulink')disp('运行此示例需要 Simulink(R)')return
end
if ~mpcchecktoolboxinstalled('slcontrol')disp('运行此示例需要Simulink Control Design(R)')return
end
1、打开非线性 Simulink 模型
open('mpc_nonlinmodel')

2、使用 Simulink 控制设计工具箱中的线性命令,在默认操作条件下(传递函数块的初始状态均为零)对对象进行线性化:
plant = linearize('mpc_nonlinmodel');
l i n e a r i z e \color{red}{linearize} linearize 函数的作用是对Simulink模型或子系统进行线性近似,以状态空间模型的形式返回。
3、输入输出变量名称分配
plant.InputName = {'Mass Flow';'Heat Flow';'Pressure'};
plant.OutputName = {'Temperature';'Level'};
plant.InputUnit = {'kg/s' 'J/s' 'Pa'};
plant.OutputUnit = {'K' 'm'};
注意:由于没有定义任何可测量或不可测量的干扰,也没有定义任何不可测量的输出,因此在根据该模型创建 MPC 控制器时,默认情况下所有的模型输入都被假定为可操作变量,所有的模型输出都被假定为可测量输出。
二、设计模型预测控制器
1、创建控制器对象,其采样周期、预测和控制范围分别为 0.2 秒、5 步和 2 次移动;
mpcobj = mpc(plant,0.2,5,2);
2、设置操作变量的约束
mpcobj.MV = struct('Min',{-3;-2;-2},'Max',{3;2;2},'RateMin',{-1000;-1000;-1000});
3、设置操作变量和输出信号的权重
mpcobj.Weights = struct('MV',[0 0 0],'MVRate',[.1 .1 .1],'OV',[1 1]);
4、查看 mpcobj 属性
mpcobj==>
MPC object (created on 30-May-2024 15:35:11):
---------------------------------------------
Sampling time: 0.2 (seconds)
Prediction Horizon: 5
Control Horizon: 2Plant Model: --------------3 manipulated variable(s) -->| 5 states || |--> 2 measured output(s)0 measured disturbance(s) -->| 3 inputs || |--> 0 unmeasured output(s)0 unmeasured disturbance(s) -->| 2 outputs |--------------
Disturbance and Noise Models:Output disturbance model: default (type "getoutdist(mpcobj)" for details)Measurement noise model: default (unity gain after scaling)Weights:ManipulatedVariables: [0 0 0]ManipulatedVariablesRate: [0.1000 0.1000 0.1000]OutputVariables: [1 1]ECR: 100000State Estimation: Default Kalman Filter (type "getEstimator(mpcobj)" for details)Constraints:-3 <= Mass Flow (kg/s) <= 3, -1000 <= Mass Flow/rate (kg/s) <= Inf, Temperature (K) is unconstrained-2 <= Heat Flow (J/s) <= 2, -1000 <= Heat Flow/rate (J/s) <= Inf, Level (m) is unconstrained-2 <= Pressure (Pa) <= 2, -1000 <= Pressure/rate (Pa) <= Inf
三、使用 Simulink 进行闭环仿真
1、打开闭环仿真模型
mdl1 = 'mpc_nonlinear';
open_system(mdl1)

2、闭环仿真
sim(mdl1)-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property is empty. Assuming white noise on each measured output.
3、运行结果如下图所示:
Input:

Output:

尽管存在非线性,但几秒钟后,两个输出都能很好地跟踪其参考值,同时,正如预期的那样,被操纵的变量保持在预设的硬约束内。
四、修改MPC设计跟踪斜坡信号
为了既能跟踪斜坡,又能补偿非线性,可将两个输出端上的干扰模型定义为三重积分器(如果没有非线性,则使用双积分器即可)。
1、通过 tf 函数构造一个外部扰动模型outdistmodel:
2、通过 setoutdist 函数将上面构造的不可观测外部扰动传递函数 outdistmodel 添加到 MPC 的 model 中:
outdistmodel = tf({1 0; 0 1}, {[1 0 0 0], 1; 1, [1 0 0 0]});
setoutdist(mpcobj,'model',outdistmodel);
3、打开Simulink中的闭环仿真模型 mpc_nonlinear_setoutdist,它与上面的 mpc_nonlinear 闭环 Simulink 仿真模型相同,唯一不同的是参考信号,其参考信号的第一个由阶跃变为3秒以内以0.2斜率上升的斜坡信号。

4、闭环仿真12s
sim(mdl2, 12)
5、仿真结果如下图所示:
Input:

Output:

相关文章:
多输入多输出非线性对象的模型预测控制—Matlab实现
本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…...
多项分布模拟及 Seaborn 可视化教程
多项分布 简介 多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布。与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及…...
学计算机,我错了吗?
今天,我的一位朋友告诉我,终于找到一家小公司入职,年前 1 月辞职,本想休息一段时间,没成想,休息到 6 月份,现在程序员真的越来越难找工作了。 肯定有人在想,现在这种行情࿰…...
学习小心意——简单的循坏语句
for循坏 基本语法格式 for 变量 in 序列:代码块 示例代码如下 for i in range(10):print(i)#输出结果:0 1 2 3 4 5 6 7 8 9 简单案例代码如下 利用for语句遍历序列 # 遍历字符串打印每个字母 for letter in "python":print(letter)# 遍历列表并打印每个元素 a …...
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C 类方法 类方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型: 类内定义方法: 直接在类定义内部声明和定义方法。类外定义方法: 在类定义内部声明方法,并在…...
pytorch+YOLOv8-1
1.工具开发 2.idea配置pytorch环境 默认安装新版本torch pip install torch 3.pytorch验证 4. print(torch.cuda.is_available()) 输出结果为 False 说明我只能用cpu...
JavaScript 基础 - 对象
对象 对象是一种无序的数据集合,可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名:属性值…...
代码随想录第23天|回溯part3 组合与分割
39.组合总和 class Solution { public:vector<vector<int>> res;vector<int> path;void backTracking(vector<int>& candidates,int target,int sum,int n,int step){if(n > 150) return;if(sum > target) return;if(sum target){res.push_…...
nginx和proxy_protocol协议
目录 1. 引言2. HTTP server的配置3. Stream server的配置3.1 作为proxy_protocol的前端服务器3.2 作为proxy_protocol的后端服务器1. 引言 proxy_protocol 是haproxy开发的一种用于在代理服务器和后端服务器之间传递客户端连接信息的协议。使用 proxy_protocol 的主要优势是能…...
【pytorch】数据转换/增强后保存
数据转换 from PIL import Image from pathlib import Path import matplotlib.pyplot as plt import numpy as npimport torch import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = tight # orig_im...
超越Devin!姚班带队,他们创大模型编程新世界纪录
超越Devin!SWEBench排行榜上迎来了新玩家—— StarShip CodeGen Agent,姚班带队初创公司OpenCSG出品,以23.67%的成绩获得全球第二名的成绩。 同时创造了非GPT-4o基模的最高纪录(SOTA)。 我们都知道,SWEBe…...
江苏大信环境科技有限公司:环保领域的开拓者与引领者
2009 年,江苏大信环境科技有限公司在宜兴环保科技工业园成立。自创立之始,该公司便笃定坚守“诚信为本、以质量求生存、以创新谋发展”这一经营理念,全力以赴为客户构建专业的工业有机废气治理整体解决方案,进而成为国家高新技术企…...
关于 Bean 容器的注入方式,99 % 的人都答不全!
引言:在使用 Spring 框架开发应用程序时,依赖注入是一个至关重要的概念。而对于 Bean 容器的注入方式,虽然我们可能都有一定的了解,但实际上很多人在被问及这个问题时可能并不能完整地回答。本文将深入探讨 Spring 中 Bean 容器的…...
Spring的@Async注解及其用途
Spring 的 Async 注解是 Spring Framework 4.2 版本引入的功能,它用于支持异步方法执行。当一个方法标注了 Async,Spring 会在一个单独的线程中调用该方法,从而不会阻塞主线程的执行。 Async 注解的用途: 提高性能:通…...
JS(DOM、事件)
DOM 概念:Document Object Model,文档对象模型。将标记语言的各个组成部分封装为对应的对象: Document:整个文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象 JavaScript通过DOM,就能够对HTML进行操作: 改变 HTML 元素的内…...
学习小心意——python的构造方法和析构方法
构造方法和析构方法分别用于初始化对象的属性和释放类占有的资源 构造方法_init_() 语法格式如下: class 类名:def __init__(self, 参数1, 参数2, ...):# 初始化代码self.属性1 参数1self.属性2 参数2# ... 示例代码如下 class Student:def __init__(self):s…...
GB/T 23995-2009 室内装饰装修用溶剂型醇酸木器涂料检测
溶剂型醇酸木器涂料是指以醇酸树脂为主要成膜物,通过氧化干燥成膜的溶剂型木器涂料适用于室内木制品表面的保护及装饰。 GB/T 23995-2009室内装饰装修用溶剂型醇酸木器涂料检测项目: 测试指标 测试方法 在容器中状态 GB/T 23995 细度 GB/T 6753.1 …...
Maven 中的 classifier 属性用过没?
最近训练营有小伙伴问到松哥一个关于 Maven 依赖的问题,涉及到 classifier 属性,随机问了几个小伙伴,都说工作中没用到过,因此简单整篇文章和小伙伴们分享下。 Maven 大家日常开发应该都有使用,Maven 中有一个比较好玩…...
Linux网络编程:传输层协议|UDP|TCP
知识引入: 端口号: 当应用层获得一个传输过来的报文时,这时数据包需要知道,自己应该送往哪一个应用层的服务,这时就引入了“端口号”,通过区分同一台主机不同应用程序的端口号,来保证数据传输…...
MongoDB CRUD操作:内嵌文档查询
MongoDB内嵌文档的查询 文章目录 MongoDB内嵌文档的查询使用点号.查询内嵌文档嵌套字段的相等匹配使用查询操作符进行匹配指定AND条件 嵌套文档的匹配使用 MongoDB Atlas 查询内嵌文档导航至集合指定查询过滤文档点击应用 可以使用下面几种方法查询MongoDB中的嵌入文档…...
RK3568实战:用QEMU在x86电脑上模拟构建和调试ARM64 Ubuntu 22.04根文件系统
RK3568开发实战:基于QEMU的ARM64根文件系统高效构建与调试指南 引言 在嵌入式Linux开发领域,RK3568作为一款性能优异的四核Cortex-A55处理器,正被广泛应用于各类智能硬件设备。传统开发流程中,开发者往往需要在物理开发板上反复刷…...
效率提升300%:Qwen3.5-9B在OpenClaw中的批量文件处理技巧
效率提升300%:Qwen3.5-9B在OpenClaw中的批量文件处理技巧 1. 为什么需要批量文件处理自动化 作为一个经常需要处理大量文档的技术写作者,我过去每周要花至少8小时在重复的文件整理上——重命名几百个截图、合并多个Markdown文档、批量转换PDF为可编辑格…...
基于智能软开关的配电网优化调度分析(含故障恢复能力与分布式电源影响)
基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配电网故障恢复能力,包括恢复负荷、失电节点以及节点电压等,程序选择标准ieee33节点系统作为分析对象,采用yalmip编程,运行稳定。 这…...
SEO优化师如何制定优化策略和计划_SEO优化师如何分析网站流量和排名数据
SEO优化师如何制定优化策略和计划_SEO优化师如何分析网站流量和排名数据 前言 SEO(搜索引擎优化)在现代数字营销中扮演着至关重要的角色。对于一个SEO优化师来说,制定有效的优化策略和计划是关键,分析网站流量和排名数据能帮助他…...
电力电子新手必看:SPWM单极性倍频调制在Simulink中的实现与优化
电力电子新手必看:SPWM单极性倍频调制在Simulink中的实现与优化 在电力电子领域,正弦脉宽调制(SPWM)技术因其简单高效而广受欢迎。对于初学者而言,单极性倍频调制作为SPWM的一种进阶实现方式,能够显著提升输…...
微前端状态管理的真相:Module Federation + 跨应用通信实战
本周大前端要闻Compose Multiplatform v1.11.10-alpha01:进一步完善跨平台 UI 状态同步能力,ViewModel 共享机制改进KotlinConf’26 演讲阵容公布:多场 Session 聚焦 Kotlin 多平台架构与状态管理,值得关注Retrofit 3.0.0 正式发布…...
OAK-D-S2/FFC系列深度校准实战:从原理到提升精度的几个关键技巧
OAK-D-S2/FFC系列深度校准实战:从原理到提升精度的几个关键技巧 深度相机校准是计算机视觉领域的一项基础但至关重要的技术。对于OAK-D-S2和FFC系列这样的高性能设备,校准质量直接决定了深度图的精度和可靠性。本文将带您深入理解校准背后的数学原理&am…...
AI率80%+送去降AI工具处理,3款结果对比
这篇文章记录的是一个横向测试:找了几篇AI率都在80%以上的论文,分别送去嘎嘎降AI、比话降AI、率零处理,然后统一在知网检测,看最终结果。 测试设计 测试论文(4篇): 编号专业字数知网AI率&…...
如何用DS4Windows让PS手柄在PC游戏世界畅通无阻
如何用DS4Windows让PS手柄在PC游戏世界畅通无阻 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 你是否曾遇到这样的尴尬场景:购买了心仪的PS4或PS5手柄,想在PC上畅…...
深度学习中的 Transformer 架构:从原理到实践
深度学习中的 Transformer 架构:从原理到实践 1. 背景介绍 Transformer 架构是深度学习领域的重大突破,它彻底改变了自然语言处理(NLP)的格局,并逐渐扩展到计算机视觉、语音识别等领域。Transformer 由 Google 团队在 …...
