失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MPC模型预测控制+matlab代码实现+simulink仿真实现

MPC模型预测控制+matlab代码实现+simulink仿真实现

时间:2020-03-21 20:27:15

相关推荐

MPC模型预测控制+matlab代码实现+simulink仿真实现

MPC模型预测控制+matlab代码实现

MPC模型预测控制原理步骤matlab代码实现程序主程序函数参数调试

MPC模型预测控制

原理

步骤

matlab代码实现

程序

主程序

clear;close all;clc;%% 第一步,定义状态空间矩阵% 定义状态矩阵 A, n x n 矩阵A = [1 0.1; -1 2];n= size (A,1);% 定义输入矩阵 B, n x p 矩阵B = [ 0.2 1; 0.5 2];p = size(B,2);% 定义Q矩阵,n x n 矩阵Q=[100 0;0 1];% 定义F矩阵,n x n 矩阵F=[100 0;0 1];% 定义R矩阵,p x p 矩阵R=[1 0 ;0 .1];% 定义step数量kk_steps=100;% 定义矩阵 X_K, n x k 矩 阵X_K = zeros(n,k_steps);% 初始状态变量值, n x 1 向量X_K(:,1) =[20;-20];% 定义输入矩阵 U_K, p x k 矩阵U_K=zeros(p,k_steps);%% 定义预测区间KN=5;% Call MPC_Matrices 函数 求得 E,H矩阵 [E,H]=MPC_Matrices(A,B,Q,R,F,N);% 计算每一步的状态变量的值for k = 1 : k_steps% 求得U_K(:,k)U_K(:,k) = Prediction(X_K(:,k),E,H,N,p);% 计算第k+1步时状态变量的值X_K(:,k+1)=(A*X_K(:,k)+B*U_K(:,k));end%% 绘制状态变量和输入的变化subplot(2, 1, 1);hold;for i =1 :size (X_K,1)plot (X_K(i,:));endlegend("x1","x2")hold off;subplot (2, 1, 2);hold;for i =1 : size (U_K,1)plot (U_K(i,:));endlegend("u1","u2")

函数

function [E , H]=MPC_Matrices(A,B,Q,R,F,N)n=size(A,1);% A 是 n x n 矩阵, 得到 np=size(B,2);% B 是 n x p 矩阵, 得到 pM=[eye(n);zeros(N*n,n)]; % 初始化 M 矩阵. M 矩阵是 (N+1)n x n的,它上面是 n x n 个 "I", 这一步先把下半部分写成 0 C=zeros((N+1)*n,N*p); % 初始化 C 矩阵, 这一步令它有 (N+1)n x NP 个 0% 定义M 和 C tmp=eye(n); %定义一个n x n 的 I 矩阵%更新M和Cfor i=1:N % 循环,i 从 1到 Nrows =i*n+(1:n); %定义当前行数,从i x n开始,共n行 C(rows,:)=[tmp*B,C(rows-n, 1:end-p)]; %将c矩阵填满tmp= A*tmp; %每一次将tmp左乘一次AM(rows,:)=tmp; %将M矩阵写满end% 定义Q_bar和R_barQ_bar = kron(eye(N),Q);Q_bar = blkdiag(Q_bar,F);R_bar = kron(eye(N),R);% 计算G, E, HG=M'*Q_bar*M; % G: n x nE=C'*Q_bar*M; % E: NP x nH=C'*Q_bar*C+R_bar; % NP x NP end

function u_k= Prediction(x_k,E,H,N,p)U_k = zeros(N*p,1); % NP x 1U_k = quadprog(H,E*x_k);u_k = U_k(1:p,1); % 取第一个结果end

参数调试

A = [1 0.1; -1 2];B = [ 0.2 1; 0.5 2];Q=[1 0;0 1];F=[1 0;0 1];R=[0.1 0 ;0 0.1];

状态变量和输入的图像绘制:

A = [1 0.1; -1 2];B = [ 0.2 1; 0.5 2];Q=[100 0;0 1];F=[100 0;0 1];R=[0.1 0 ;0 0.1];

状态变量和输入的图像绘制:

改变Q和F,使系统更重视x1的变化,使x1迅速衰减为0

A = [1 0.1; -1 2];B = [ 0.2 1; 0.5 2];Q=[100 0;0 1];F=[100 0;0 1];R=[1 0 ;0 0.1];

状态变量和输入的图像绘制:

改变R,使系统u2输入从600减小到400,能耗明显降低

如果觉得《MPC模型预测控制+matlab代码实现+simulink仿真实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。