【MPC模型預測控制器】4_完整案例講解 - Octave代碼

%%~~~~~~~~~~MPC_Test.m~~~~~~~~~~
%稍微改了一點,可以簡單實現(xiàn)目標函數(shù)跟蹤
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);
%權(quán)重系數(shù)
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);
%初始狀態(tài)變量值
X_K(:,1) = [20;-20];
%設置目標函數(shù)
X_D = zeros(n,k_steps);
X_D(1,50:end) = 50;
X_D(2,50:end) = 10;
U_K = zeros(p,k_steps);
%定義預測區(qū)間
N = 5;
[E,H] = MPC_Matrices(A,B,Q,R,F,N);
%計算每一步的狀態(tài)變量值
?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
?%繪制狀態(tài)變量和輸入變化
?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;