24小时热门版块排行榜    

查看: 3642  |  回复: 0

加菲猫恋上鱼

新虫 (初入文坛)

[求助] ANFIS代码原理求解答

%% Your Solution
clc;close all;clear all;
numPts=51;
x=linspace(-1,1,numPts);
y=0.5*sin(pi*x)+0.3*sin(3*pi*x)+0.1*sin(5*pi*x);
data=[x' y'];
trnData=data(1:2:numPts,;%%训练数据
chkData=data(2:2:numPts,;%%检验数据
%% 绘制训练和检验数据的分布曲线
subplot(2,2,1);plot(trnData(:,1),trnData(:,2),'o',chkData(:,1),chkData(:,2),'x');
legend('训练数据','检验数据','location','northwest');%%添加图例
title('训练数据和检验数据的分布曲线');%%添加图题
xlabel('(1)');%%添加X轴标题

%% 采用genfis1()函数直接由训练数据生成Takagi-Sugeno型模糊推理系统
numMFS=5; mfType='gbellmf';              %输入隶属度函数的个数、类型
fisMat=genfis1(trnData,numMFS,mfType);       %初始模糊推理系统
subplot(2,2,2);[x1,mf]=plotmf(fisMat,'input',1);
plot(x1,mf);title('系统训练前的隶属度函数');xlabel('(2)');

%% 根据给定的训练数据,利用函数anfis()训练自适应神经模糊系统
epochs=40;                      %训练次数为40
trnOpt=[epochs NaN NaN NaN NaN];
disOpt=[ ];
[Fis, error, stepsize, chkFis, chkEr]=anfis(trnData,fisMat,trnOpt,disOpt,chkData);

%% 绘制模糊推理系统由函数anfis()训练后的输入变量的隶属度函数曲线
subplot(2,2,3);
[x1,mf]=plotmf(Fis,'input',1);
plot(x1,mf);
title('系统训练后的隶属度函数');
xlabel('(3)');

%% 计算训练后神经模糊系统的输出与训练数据的均方根误差trnRMSE
trnOut1=evalfis(trnData(:,1),Fis);        %训练后神经模糊系统输出
trnOut2=evalfis(trnData(:,1),chkFis);
trnRMSE1=norm(trnOut1-trnData(:,2))/sqrt(length(trnOut1));
trnRMSE2=norm(trnOut2-trnData(:,2))/sqrt(length(trnOut2));

%% 计算和绘制神经模糊推理系统的输出曲线
anfis_y1=evalfis(x,Fis);
anfis_y2=evalfis(x,chkFis);
subplot(2,2,4);plot(x,y,'-',x,anfis_y1,'x',x,anfis_y2,'o');
title('函数输出和ANFIS系统输出');xlabel('(4)');
legend('原函数的输出','ANFIS-1的输出','ANFIS-2的输出','location','northwest')
writefis(Fis,'ex6-3');
——————————————————
以上是matlab中ANFIS的例子代码,有几个地方没有看懂,希望大神们给予解答;
首先是
trnOut1=evalfis(trnData(:,1),Fis);        %训练后神经模糊系统输出
trnOut2=evalfis(trnData(:,1),chkFis);
为什么这里trnOut1和trnOut2的输入数据都是trnData(:,1),,,,而trnOut2的输入数据不是chkData(:,1)。

第二个问题就是为啥ANFIS最后要有两个输出呢,分别代表的是什么呢。
求助大神们,很着急!!!谢谢
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 加菲猫恋上鱼 的主题更新
信息提示
请填处理意见