基于Matlab实现ANFIS算法

简介: 基于Matlab实现ANFIS算法

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

阐述了自适应模糊推理系统 ( Adaptive Network-based Fuzzy Inference System,ANFIS)网络 ,提出了水运货运量预测的 ANFIS网络预测模型 .以 MATLAB为工具 ,以 1 985~ 2 0 0 1年我国水运货运量为训练样本 ;2 0 0 2年我国水运货运量为校验样本 ,对网络进行训练后 ,预测了 2 0 0 3~2 0 1 0年我国水运货运量 .估算结果表明 ,同 BP神经网络模型相比 ,此模型具有更高的准确性 .

⛄ 完整代码

clear;close all;

gamma=0.75;%设定惯性因子


eps1=0.005;%设定停止训练的条件参数

m1=8;%设定隶属函数个数

m2=8;


a=-1;b=1;

w0=a+(b-a)*rand(1,m1*m2);%初始化权值阵


for i=1:2

   switch i

       case 1,beta=0.75;%设定学习率

       otherwise,beta=0.25;

   end

   c=[2/7*(0:m1-1)-1;2/7*(0:m2-1)-1];%初始化Cij

   sigma=0.1213*ones(2,m1);%初始化σij

   w=w0;

   mu=zeros(2,m1);%初始化隶属度层

   alpha=zeros(1,m1*m2);%初始化规则层

   alpha_=zeros(1,m1*m2);%初始化归一化层

   

   delta2=zeros(2,m1);%初始化δ2

   dw=zeros(1,m1*m2);%初始化权值变化量

   dc=zeros(2,m1);%初始化c变化量

   dsigma=zeros(2,m1);%初始化σij变化量

   

   %----------------训练过程----------------%

   err=1;%初始化误差

   er=[];

   counter=0;%统计训练步数

   while(err>=eps1)

       Par_E_w=zeros(1,m1*m2);%误差对权值阵的偏导数

       Par_E_c=zeros(2,m1);%误差对c的偏导数

       Par_E_sigma=zeros(2,m1);%误差对σ的偏导数

       E=0;

       for x1=-1:2/19:1

           for x2=-1:2/19:1

               yd=sin(pi*x1)*cos(pi*x2);%期望输出,导师信号

               %正向传播

               mu(1,:)=exp(-(x1-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

               mu(2,:)=exp(-(x2-c(2,:)).^2./sigma(2,:).^2);

               s=zeros(2,m1,m1*m2);%初始化Sij

               for m=1:m1

                   for n=1:m2

                       alpha((m-1)*m2+n)=min(mu(1,m),mu(2,n));%计算规则层(取小运算)

                       if mu(1,m)<=mu(2,n)

                           s(1,m,(m-1)*m2+n)=1;

                       end

                       if mu(1,m)>=mu(2,n)

                           s(2,n,(m-1)*m2+n)=1;

                       end

                   end

               end

               alpha_=alpha/sum(alpha);%计算归一化层

               

               y=alpha_*w.';%计算网络输出

               E=E+1/2*(yd-y)^2;%计算误差

               %反向传播

               delta5=yd-y;

               delta4=delta5*w;

               

               for k=1:m1*m2

                   delta3(k)=delta4(k)*(sum(alpha)-alpha(k))./sum(alpha)^2;

               end

               for m=1:2

                   for n=1:m1

                       delta2(m,n)=0;

                       for l=1:m1*m2

                           delta2(m,n)=delta2(m,n)+delta3(l)*s(m,n,l)*mu(m,n);

                       end

                   end

               end

               

               Par_E_w=Par_E_w-delta5*alpha_;%计算偏导数

               Par_E_c(1,:)=Par_E_c(1,:)-2*delta2(1,:).*(x1-c(1,:))./sigma(1,:).^2;

               Par_E_c(2,:)=Par_E_c(2,:)-2*delta2(2,:).*(x2-c(2,:))./sigma(2,:).^2;

               Par_E_sigma(1,:)=Par_E_sigma(1,:)-2*delta2(1,:).*(x1-c(1,:)).^2./sigma(1,:).^3;

               Par_E_sigma(2,:)=Par_E_sigma(2,:)-2*delta2(2,:).*(x2-c(2,:)).^2./sigma(2,:).^3;

           end

       end

       

       num=20*20;

       Par_E_w=Par_E_w/num;

       Par_E_c=Par_E_c/num;

       Par_E_sigma=Par_E_sigma/num;

       

       dw=-beta*Par_E_w+gamma*dw;

       dc=-beta*Par_E_c+gamma*dc;

       dsigma=-beta*Par_E_sigma+gamma*dsigma;

       

       w=w+dw;

       c=c+dc;

       sigma=sigma+dsigma;

       

       counter=counter+1;

       er(counter)=E/num;

       err=E/num;

       %     if counter>1000

       %         break;

       %     end

   end

   

   %----------------测试过程----------------%

   xx1=-1:2/19:1;

   xx2=-1:2/19:1;

   yd1=zeros(20,20);

   for m=1:20

       for n=1:20

           yd1(m,n)=sin(pi*xx1(m))*cos(pi*xx2(n));%期望输出

           

           mu(1,:)=exp(-(xx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

           mu(2,:)=exp(-(xx2(n)-c(2,:)).^2./sigma(2,:).^2);

           

           for k=1:m1              %计算规则层

               for l=1:m2

                   alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));

               end

           end

           

           alpha_=alpha/sum(alpha);%计算归一化层

           yr(m,n)=alpha_*w.';     %计算网络输出

       end

   end

   errorf1=1/2*(yd1-yr).^2;%计算误差

   

   

   xxx1=-1:2/11:1;

   xxx2=-1:2/11:1;

   yd2=zeros(12,12);

   for m=1:12

       for n=1:12

           yd2(m,n)=sin(pi*xxx1(m))*cos(pi*xxx2(n));%期望输出

           

           mu(1,:)=exp(-(xxx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

           mu(2,:)=exp(-(xxx2(n)-c(2,:)).^2./sigma(2,:).^2);

           

           for k=1:m1              %计算规则层

               for l=1:m2

                   alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));

               end

           end

           

           alpha_=alpha/sum(alpha);%计算归一化层

           yr2(m,n)=alpha_*w.';     %计算网络输出

       end

   end

   errorf2=1/2*(yd1-yr).^2;%计算误差

   

   

   %----------------绘图----------------%

   figure(i);

   sn=sprintf('β=%4.2f,γ=%4.2f',beta,gamma);

   

   X=ones(size(xx2.'))*xx1;

   Y=xx2.'*ones(size(xx1));

   

   subplot(2,2,1);

   surf(X,Y,yd1);

   xlabel('x1');

   ylabel('x2');

   zlabel('期望的输出yd');

   title(sn);

   

   subplot(2,2,3);

   surf(X,Y,yr);

   xlabel('x1');

   ylabel('x2');

   zlabel('实际网络的输出yr');

   title(sn);

   

   subplot(2,2,2);

   plot(er);

   xlabel('训练步数');

   ylabel('误差');

   title(sn);

   

   subplot(2,2,4);

   surf(X,Y,errorf1);

   xlabel('x1');

   ylabel('x2');

   zlabel('误差');

   title(sn);

   

   figure(i+2);

   sn=sprintf('β=%4.2f,γ=%4.2f 泛化能力测试',beta,gamma);

   

   X=ones(size(xxx2.'))*xxx1;

   Y=xxx2.'*ones(size(xxx1));

   subplot(2,1,1);

   surf(X,Y,yd2);

   xlabel('x1');

   ylabel('x2');

   zlabel('期望的输出yd');

   title(sn);

   

   subplot(2,1,2);

   surf(X,Y,yr2);

   xlabel('x1');

   ylabel('x2');

   zlabel('实际网络的输出yr');

   title(sn);

   

   beta

   counter

end

⛄ 运行结果

⛄ 参考文献

[1] 张志红, 韩直, 肖盛燮,等. 基于ANFIS交通流实时预测及在MATLAB中的实现[J]. 重庆交通学院学报, 2007.

[2] 王宇, 刘小健, 董元胜. 基于MATLAB的ANFIS网络在水运货运量预测中的应用[J]. 武汉理工大学学报:交通科学与工程版, 2004, 28(4):3.

[3] 王保峰, 石春和, 王忠强. 一种基于MATLAB的ANFIS自适应消噪设计[J]. 福建电脑, 2006(1):2.

[4] 陈新兵. ANFIS的MATLAB实现与液压成型机模糊温控系统的研究[D]. 湖南大学, 2005.

[5] 申伟, 张元培. 基于MATLAB的自适应神经网络模糊系统(ANFIS)的应用[C]// 制造业自动化与网络化制造学术交流会. 2004.

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
6天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
10天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
13天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
286 9
|
1月前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
22 0
|
1月前
|
算法 搜索推荐
基于遗传优化的协同过滤推荐算法matlab仿真
该内容是关于推荐系统和算法的描述。使用Matlab2022a执行的算法生成了推荐商品ID列表,显示了协同过滤在个性化推荐中的应用。用户兴趣模型通过获取用户信息并建立数学模型来提高推荐性能。程序片段展示了遗传算法(GA)的迭代过程,确定支持度阈值,并基于关联规则生成推荐商品ID。最终结果是推荐的商品ID列表,显示了算法的收敛和支持值。
|
1月前
|
机器学习/深度学习 算法
m基于深度学习的64QAM调制解调系统相位检测和补偿算法matlab仿真
MATLAB 2022a仿真实现了基于深度学习的64QAM相位检测和补偿算法,有效应对通信中相位失真问题。通过DNN进行相位检测和补偿,降低解调错误。核心程序生成随机信号,模拟AWGN信道,比较了有无相位补偿的误码率,结果显示补偿能显著提升性能。
27 8
|
1月前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
这是一个关于使用深度学习进行指纹识别的算法概述。在matlab2022a环境下,通过预处理指纹图像(灰度化、二值化等)并利用卷积神经网络(CNN)提取特征。CNN架构包含卷积、池化、归一化和全连接层。特征向量通过余弦相似度计算匹配,训练时采用triplet loss优化。部分核心代码展示了加载预训练模型进行测试集分类预测并计算准确率的过程。
|
1月前
|
算法
基于Harris角点的室内三维全景图拼接算法matlab仿真
本文介绍了使用Harris角点检测算法构建室内三维全景图的过程。在matlab2022a环境下,通过检测、匹配特征点并进行图像拼接,实现全景图的创建。算法涉及图像梯度计算、协方差矩阵、响应函数及非极大值抑制。示例代码展示了读取图像、调整大小并应用角点检测函数进行图像混合的步骤。最后,通过图像子区显示验证了拼接效果。

热门文章

最新文章