⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amac.m

📁 基于输出跟随的模型参考自适应控制程序
💻 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 + -