MPC模型预测控制及在Matlab中实现函数定义 |
您所在的位置:网站首页 › matlab中function函数 › MPC模型预测控制及在Matlab中实现函数定义 |
基于b站DR_CAN老师的MPC控制视频【MPC模型预测控制器】4_数学建模推导--Matlab代码详解_哔哩哔哩_bilibili的学习分享如下: 一、研究目的在约束条件(物理限制)下达到最优的系统表现。 1.对于单输入单输出(SISO)系统: 2.代价函数Cost Function 其中q,r为调节参数 ①若q>>r,则误差e对于设计系统的影响权重更大 ②若r>>q,则系统设计更看重输入u 3.对于多输入多输出(MIMO)系统: 状态空间: 代价函数: 具体地,例如已知系统 其中,Q,R为调节矩阵, MPC(Model Predictive Control)模型预测控制:通过模型来预测系统在某一未来时间段内的表现来进行优化控制,多用于数位控制,用离散的状态空间表达,即 实现步骤: Step1:估计/测量读取当前k时刻的系统状态 Step2:基于 代价函数: 其中, Step3:实施一步 下一次从t=k+1时重复Step1到3,重新预测 即每一轮的预测都是预测区间和控制区间整体右移一个单位,整个过程是向右滚动的, 称为滚动优化控制(Receding Horizon Control),系统对控制器的计算能力要求高。 三、MPC最优化建模(对于模型求解的原理是基于二次规划(Quadratic Programming)模型的求解,通过调用Matlab、Python等二次规划函数求解,下面的代码用到Matlab的quadprog函数) 1.如何建立二次规划模型 已知系统模型:X(k+1) = AX(k) + BU(k),输出Y=X,参考目标R=0 其中,X(k+1) 为k+1时刻的状态变量,X(k) 为k时刻的状态变量,U(k)为k时刻的输入变量。 在k时刻: ①设u(k+i | k)表示在k时刻预测的第k+i时刻的输入值,在预测区间N内,有 同理, ②误差E=Y-R=X-0=X 代价方程 即 ③初始条件(k时刻) 预测的k+1时刻 预测的k+2时刻 预测的k+N时刻 综上, 简化为 在t=k时刻的代价矩阵可表述为 将式(1)代入(2)得 其中, 令 则 对于系统x(k+1) = Ax(k) + Bu(k),系统的维度为:x(k):n×1 ; A:n×n ; B:n×p ; u(k):p×1,运算过程中各矩阵的维度有: 在Matlab中定义函数: function [M,C,Q_bar,R_bar,G,E,H,U_k] = MPC_Zero_Ref(A,B,N,x_k,Q,R,F) %%%%%%%%%%%建立一个以0为参考目标的MPC求解函数 %%%%%%%%%%%其中,状态矩阵A,输入矩阵B系统维度N,初始条件x_k,权重矩阵Q,R及终端误差矩阵F为输入 %%%%%%%%%%%输出中U_k为所求控制器,其余为简化过程中引入的中间变量 n=size(A,1); %A是n×n矩阵,求n p=size(B,2); %B是n×p矩阵,求p M=[eye(n);zeros(N*n,n)];%初始化M矩阵,M矩阵是(N+1)n × n的, %它上面是n × n个“I”,这一步先把下半部分写成0 C=zeros((N+1)*n,N*p);%初始化C矩阵,这一步令它有(N+1)n × NP个0 %定义M和C tmp=eye(n);%定义一个n × n的I矩阵 for i=1:N%循环,i从1到N rows = i*n+(1:n);%定义当前行数,从i×n开始,共n行 C(rows,:)=[tmp*B,C(rows-n,1:end-p)];%将C矩阵填满 tmp=A*tmp;%每一次将tmp左乘一次A M(rows,:)=tmp;%将M矩阵写满 end %定义Q_bar S_q=size(Q,1);%找到Q的维度 S_r=size(R,1);%找到R的维度 Q_bar=zeros((N+1)*S_q,(N+1)*S_q);%初始化Q_bar为全0矩阵 for i=0:N Q_bar(i*S_q+1:(i+1)*S_q,i*S_q+1:(i+1)*S_q)=Q;%将Q写到Q_bar的对角线上 end Q_bar(N*S_q+1:(N+1)*S_q,N*S_q+1:(N+1)*S_q)=F;%将F放在最后一个位置 %定义R_bar R_bar=zeros(N*S_r,N*S_r);%初始化R_bar为全0矩阵 for i=0:N-1 R_bar(i*S_r+1:(i+1)*S_r,i*S_r+1:(i+1)*S_r)=R; end %求解 G=M'*Q_bar*M;%G E=C'*Q_bar*M;%E H=C'*Q_bar*C+R_bar;%H %最优化 f=(x_k'*E')';%定义f矩阵 U_k=quadprog(H,f);%用二次规划求解最优化U_k end |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |