【MPC模型预测控制器】4_完整案例讲解 - Octave代码

%%~~~~~~~~~~MPC_Test.m~~~~~~~~~~
%稍微改了一点,可以简单实现目标函数跟踪
clc
clear
close all
A = [1 0.1; -1 2];
n = size(A,1);
B = [0.2 1; 0.5 2];
p = size(B,2);
%权重系数
Q = [1 0; 0 1];
F = [1 0; 0 1];
R = [0.1 0; 0 0.1];
k_steps = 100;
X_K = zeros(n,k_steps);
%初始状态变量值
X_K(:,1) = [20;-20];
%设置目标函数
X_D = zeros(n,k_steps);
X_D(1,50:end) = 50;
X_D(2,50:end) = 10;
U_K = zeros(p,k_steps);
%定义预测区间
N = 5;
[E,H] = MPC_Matrices(A,B,Q,R,F,N);
%计算每一步的状态变量值
for k = 1 : k_steps
U_K(:,k) = Prediction(X_K(:,k)-X_D(:,k),E,H,N,p);
X_K(:,k+1) = A*(X_K(:,k)-X_D(:,k)) + B*U_K(:,k) + X_D(:,k);
end
%绘制状态变量和输入变化
subplot (2,1,1);
hold;
for i = 1 : size(X_K,1)
plot(X_K(i,:));
plot(X_D(i,:));
end
legend("x1","x2","xd1","xd2");
hold off;
subplot(2,1,2);
hold;
for i = 1 : size(U_K,1)
plot(U_K(i,:));
end
legend("u1","u2");
ldg = legend;