gusucode.com > 一个简单的协同自适应巡航控制的MPC控制器设计源码程序 > genQP.m
%此函数用于将有约束预测控制问题转化为标准QP问题 %输入:A-系统阵,B-控制阵,C-输出阵,YW-输出误差加权阵,UW-输入加权阵, %p-预测时域,m-控制时域 %输出:H-二次项矩阵,f-计算标准型中F的系数阵,c-输出不等式约束的系数阵 function [H,f,YC]=genQP(A,B,C,YW,UW,m,p) %状态加权阵 Q=C'*YW*C; szb=size(B); szp=size(B,1); ba=B; base=zeros(m*szb); % %无穷预测时域时求解终端状态加权阵P if p==Inf P=dlyap(A',C'*YW'*YW*C); else P=zeros(szp,szp); end %生成下三角阵[B;AB B;...;A^(m-1)B ... B] for i=1:m base(((i-1)*szb(1)+1):i*szb(1),1:i*szb(2))=ba; ba=[A*ba B]; end UWI=UW; C1=C; CI=C; CII=C; Q1=Q; QW=Q1; Y1=YW; YWI=Y1; for i=2:m %生成对角阵diag(UW,...,UW); UWI=[UWI zeros([size(UWI,1) size(UW,2)]);zeros([size(UW,1) size(UWI,2)]) UW]; if i==m Q1=P; Y1=P; C1=eye(size(A)); end %生成对角阵diag(Q,...,Q,P); QW=[QW zeros([size(QW,1) size(Q1,2)]);zeros([size(Q1,1) size(QW,2)]) Q1]; %生成对角阵diag(YW,...,YW,P); YWI=[YWI zeros([size(YWI,1) size(Y1,2)]);zeros([size(Y1,1) size(YWI,2)]) Y1]; %生成对角阵diag(C,...,C); CI=[CI zeros([size(CI,1) size(C,2)]);zeros([size(C,1) size(CI,2)]) C]; %生成对角阵diag(C,...,C,I); CII=[CII zeros([size(CII,1) size(C1,2)]);zeros([size(C1,1) size(CII,2)]) C1]; end %生成二次项矩阵H H=base'*QW*base+UWI; %生成用于计算F的系数阵 f=YWI*(CII*base); %生成用于计算输出不等式约束的系数阵 YC=CI*base;