资源简介
模型预测控制,一个三输入三输出对象的控制算法例子,可以正常运行
代码片段和文件信息
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
- 上一篇:直接转矩控制 simuli
nk仿真 - 下一篇:光伏并网得simuli
nk仿真
评论
共有 条评论