• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: dmc  

资源简介

模型预测控制,一个三输入三输出对象的控制算法例子,可以正常运行

资源截图

代码片段和文件信息

clear all;
clc;
s=tf(‘s‘);
m=3;n=3;%m输出,n输入
G=cell(mn);%系统总矩阵输入矩阵的时候,在G里面先第一列用完,再第二列...
G{11}=4.05*exp(-28*s)/(1+50*s);%实际对象,下面的tau值里面的分子也要对应改
G{21}=1.77*exp(-28*s)/(1+60*s);
G{12}=5.39*exp(-21*s)/(1+50*s);
G{22}=5.72*exp(-14*s)/(1+60*s);
G{13}=3.02*exp(-21*s)/(1+50*s);
G{23}=4.09*exp(-28*s)/(1+60*s);
G{31}=3.71*exp(-21*s)/(1+50*s);
G{32}=5.18*exp(-14*s)/(1+60*s);
G{33}=4.78*exp(-21*s)/(1+50*s);
Ts=7;%采样周期
M=1;%控制时域
P=30*ones(n1);%优化时域
%P=zeros(n1);P(1)=20;P(2)=20;P(3)=20;%优化时域简化处理,优化时域取一样的值,也可以分开取不同的值
N=50;%模型长度
alpha=0.6*ones(m1);%误差校正系数,简化处理取一样的值,也可以取不同的值
%alpha=zeros(m1);alpha(1)=0.6;alpha(2)=0.6;alpha(3)=0.6;%误差校正参数
tau=zeros(mn);%相对于采样时间的滞后时间参数
tau(11)=28/Ts;
tau(21)=28/Ts;
tau(12)=21/Ts;
tau(22)=14/Ts;
tau(13)=21/Ts;
tau(23)=28/Ts;
tau(31)=21/Ts;
tau(32)=14/Ts;
tau(33)=21/Ts;
L=200;%仿真步长
aef=0*ones(m1);%参考轨迹的柔化系数,DMC取参考轨迹为恒值c,所以取为0,也可以取别的值
%aef=zeros(m1);aef(1)=0;aef(2)=0;aef(3)=0;%参考轨迹的柔化系数
c=zeros(m1);%设定值
c(1)=-1;c(2)=1;c(3)=1;
plant=cell(mn);
for i=1:m*n
    plant{i}=c2d(G{i}Ts);
end
stepresp=cell(mn);
for i=1:m*n
    stepresp{i}=step(plant{i}[Ts:Ts:Ts*N]);
end
a=cell(mn);
for i=1:m*n
    a{i}=stepresp{i}(1:end);
end
num=cell(mn);den=cell(mn);
for i=1:m*n
    num{i}=plant{i}.num{1};
    den{i}=plant{i}.den{1};
end
nn=zeros(mn);
nd=zeros(mn);
for i=1:m*n
    nn(i)=length(num{i});
    nd(i)=length(den{i});
end
AA=cell(mn);
for i=1:m*n
    AA{i}(:1)=a{i}(1:P);
end
for l=1:m*n
    for i=2:P
        for j=2:M
            if i>=j
               AA{l}(ij)=AA{l}(i-1j-1);
            end
        end
    end
end
for i=1:m
    Aa{i1}=cat(2AA{i:});
end
    A=cat(1Aa{1:m});
AA0=cell(mn);
for i=1:m*n
    AA0{i}=a{i}(1:N);
end
for i=1:m
    Aa0{i1}=cat(2AA0{i:});
end
    A0=cat(1Aa0{1:m});
QQ=cell(m1);
for i=1:m
    QQ{i}=diag(ones(P1)0);
end
Q=blkdiag

评论

共有 条评论