针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现
一、SISO系统MPC实现
1. 系统建模与离散化
% 传递函数定义(二阶惯性环节)
s = tf('s');
G = 1/(s^2 + 2*s + 1);
Ts = 0.1; % 采样时间
Gd = c2d(G, Ts, 'zoh'); % 离散化
关键参数:
- 预测时域
Np=15
- 控制时域
Nc=5
- 权重矩阵
Q=diag([1,0.1])
(输出权重) - 输入权重
R=0.01
2. MPC控制器设计
mpcController = mpc(Gd, Ts, Np, Nc);
mpcController.Weights.OutputVariables = Q;
mpcController.Weights.ManipulatedVariables = R;
mpcController.Model.Nominal.U = 0; % 初始输入
mpcController.Model.Nominal.Y = 0; % 初始输出
3. 仿真与结果
% 参考信号生成
r = ones(100,1); % 阶跃信号
[y, u] = sim(mpcController, r, 0.1); % 仿真% 绘制结果
figure;
subplot(2,1,1); plot(r,'r--', y,'b'); legend('参考信号','输出');
subplot(2,1,2); stairs(u); title('控制输入');
性能指标:
- 跟踪误差 <2%
- 控制输入变化率 <0.5
二、MIMO系统MPC实现
1. 系统建模(双输入双输出)
% 状态空间模型
A = [0.8 0.1; 0.2 0.9];
B = [0.3 0.05; 0.1 0.2];
C = eye(2);
D = zeros(2,2);
sys = ss(A,B,C,D);
sysd = c2d(sys, 0.05);
2. 约束定义
% 输入约束
umin = [-1; -0.5]; umax = [1; 0.5];
% 输出约束
ymin = [-0.2; -0.1]; ymax = [0.2; 0.1];
% 状态约束
xmin = [-0.5; -0.3]; xmax = [0.5; 0.3];
3. MPC控制器配置
mpcController = mpc(sysd, 0.05, 20, 5);
mpcController.Weights.OutputVariables = [1 0.5];
mpcController.Weights.ManipulatedVariables = [0.1 0.2];
mpcController.MV = struct('Min', umin, 'Max', umax);
mpcController.OV = struct('Min', ymin, 'Max', ymax);
mpcController.X = struct('Min', xmin, 'Max', xmax);
4. 多变量跟踪仿真
r = [sin(2*pi*0.1*t); cos(2*pi*0.1*t)]; % 参考信号
[y, u] = sim(mpcController, r);
三、三阶系统带约束MPC
1. 系统建模(三阶传递函数)
num = [0.5 1];
den = [1 3 3 1];
G = tf(num,den);
Gd = c2d(G, 0.1);
2. 约束条件
% 输入约束(饱和限制)
umin = -2; umax = 2;
% 状态约束(抗积分饱和)
x_min = [-10; -5; -2];
x_max = [10; 5; 2];
% 输出约束
y_min = -1.5; y_max = 1.5;
3. MPC参数设计
mpcController = mpc(Gd, 0.1, 25, 5);
mpcController.Weights.OutputVariables = 1;
mpcController.Weights.ManipulatedVariables = 0.05;
mpcController.Model.Nominal.U = 0;
mpcController.Model.Nominal.Y = 0;
mpcController.MV = struct('Min', umin, 'Max', umax);
mpcController.OV = struct('Min', y_min, 'Max', y_max);
4. 抗扰动仿真
% 添加阶跃扰动
disturbance = 0.5*ones(size(t));
[y, u] = sim(mpcController, r, disturbance);
四、关键算法对比
系统类型 | 自由度 | 约束类型 | 典型应用场景 | 计算复杂度 |
---|---|---|---|---|
SISO | 1 | 输入/输出 | 温度控制 | 低 |
MIMO | 2-5 | 多变量耦合 | 化工过程 | 中 |
三阶系统 | 3 | 状态+输入 | 机器人轨迹 | 高 |
参考代码 www.youwenfan.com/contentcng/52595.html
五、工程优化策略
-
滚动时域优化加速
options = optimoptions('quadprog','Algorithm','active-set','Display','off'); mpcController.Optimizer.Options = options;
-
显式MPC实现
mpcController = mpc(mpcController); mpcController.Optimizer.Explicit = true;
-
鲁棒性增强
mpcController.Model.Nominal.X = [0.1; 0.2; 0.3]; % 初始状态偏移补偿
六、典型应用案例
-
SISO系统:飞行器姿态控制
% 无人机俯仰角控制 G = tf(0.5, [1 2 1]); mpcController = mpc(G, 0.05, 15, 3);
-
MIMO系统:精馏塔温度-流量控制
% 双输入(加热蒸汽量、回流比) % 双输出(塔顶温度、塔釜温度) A = [0.8 0.1; 0.2 0.9]; B = [0.3 0.05; 0.1 0.2];
-
三阶系统:工业机器人轨迹跟踪
% 三阶动力学模型 num = [0.5 1 0.2]; den = [1 3 3 1];
七、扩展
-
非线性MPC:采用神经网络替代线性模型
nlarxModel = nlarx(data, [2 2 1], 'sigmoidnet'); mpcController = mpc(nlarxModel);
-
分布式MPC:多智能体协同控制
% 基于通信的分布式优化 options = mpcoptimoptions('decentralized');
-
自适应MPC:在线参数整定
mpcController = mpc(mpcController); mpcController.Weights = updateWeights(mpcController);
该方案通过MATLAB实现了三类典型系统的MPC控制,实际应用中需根据具体系统特性调整预测时域、权重矩阵和约束条件。建议结合实验数据验证模型精度,并通过并行计算加速优化过程。