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

📄 greathome.m

📁 本算法在训练步数、训练时间及其误差精度等方面都优于常规的模糊神经网络
💻 M
字号:





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%本程序为补偿模糊神经网络程序
clear;
clc;

tspan=[0 20];x0=[1.0 1.0];
global kk;kk=0;
[t,x]=ode45('g2',tspan,x0),kk                   %解方程  g2为自编函数名
x1=x(:,1); x2=x(:,2);
siz=size(x);                                    %求输入矩阵x的维数
nu=siz(:,1);                                    %求输入矩阵x的行数
for d=1:1:nu
    y(d,1)=sin(x1(d,:)+x2(d,:));               %求函数y的解
end
rule=25;                                        %定义模糊规则数
uA=zeros(rule,2);
uA1=uA(:,1);
uA2=uA(:,2);
c=zeros(rule,2);
c1=c(:,1);c2=x(:,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)
    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;
            %计算输出隶属函数的中心
            dyb(j,:)=-((f(s,:)-yy)*d(j,:)*z(j,:))/s2;
            %计算输出隶属函数的宽度
            dyd(j,:)=-((f(s,:)-yy)*(b(j,:)-f(s,:))*z(j,:))/2;
            %计算输入隶属函数的中心
            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)
                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*dyb(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,:);
        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 + -