📄 indirectmain.m
字号:
%indirect adaptive/ neural network/ e.g 1
x=[0,0,0];T=0.01;r=0.005;
y=[x(1),x(3)];yy=y;
w1=0.01*rand(12,3);T1=0.01*rands(1,12);r1=rand(1,12);
w2=0.01*rand(12,3);T2=0.1*rands(1,12);r2=rand(1,12);
st1=[T1,w1(:,1)',w1(:,2)',w1(:,3)',r1];
st2=[T2,w2(:,1)',w2(:,2)',w2(:,3)',r2];
%global u x e de
t=0;tt=[t];u=[0,0];uu=[0,0];i=0;
ym=[2*sin(0.5*t+0.5),sin(t)];yym=ym;
ddym1=-0.5*sin(0.5*t+0.5);dym2=cos(t);
e1=[0,0];
for t=0.01:0.01:20
i=i+1
e=ym-y;
de=(e-e1)/T;
ua1=-(2.5*e(1)+2.5*de(1))/r;
ua2=-0.5*e(2)/r;
[o11,o12]=kexi2(w1,T1,r1,x);
[o21,o22]=kexi2(w2,T2,r2,x);
u(1)=(-o11+ddym1+2*e(1)+3*de(1)-ua1)/o12;
u(2)=(-o21+dym2+10*e(2)-ua2)/o22;
if (abs(u(1))>3)
u(1)=sign(u(1))*3;
end
if (abs(u(2))>3)
u(2)=sign(u(2))*3;
end
tspan=[t-0.01,t];
options=odeset('reltol',1e-3,'abstol',[1e-6,1e-6,1e-6]);
[t1,xx]=ode45('seq',tspan,x,options,u);
m=size(xx,1);
tspan;
x=xx(m,:);
if (abs(x(1))>5)
x(1)=sign(x(1))*5;
end
if (abs(x(2))>5)
x(2)=sign(x(2))*5;
end
if (abs(x(3))>5)
x(3)=sign(x(3))*5;
end
x1=xx(m-1,:);
if (abs(x1(1))>5)
x1(1)=sign(x1(1))*5;
end
if (abs(x1(2))>5)
x1(2)=sign(x1(2))*5;
end
if (abs(x1(3))>5)
x1(3)=sign(x1(3))*5;
end
y=[x(1),x(3)]
y1=[x1(1),x1(3)];
if (i==100)
uu=[uu;u];
yy=[yy;y];
tt=[tt;t1(m)];
i=0;
end
T=t1(m)-t1(m-1);
ym=[2*sin(0.5*t1(m)+0.5),sin(t1(m))];
ym1=[2*sin(0.5*t1(m-1)+0.5),sin(t1(m-1))];
e1=ym1-y1;
ddym1=-0.5*sin(0.5*t1(m)+0.5);dym2=cos(t1(m));
option1=odeset('reltol',1e-3,'abstol',1e-6*ones(1,12*5));
[t2,stt1]=ode45('adapp',tspan,st1,option1,x,e,de,u);
[t3,stt2]=ode45('adappp',tspan,st2,option1,x,e,de,u);
m=size(stt1,1);
st1=stt1(m,:);
m1=size(stt2,1);
st2=stt2(m1,:);
T1=st1(1:12),w1=[st1(13:24)',st1(25:36)',st1(37:48)'];r1=st1(49:60);
T2=st2(1:12),w2=[st2(13:24)',st2(25:36)',st2(37:48)'];r2=st2(49:60);
end
tt;
uu;
yy
figure(1);
plot(tt,yy(:,1),'r',tt,yy(:,2),'b--')
for (t=1:1:20)
yym=[yym;2*sin(0.5*t+0.5),sin(t)];
end
yyym=yym-yy;
figure(2);
plot(tt,yyym(:,1),'r',tt,yyym(:,2),'b--')
figure(3);
plot(tt,uu)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -