1. 状态空间MPC与输入增量的核心概念
在控制工程领域,模型预测控制(MPC)因其处理多变量约束问题的能力而广受青睐。不同于传统的PID控制,MPC通过在线求解优化问题来生成控制序列,特别适合具有状态和输入约束的复杂系统。而状态空间模型作为现代控制理论的基础框架,为MPC提供了清晰的系统动态描述方式。
输入增量(Δu)的引入是MPC实现中的一个重要技巧。通过将控制输入表示为上一时刻输入与当前增量的和(u_k = u_{k-1} + Δu_k),我们可以将优化问题的决策变量从绝对输入值转换为输入变化量。这种处理带来三个显著优势:
- 数学上更容易处理稳态误差问题,因为增量形式天然包含积分作用
- 优化问题的约束条件可以更直观地表达执行器的速率限制
- 在存在模型失配时表现出更好的鲁棒性
在Matlab中实现这类控制器时,通常需要构建增广状态空间模型。假设原始系统模型为:
code复制x_{k+1} = A x_k + B u_k
y_k = C x_k + D u_k
引入输入增量后,新的状态向量变为z_k = [x_k; u_{k-1}],对应的增广系统矩阵为:
code复制A_aug = [A B; 0 I], B_aug = [B; I], C_aug = [C D]
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Matlab实现中的关键步骤分解
2.1 增广状态空间建模
在Matlab中构建增广系统时,需要特别注意矩阵维度的匹配。以下是一个典型实现代码片段:
matlab复制% 原始系统矩阵
A = [1 0.1; 0 0.9];
B = [0.1; 0.2];
C = [1 0];
D = 0;
% 构建增广系统
[nx, nu] = size(B);
A_aug = [A B; zeros(nu,nx) eye(nu)];
B_aug = [B; eye(nu)];
C_aug = [C zeros(size(C,1),nu)];
sys_aug = ss(A_aug, B_aug, C_aug, D, 0.1); % 0.1秒采样时间
注意:当系统存在直接馈通项(D≠0)时,增广模型的输出方程需要特殊处理,否则会导致代数环问题。
2.2 预测方程构建
MPC的核心是通过预测模型计算未来状态轨迹。对于增广系统,预测方程的构建需要考虑预测时域(Np)和控制时域(Nc)的选择。实践中,Nc通常小于Np以实现"移动 horizon"效果。
预测方程的矩阵形式为:
code复制Y = S * z_k + T * ΔU
其中S和T矩阵可以通过以下方式计算:
matlab复制function [S, T] = build_prediction_matrices(A_aug, B_aug, C_aug, Np, Nc)
[ny, nz] = size(C_aug);
S = zeros(ny*Np, nz);
T = zeros(ny*Np, nu*Nc);
% 构建S矩阵
for i = 1:Np
S((i-1)*ny+1:i*ny,:) = C_aug * A_aug^i;
end
% 构建T矩阵
for i = 1:Np
for j = 1:min(i,Nc)
T((i-1)*ny+1:i*ny, (j-1)*nu+1:j*nu) = C_aug * A_aug^(i-j) * B_aug;
