广义预测控制 (GPC) 算法实现项目说明
项目介绍
本项目是基于舒迪前教授《预测控制》教材中经典广义预测控制理论开发的数学仿真程序。该算法采用CARIMA(受控自回归积分移动平均)模型作为受控对象的数学描述,其核心优势在于通过在模型中引入集成(积分)环节,能够天然地消除系统静差,并对阶跃形式的扰动具有极强的抑制能力。
程序完整再现了从系统建模、丢番图方程递归求解到滚动优化控制的全过程。它不仅是一个学术研究的仿真工具,也为理解模型预测控制(MPC)中“多步预测、滚动优化、反馈校正”这三大核心思想提供了直观的实践参考。
功能特性
- 模型转换能力:支持将普通的传递函数模型自动转化为包含积分环节的CARIMA模型,增强受控对象的抗扰性。
- 高效方程求解:采用递归迭代算法求解丢番图方程,避免了复杂的矩阵求逆,显著提升了预测矩阵和自由响应项的计算效率。
- 柔性参考轨迹:通过平滑系数调整参考轨迹,使系统在跟踪设定值时能够平滑过渡,减小控制初期的超调与冲击。
- 灵活的超参数配置:用户可自由定义预测长度、控制长度及控制权重,便于研究不同参数对系统动态性能和鲁棒性的影响。
- 全流程仿真与可视化:内置在线控制循环模拟真实工业环境,并提供输出响应、参考轨迹、控制增量及误差曲线的图形化展示。
程序实现逻辑与功能描述
程序的执行过程分为预处理、离线计算和在线仿真三个主要阶段,具体逻辑如下:
- 系统初始化与模型重构
程序首先定义受控对象的 A 和 B 多项式系数。为了实现无静差控制,程序通过卷积运算将原始 A 多项式与差分算子相乘,构造出扩展后的 A_tilde 多项式,从而完成 CARIMA 模型的建立。
- 丢番图方程的递归求解
这是程序的核心数学部分。程序通过一套迭代逻辑计算预测模型中的 E 和 F 矩阵。该过程从步长为1的初始条件开始,利用前一步的计算结果推导当前步的参数,极大地减少了计算量。随后,利用 E 矩阵与 B 多项式进行卷积,推导出反映控制增量对未来输出影响的 G 矩阵。
- 控制矩阵与增益计算
程序根据预测长度和控制长度构造关键的控制矩阵 G_mat。为了降低在线计算的负担,程序在仿真开始前,基于最小二乘原理计算出最优控制增量矩阵的增益向量 K。这一步骤整合了控制权重 lambda,确保了控制律在性能与稳定性之间的平衡。
- 在线循环仿真逻辑
在每个采样时间内,程序执行以下操作:
- 系统模拟:根据差分方程计算当前时刻的实际输出值。
- 参考轨迹生成:基于当前输出和目标设定值,利用平滑系数 alpha 计算未来 P 步的理想跟踪路径。
- 自由响应计算:综合历史输出数据和已知的过去控制增量,计算在假设未来控制增量为零时的系统预测输出。
- 滚动优化求解:利用预先计算的增益向量和当前的误差向量(参考轨迹减去自由响应),计算当前时刻的最优控制增量。
- 控制作用:将控制增量累加至上一时刻的控制量,并将结果作用于受控对象。
- 结果分析与绘图
程序最终输出两张交互式图表。第一张图对比了设定值、参考轨迹与实际输出的随时间变化情况;第二张图展示了控制量的变化特征及跟踪误差的动态演变过程,直观反映了 GPC 算法的控制精度和动态响应速度。
关键算法细节分析
- 卷积运算的应用:程序多次使用卷积函数来处理多项式相乘,如构造 A_tilde 以及求解 Gj,保证了数学表达的严谨性。
- 预测矩阵的构造:G_mat 的构造体现了 GPC 的准则,即只有当前的控制增量对后续有直接贡献,通过对齐列向量实现了对控制长度 M 的严格约束。
- 自由响应项 f 的组合:程序精确区分了输出反馈项(由 F 矩阵决定)和历史控制增量项(由 G 矩阵的余项决定),这是预测控制能够准确预判系统趋势的关键。
- 控制律简化:通过只取增益矩阵的第一行进行计算,程序实现了“滚动优化”的精髓——即每次只计算并应用当前的控制策略。
系统要求与使用方法
- 系统要求:需要安装 MATLAB 环境(建议 R2016b 及以上版本,核心语法兼容性强)。
- 使用方法:
1. 打开 MATLAB 并将工作路径切换至程序所在目录。
2. 直接运行脚本。
3. 根据命令行输出查看当前参数配置。
4. 观察生成的仿真曲线,分析不同预测长度 P 或控制长度 M 对波形平滑度和响应时间的影响。
5. 如需测试不同对象,可手动修改 A 和 B 多项式的各个系数值。