📄 fuzzynenulnet.asv
字号:
function out=FuzzyNeural(t,x1,x2,y)
%该代码实现了一中具有补偿的模糊神经网络结构,通过对一个函数的方阵,可以看出,该结构相应快速,输出稳定
%先在matlab命令窗口内执行以下代码
%//
%tspan=[0 20];x0=[1 1];
%global kk;kk=0;
%[t,x]=ode45('cb',tspan,x0);
%siz=size(x);nu=siz(:,1);
% x1=x(:,1);x2=x(:,2);
%y=Fuzzyfun(nu,x1,x2);
%其中 function y=Fuzzyfun(nu,X1,X2)
%for d=1:1:nu
% y(d,1)=sin(X1(d,:)+X2(d,:));
%end
%//
nu=105;
rule=25;
uA=zeros(rule,2);
uA1=uA(:,1);
uA2=uA(:,2);
c=zeros(rule,2);
c1=c(:,1);c2=c(:,2);number=0;
for i=1:1:rule %初始化输入函数的中心和宽度 ,属
c1(i,1)=0.5;c2(i,1)=0.5;
d(i,:)=0.5;
g(i,1)=0.1;
h(i,1)=0.1;
m(i,1)=(g(i,:)^2)/(g(i,1)^2+h(i,1)^2);
q(i,:)=1-m(i,:)+m(i,:)/2;
a1(i,1)=0.5+0.5*ceil(i/5);
a2(i,1)=0.5+0.25*rem(i,5);
end
n=0.95;
ww=zeros(rule,1);mkik=zeros(rule,1);b=zeros(rule,1);
xspan1=[0.5,0.75,1.25,1.75,2.25,2.5];
xspan2=[0.4,0.625,0.875,1.125,1.375,1.5];
for s=1:1:nu
x11=x1(s,:);x22=x2(s,:);yy=y(s,:);k=0;
for i1=1:1:5
for i2=1:1:5
k=k+1;
if(x11>=xspan1(i1) & x11 <=xspan1(i1+1) & x22>=xspan2(i2)&x22<=xspan2(i2+1))
ww(k,1)=ww(k,1)+1;
mkik(k,1)=yy^s;
b(k,:)=b(k,:)+mkik(k,1);
end
end
end
end
for i=1:1:rule
if (ww(i,1)==0)
b(i,:)=0.5;
else
b(i,:)=b(i,:)/ww(i,1);
end
end
e=ones(1,nu);eee=1;
while(eee>=0.005) & number<=10
eeh=0;
for s=1:1:nu
x11=x1(s,:);x22=x2(s,:);yy=y(s,:);
s1=0;s2=0;
for i=1:1:rule
uA1(i,:)=exp(-((x11-a1(i,:))/c1(i,:))^2);
uA2(i,:)=exp(-((x22-a2(i,:))/c2(i,:)^2));
z(i,:)=(uA1(i,:)*uA2(i,:))^q(i,:);
s1=s1+b(i,:)*d(i,:)*z(i,:);
s2=s2+d(i,:)*z(i,:);
end
f(s,:)=s1/s2;
e(1,s)=((f(s,:)-yy)^2)/2;
eeh=eeh+e(1,s);
for j=1:1:rule
WA=f(s,:);WB=yy;WC=d(j,:);WD=z(j,:);WE=b(j,:);WF1=a1(j,:);WF2=a2(j,:);WG=c1(j,:);WG=c2(j,:);
dyb(j,:)=-((f(s,:)-yy)*d(j,:)*z(j,:))/s2;
dyd(j,:)=-((f(s,:)-yy)*(b(j,:)-f(s,:))*z(j,:))/s2;
%
dya1(j,:)=-(2*(f(s,:)-yy)*(b(j,:)-f(s,:))*(x11-a1(j,:))*q(j,:)*d(j,:)*z(j,:))/((c1(j,:)^2)*s2);
dya2(j,:)=-(2*(f(s,:)-yy)*(b(j,:)-f(s,:))*(x22-a2(j,:))*q(j,:)*d(j,:)*z(j,:))/((c2(j,:)^2)*s2);
% 计算输入函数的的宽度
dyc1(j,:)=-(2*(f(s,:)-yy)*(b(j,:)-f(s,:))*((x11-a1(j,:))^2)*q(j,:)*d(j,:)*z(j,:))/((c1(j,:)^3)*s2);
dyc2(j,:)=-(2*(f(s,:)-yy)*(b(j,:)-f(s,:))*((x22-a2(j,:))^2)*q(j,:)*d(j,:)*z(j,:))/((c2(j,:)^3)*s2);
if (uA1(j,:)*uA2(j,:))==0
else
tt(j,:)=-((f(s,:)-yy)*(b(j,:)-f(s,:))*d(j,:)*z(j,:)*(log(uA1(j,:)*uA2(j,:))))/(2*s2);
g(j,:)=g(j,:)-(2*n*g(j,:)*(h(j,:)^2)*tt(j,:)/(g(j,:)^2+h(j,:)^2)^2);
h(j,:)=h(j,:)+(2*n*h(j,:)*(g(j,:)^2)*tt(j,:)/(g(j,:)^2+h(j,:)^2)^2);
m(j,:)=(g(j,:)^2)/(g(j,:)^2+h(j,:)^2);
q(j,:)=1-m(j,:)+m(j,:)/2;
end
%调整输入,输出
b(j,:)=b(j,:)+n*dyb(j,:);
d(j,:)=d(j,:)+n*dyd(j,:);
a1(j,:)=a1(j,:)+n*dya1(j,:);
a2(j,:)=a2(j,:)+n*dya2(j,:);
c1(j,:)=c1(j,:)+n*dyc1(j,:);
c2(j,:)=c2(j,:)+n*dyc2(j,:);
WC=d(j,:);WE=b(j,:);WF1=a1(j,:);WF2=a2(j,:);WG=c1(j,:);WG=c2(j,:);
end
end
eee=eeh;
number=number+1;
num(number,:)=number;
eeee(number,:)=eee;
end
figure(1)
plot(t,y,'r',t,f,'b')
figure(2)
plot(num,eeee)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -