📄 amac.m
字号:
N=20; %响应时间长度
P=10; %预测长度
r=0;
R=[r r r r r r r r r r];
R1=diag(R);
L=50; %仿真步数
Z1=0; %Yt初值
U=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
%U[1 N+(N一1)]
%U[t一N一(N一l),t-1]
h=[0.2 0.1593 0.1280 0.0948 0.0703 0.0520 0.0386 0.0286 0.0212 0.0157 0.0116 0.0086 0.0064 0.0047 0.0035 0.0026 0.0019 0.0014 0.0011 0.0008];
Yo=zeros(1,L); %ofrdrwaing
Uo=zeros(1,L);
T=zeros(1,L);
for i=1:L
T(i)=1.5*(i-1);
end
Ya=[0 0.3935 0.6321 0.7769 0.8647 0.9179 0.9502 0.9698 0.9817 0.9889 0.9933 0.9959 0.9975 0.9985 0.9991 0.9994 0.9997 0.9998 0.9999 0.9999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
Ya1=[0 0.3935 0.6321 0.7769 0.8647 0.9179 0.9502 0.9698 0.9817 0.9889 0.9933 0.9959 0.9975 0.9985 0.9991 0.9994 0.9997 0.9998 0.9999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
%for drawing
for K=0:(L-1)
Ut1=[U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25) U(24) U(23) U(22) U(21) U(20)];
Yr=[Ya(K+1) Ya(K+2) Ya(K+3) Ya(K+4) Ya(K+5) Ya(K+6) Ya(K+7) Ya(K+8) Ya(K+9) Ya(K+10)];
U1=[0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25) U(24) U(23) U(22) U(21);
0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25) U(24) U(23) U(22);
0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25) U(24) U(23);
0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25) U(24);
0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26) U(25);
0 0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27) U(26);
0 0 0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28) U(27);
0 0 0 0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29) U(28);
0 0 0 0 0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30) U(29);
0 0 0 0 0 0 0 0 0 0 U(39) U(38) U(37) U(36) U(35) U(34) U(33) U(32) U(31) U(30)];
if K==0
h1=h'+Ut1'*(Z1-Ut1*h')/(Ut1*Ut1'+0.001); %更新h 解决初始时刻0/0的问题
else
h1=h'+Ut1'*(Z1-Ut1*h')/(Ut1*Ut1'); %更新h
end
h=h1';
H=[h(1) 0 0 0 0 0 0 0 0 0;
h(2) h(1) 0 0 0 0 0 0 0 0;
h(3) h(2) h(1) 0 0 0 0 0 0 0;
h(4) h(3) h(2) h(1) 0 0 0 0 0 0;
h(5) h(4) h(3) h(2) h(1) 0 0 0 0 0;
h(6) h(5) h(4) h(3) h(2) h(1) 0 0 0 0;
h(7) h(6) h(5) h(4) h(3) h(2) h(1) 0 0 0;
h(8) h(7) h(6) h(5) h(4) h(3) h(2) h(1) 0 0;
h(9) h(8) h(7) h(6) h(5) h(4) h(3) h(2) h(1) 0;
h(10) h(9) h(8) h(7) h(6) h(5) h(4) h(3) h(2) h(1)];
ym=Ut1*h';
h0=[1 1 1 1 1 1 1 1 1 1];
h1=U1*h';
Y1=h1';
h1=(H'*H+R1)\H'*(Yr'-Y1'-(Z1-ym)*h0');
Uf=h1';
%输出U(1f)
Uk=Uf(1);
Uo(K+1)=Uk; %prepare for drawing
Yk=Z1;
Yo(K+1)=Yk; %parepare for drawing
if K<=3
Ykp=0.7408*Yk+0.2592*Uk; %被控对象IO关系
else
Ykp=0.8607*Yk+0.4179*Uk; %参数变化3/(10s+l)
end
Z1=Ykp;
%更新U
for i=2:1:(N+N-1)
U(i-1)=U(i);
end
U(N+N-1)=Uk;
end;
plot(T,Uo,T,Yo,T,Ya1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -