资源简介
多入多出非线性预测控制,可拿来做研究和学习。
代码片段和文件信息
clear all
load wentaishuju.mat;
load ARX.mat;
load BPmoxing.mat;
%-----------参数设定------------------%
nu=2; %系统的输入维数
ny=2;
P=5;
M=3;
c=0.5;
d=0;
P>d;
(P-d)>=M; %所给出的初始值一定要满足的条件
miu=0.4; % miu是调节模型参数的遗忘因子在0~1范围内调节
a=0.9;
I=eye(ny);
dus=[0.04;0.04]; %用来求解增益Kc和Kn的输入量的小的变化量
x0=[1;1;1;1;1;1];
s1=[40 40 40 40 40 40 40 40 40 40];
s2=[10 10 10 10 10 10];
Q=diag(s1);
R=diag(s2);
%H=[0.1*I;0.1*I;0.1*I;0.1*I;0.1*I];% 暂定为0.1*I
%H1=ones(51);
%H2=zeros(51);
H=[I;I;I;I;I];
%H=[H1 H2;H2 H1]; %修改了H后 与原文不同
%-----------参考轨迹------------------%
for i=1:3;
y1sp(i)=0;
end
for i=4:100;
y1sp(i)=2;
end
for i=101:200;
y1sp(i)=2;
end
for i=201:250;
y1sp(i)=3;
end
for i=251:300;
y1sp(i)=3;
end
for i=301:400;
y1sp(i)=2;
end
for i=1:20;
y2sp(i)=0;
end
for i=21:150;
y2sp(i)=3;
end
for i=151:250;
y2sp(i)=3;
end
for i=251:320;
y2sp(i)=2;
end
for i=321:400;
y2sp(i)=3;
end
ysp=[y1sp;y2sp]; %两输出设定值组合矩阵
for i=1:ny;
%Vr(ik)=vr(k+i);
C1(i1)=c;
%C1(i1)=1-c^i;
end
C=diag(C1);
%-----------初始模型的参数Kc----------------%
%{
for i=1:NO; %
if (yr(1)>=ys(i))&&(yr(1)<=ys(i+1));
ysg=ys(i+1);
ysl=ys(i);
break
end
end
Kc1=(ysg-ysl)/dumin;
%theta(:1)=[a11;a12;b1*Kc1;b2*Kc1]; %Kc1是us(1)对应的动态增益
for i=1:NO;
if (yr(2)>=ys(i))&&(yr(2)<=ys(i+1));
ysg=ys(i+1);
ysl=ys(i);
break
end
end
Kc2=(ysg-ysl)/dumin;
%theta(:2)=[a11;a12;b1*Kc2;b2*Kc2]; %Kc2是us(2)对应的动态增益
I=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
P1=(a^2)*I;
%}
%---------------预测循环开始-------------%
for i=1:2;
yc(1:2i)=0.0001;
%v(i)=0.0001;
%u(i)=0.0001;
%x(i)=0.0001;
end
y(:1)=[0;0];
u(:1)=[1;0];
y(:2)=[0;0];
y(:3)=[0;0];
u(:2)=[1;0];
du(:1)=[0;0];
du(:2)=[0;0];
step=300;
for k=2:step;
%{
u11=u(1k-1);
u12=u(2k-1);
[tx1]=ode45(‘myssFun‘[0 500][40 0.17]);%初始化状态变量
[hl]=size(x1);
x1(h1)=abs(x1(h1));
x1(h2)=abs(x1(h2));
y1(k)=x1(h1); % 单输出数据
y2(k)=x1(h2);
y(:k)=[y1(k);y2(k)]; % 混合输出数据的对应矩阵
uz=u(1k-1);
u(1k-1)=u(2k-1);
u(2k-1)=uz;
%}
y(:k)=sim(network1u(:k-1));
dy(:k)=y(:k)-y(:k-1);
%Yr(:k)=C*y(:k)+C1*ysp(:k+d);
yr(:k)=y(:k); %第k步的参考轨迹是第k步的实际输出值
for i=1:P;
yr(:k+i)=C*yr(:k+i-1)+(I-C)*ysp(:k);
[hl]=size(yr(:k+i));
Yr((i*h-h+1):i*hk)=yr(:k+i); %Yr是一个(ny*P)*1的列向量
end
%for i=2:NO-1;
% if (y(k)>=ys(i))&&(y(k)<=ys(i+1));
% ysg=ys(i+1);
% ysl=ys(i);
% break
% end
%end
%usc=YU(i2);
% Kc=(ysg-ysl)/dumin; %求得滚动变化的Kc
% for i=2:NO-1;
% if (yr(k+1)>=ys(i))&&(yr(k+1)<=ys(i+1));
% ysg=ys(i+1);
% ysl=ys(i);
% break
% end
% end
%usn=YU(i2);
% Kn=(ysg-ysl)/dumin; %求得滚动变化的Kn
%----------------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 148266 2010-08-26 14:59 BPmoxing.mat
文件 84013 2013-12-24 15:57 wentaishuju.mat
文件 15520 2010-12-01 11:38 zuhemoxingcontrol.m
文件 448 2010-11-06 14:59 ARX.mat
评论
共有 条评论