📄 chengpin.m
字号:
clear all;
close all;
xite=0.6;
alfa=0.1;
%b=3*ones(7,1);
%初始化模糊神经网络
b=[1/4 1/4 1/4 1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4 1/4 1/4 1/4];
a=[-1 -2/3 -1/3 0 1/3 2/3 1;
-1 -2/3 -1/3 0 1/3 2/3 1];
% ww=rands(49,1);
ww=[0.0826 0.8125 -0.6338 0.2308 0.1934 0.5981 -0.0431 -0.2566 -0.6169 0.8522 0.3218 0.1834 0.6043...
-0.5382 0.7930 0.1087 0.5226 -0.0854 0.1507 0.2383 -0.2081 0.1224 -0.4105 -0.0859 0.2713 -0.3654...
0.7343 -0.7793 0.3481 -0.6051 0.0461 -0.8465 0.8109 -0.3018 -0.5443 -0.6846 -0.5047 0.8128 0.7549...
-0.2809 0.9556 -0.4832 -0.9192 -0.4737 -0.0502 -0.3026 -0.6842 0.6309 0.6254];
ww=ww';
n=7;
a_1=a;
a_2=a_1;
b_1=b;
b_2=b_1;
ww_1=ww;
ww_2=ww_1;
%初始化BP辨识网络
xiteb=0.6;
alfab=0.1;
% w2=rands(6,1);
w2=[-0.3925 0.0268 -0.2224 -0.4836 0.8830 0.3280];
w2=w2';
w2_1=w2;w2_2=w2_1;
% w1=rands(2,6);
w1 =[-0.0341 0.3300 0.2554 -0.6446 -0.6677 0.1499;
-0.3338 -0.7361 -0.3694 -0.1387 0.3259 0.6034];
w1_1=w1;w1_2=w1;
% dw1=0*w1;
x=[0,0]';
u_1=0.0;
y_1=0.0;
u_2=0.0;
y_2=0.0;
I=[0,0,0,0,0,0]';
Iout=[0,0,0,0,0,0]';
FI=[0,0,0,0,0,0]';
%初始化输入输出
e=0.5*ones(20,1);
de=0.5*ones(20,1);
% e(1)=0;
% de(1)=0;
k=1;
ts=0.01;
for k=1:1:20
time(k)=k*ts;
e(k)=(1-exp(-10)*e(k))/(1+exp(-10)*e(k));
de(k)=(1-exp(-0.05)*de(k))/(1+exp(-0.05)*de(k));
I=[e(k),de(k)]'; % Layer1:input
% ke=50;kd=30;
% if e(k)>=6
% e(k)=6
% elseif e(k)<=-6
% e(k)=-6;
% end
% if de(k)>=6
% de(k)=6
% elseif de(k)<=-6
% de(k)=-6;
% end
% I=[1.1573 15.7352]
for mm=1:25
O1=I;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:1:2 % Layer2:fuzzation
for j=1:1:7
net2(i,j)=-(O1(i)-a(i,j))^2/b(i,j)^2;
end
end
for i=1:1:2
for j=1:1:7
O2(i,j)=exp(net2(i,j));
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:1:7 % Layer3:fuzzy inference(49 rules)
m1(j)=O2(1,j);
m2(j)=O2(2,j);
end
for i=1:1:7
for j=1:1:7
ff3(i,j)=m1(i)*m2(j);
end
end
O3=[ff3(1,:),ff3(2,:),ff3(3,:),ff3(4,:),ff3(5,:),ff3(6,:),ff3(7,:)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sumf3=sum(O3);
O4=O3*ww/sumf3; % Layer4:output
O4=O4*3;
O44(k)=O4;
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%这里O4作为控制量输入,然后得到系统的输出,用这个输出和输入作为神经网络的输入去训练一个神经网络,
u(k)=O4;
den =[1 -1.9801 0.9802];
num=[0 4.9668e-005 4.9338e-005];
% u_1=0;
% y_1=0;
% u_2=0;
% y_2=0;
y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
x=[u(k),y(k)];
for m=1:50
for j=1:1:6
I(j)=x*w1(:,j);
Iout(j)=1/(1+exp(-I(j)));
end
yn(k)=w2'*Iout; % Output of NNI networks
eb(k)=y(k)-yn(k); % error calculation
w2=w2_1+(xite*eb(k))*Iout+alfa*(w2_1-w2_2);
for j=1:1:6
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;
end
for i=1:1:2
for j=1:1:6
dw1(i,j)=eb(k)*xite*FI(j)*w2(j)*x(i);
end
end
w1=w1_1+dw1+alfa*(w1_1-w1_2);
%%%%%%%%%%%%%%Jacobian%%%%%%%%%%%%%%%%
yu=0;
for j=1:1:6
yu=yu+w2(j)*w1(1,j)*FI(j);
end
dyu(k)=yu;
% dyu(k)=dyu(k)*3;
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
u_2=u_1;
y_2=y_1;
u_1=u(k);
y_1=y(k);
end
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
d_ww=0*ww_1;
for j=1:1:49
d_ww(j)=xite*dyu(k)*e(k)*O3(j)/sumf3;
end
ww=ww_1+d_ww+alfa*(ww_1-ww_2);
aa=0;
d_a=0*a_1;
for j=1:1:7
for l=1:1:7
aa=aa+O2(2,l)*(ww((j-1)*n+l)*sumf3-ww'*O3');
end
d_a(1,j)=xite*e(k)*dyu(k)*2*(O1(1)-a(1,j))*O2(1,j)*aa/(b(1,j)^2*sumf3^2);
end
bb=0;
d_b=0*b_1;
for j=1:1:7
for l=1:1:7
bb=bb+O2(2,l)*(ww((j-1)*n+l)*sumf3-ww'*O3');
end
d_b(1,j)=xite*e(k)*dyu(k)*2*(O1(1)-a(1,j))*O2(1,j)*aa/(b(1,j)^3*sumf3^2);
end
aa=0;
d_a=0*a_1;
for l=1:1:7
for j=1:1:7
aa=aa+O2(1,j)*(ww((l-1)*n+j)*sumf3-ww'*O3');
end
d_a(2,j)=xite*e(k)*dyu(k)*2*(O1(2)-a(2,j))*O2(2,j)*aa/(b(2,j)^2*sumf3^2);
end
bb=0;
d_b=0*b_1;
for l=1:1:7
for j=1:1:7
bb=bb+O2(1,j)*(ww((l-1)*n+j)*sumf3-ww'*O3');
end
d_b(2,j)=xite*e(k)*dyu(k)*2*(O1(2)-a(2,j))*O2(2,j)*aa/(b(2,j)^3*sumf3^2);
end
a=a_1+d_a+alfa*(a_1-a_2);
b=b_1+d_b+alfa*(b_1-b_2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ww_2=ww_1;
ww_1=ww;
a_2=a_1;
a_1=a;
b_2=b_1;
b_1=b;
end
% y(1)=0;
e_1=e(k);
e(k)=1-y(k);
de(k)=(e(k)-e_1)/ts;
end
figure(1);
plot(time,y,'r');
figure(2);
plot(time,O44);
figure(3);
plot(time,e);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -