[已答复] Matlab进行ANFIS自适应逆控制,存在以下问题,请大侠解决

[复制链接]
hrc1985 发表于 2009-6-18 10:59:48
function [sys,x0,str,ts]=anfis1(t,x,u,flag)
switch flag,
case 0
   [sys,x0,str,ts] = mdlInitializeSizes; % 初始化
case 3
   sys = mdlOutputs(t,x,u); % 输出量的计算
case { 1, 2, 4, 9 }
   sys = []; % 未使用的flag值
otherwise
   error(['Unhandled flag = ',num2str(flag)]); % 处理错误
end;
%==============================================================
% 当flag为0时进行整个系统的初始化
%==============================================================
function [sys,x0,str,ts] = mdlInitializeSizes
% 首先调用simsizes函数得出系统规模参数sizes, 并根据离散系统的实际
% 情况设置sizes变量
sizes = simsizes;
sizes.NumContStates = 0;  % 无连续状态
sizes.NumDiscStates = 0;  % 无离散状态
sizes.NumOutputs = 1;     % 输出个数为1
sizes.NumInputs = 1;      % 输入个数为1
sizes.DirFeedthrough = 0; % 输入不直接在输出中反映出来
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = []; % 设置初始状态为零状态
str = []; % 将str变量设置为空字符串
ts = [-1 0]; % 采样周期: [period, offset] 继承输入信号的采样周期
%==============================================================
% 在主函数flag=3时,计算系统的输出变量
%==============================================================
function sys = mdlOutputs(t,x,u)
y=[0.0954623671806463;0.203418044251633;0.311308240977009;0.419136146929360;0.527170554162090;0.635061100028415;0.743000369662319;0.850887526462108;0.958748872456580;1.06685201107993;1.17463947386396;1.28262305743789;1.39048016272000;1.49841567686784;1.60637691434336;1.71423984556958;1.82226733637246;1.92995963505459;2.03799730821113;2.14589901429406;2.25386294974147;2.36172007908063;2.46967687849509;2.57757287428641;2.68544885770832;2.79341600956121;2.90423281881043;3.00921409565065;3.11717942153469;3.22507820541130;3.33285549867247;3.44092993444291;3.54881969756787;3.65675788125951;3.76465856935472;3.87259438260131;3.98050123954155;4.08838511467471;4.19634439086487;4.30418437474188;4.41218500943870;4.52007817830859;4.62806110395946;4.73590466956834;4.84384842388016;4.95176769133162;5.05967577044945;5.16766263598170;5.27550905692863;5.38351017154047;5.49131478431058;5.59926980899736;5.70717086109760;5.81508644145649;5.92301477899453;6.03091414737771;6.13885863239217;6.24667895663201;6.35470287336972;6.46259686708835;6.57051998842769;6.67848232833031;6.78635252665329;6.89434200602581;7.00217157100325;7.11011187050152;7.21802143891433;7.32590777364961;7.43385913695441;7.54171603424742;7.64971806992021;7.75759706275648;7.86553528211614;7.97344688565083;8.08126843855897;8.18928360041871;8.29707765505082;8.40517555607498;8.51302797318466;8.62095028271157;8.72891879720305;8.83671673762446;8.94470567424336;9.05252067145246;9.16067556764545;9.26841415443233;9.37639179036292;9.48427940214002;9.59219750370701;9.70012100919219;9.80799181477877;9.91596116324167;10.0237937412968;10.1318268246607;10.2397025581181;10.3476361678547;10.4555396814938;10.5634627118011;10.6714251189015;10.7792808953124];
z=[0.100000000000000;0.200000000000000;0.300000000000000;0.400000000000000;0.500000000000000;0.600000000000000;0.700000000000000;0.800000000000000;0.900000000000000;1;1.10000000000000;1.20000000000000;1.30000000000000;1.40000000000000;1.50000000000000;1.60000000000000;1.70000000000000;1.80000000000000;1.90000000000000;2;2.10000000000000;2.20000000000000;2.30000000000000;2.40000000000000;2.50000000000000;2.60000000000000;2.70000000000000;2.80000000000000;2.90000000000000;3;3.10000000000000;3.20000000000000;3.30000000000000;3.40000000000000;3.50000000000000;3.60000000000000;3.70000000000000;3.80000000000000;3.90000000000000;4;4.10000000000000;4.20000000000000;4.30000000000000;4.40000000000000;4.50000000000000;4.60000000000000;4.70000000000000;4.80000000000000;4.90000000000000;5;5.10000000000000;5.20000000000000;5.30000000000000;5.40000000000000;5.50000000000000;5.60000000000000;5.70000000000000;5.80000000000000;5.90000000000000;6;6.10000000000000;6.20000000000000;6.30000000000000;6.40000000000000;6.50000000000000;6.60000000000000;6.70000000000000;6.80000000000000;6.90000000000000;7;7.10000000000000;7.20000000000000;7.30000000000000;7.40000000000000;7.50000000000000;7.60000000000000;7.70000000000000;7.80000000000000;7.90000000000000;8;8.10000000000000;8.20000000000000;8.30000000000000;8.40000000000000;8.50000000000000;8.60000000000000;8.70000000000000;8.80000000000000;8.90000000000000;9;9.10000000000000;9.20000000000000;9.30000000000000;9.40000000000000;9.50000000000000;9.60000000000000;9.70000000000000;9.80000000000000;9.90000000000000;10];
trndata=[y z];
nummfs=3;
mftype='gaussmf';
epoch_n=100;
in_fismat=genfis1(trndata,nummfs,mftype);
out_fismat=anfis(trndata,in_fismat,epoch_n);
sys=evalfis(u',out_fismat);
1.jpg
2.jpg

谢谢大家提供宝贵意见!

[ 本帖最后由 mooni 于 2009-6-18 11:07 编辑 ]

6 条回复


hrc1985 发表于 2009-6-18 18:19:21
这个问题有哪位高人帮忙解决下,不胜感激!眼泪哗哗的

hrc1985 发表于 2009-6-22 14:52:17
这个关于ANFIS的东西没人懂吗,指导一下!

hrc1985 发表于 2009-6-22 14:55:25
function [sys,x0,str,ts]=anfis1(t,x,u,flag)
switch flag,
case 0
   [sys,x0,str,ts] = mdlInitializeSizes; % 初始化
case 2
   sys = mdlUpdates(t,x,u);
case 3
   sys = mdlOutputs(t,x,u); % 输出量的计算
case { 1, 4, 9 }
   sys = []; % 未使用的flag值
otherwise
   error(['Unhandled flag = ',num2str(flag)]); % 处理错误
end;
%==============================================================
% 当flag为0时进行整个系统的初始化
%==============================================================
function [sys,x0,str,ts] = mdlInitializeSizes
% 首先调用simsizes函数得出系统规模参数sizes, 并根据离散系统的实际
% 情况设置sizes变量
sizes = simsizes;
sizes.NumContStates = 0;  % 无连续状态
sizes.NumDiscStates = 1;  % 无离散状态
sizes.NumOutputs = 1;     % 输出个数为1
sizes.NumInputs = 1;      % 输入个数为1
sizes.DirFeedthrough = 0; % 输入不直接在输出中反映出来
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0]; % 设置初始状态为零状态
str = []; % 将str变量设置为空字符串
ts = [-1 0]; % 采样周期: [period, offset] 继承输入信号的采样周期
function sys = mdlUpdates(t,x,u);
sys(1,1)=fst2(x,u);
%==============================================================
% 在主函数flag=3时,计算系统的输出变量
%==============================================================
function sys = mdlOutputs(t,x,u)
sys=x;
function f =fst2(x,u)
y=[0.0954623671806463;0.203418044251633;0.311308240977009;0.419136146929360;0.527170554162090;0.635061100028415;0.743000369662319;0.850887526462108;0.958748872456580;1.06685201107993;1.17463947386396;1.28262305743789;1.39048016272000;1.49841567686784;1.60637691434336;1.71423984556958;1.82226733637246;1.92995963505459;2.03799730821113;2.14589901429406;2.25386294974147;2.36172007908063;2.46967687849509;2.57757287428641;2.68544885770832;2.79341600956121;2.90423281881043;3.00921409565065;3.11717942153469;3.22507820541130;3.33285549867247;3.44092993444291;3.54881969756787;3.65675788125951;3.76465856935472;3.87259438260131;3.98050123954155;4.08838511467471;4.19634439086487;4.30418437474188;4.41218500943870;4.52007817830859;4.62806110395946;4.73590466956834;4.84384842388016;4.95176769133162;5.05967577044945;5.16766263598170;5.27550905692863;5.38351017154047;5.49131478431058;5.59926980899736;5.70717086109760;5.81508644145649;5.92301477899453;6.03091414737771;6.13885863239217;6.24667895663201;6.35470287336972;6.46259686708835;6.57051998842769;6.67848232833031;6.78635252665329;6.89434200602581;7.00217157100325;7.11011187050152;7.21802143891433;7.32590777364961;7.43385913695441;7.54171603424742;7.64971806992021;7.75759706275648;7.86553528211614;7.97344688565083;8.08126843855897;8.18928360041871;8.29707765505082;8.40517555607498;8.51302797318466;8.62095028271157;8.72891879720305;8.83671673762446;8.94470567424336;9.05252067145246;9.16067556764545;9.26841415443233;9.37639179036292;9.48427940214002;9.59219750370701;9.70012100919219;9.80799181477877;9.91596116324167;10.0237937412968;10.1318268246607;10.2397025581181;10.3476361678547;10.4555396814938;10.5634627118011;10.6714251189015;10.7792808953124];
z=[0.100000000000000;0.200000000000000;0.300000000000000;0.400000000000000;0.500000000000000;0.600000000000000;0.700000000000000;0.800000000000000;0.900000000000000;1;1.10000000000000;1.20000000000000;1.30000000000000;1.40000000000000;1.50000000000000;1.60000000000000;1.70000000000000;1.80000000000000;1.90000000000000;2;2.10000000000000;2.20000000000000;2.30000000000000;2.40000000000000;2.50000000000000;2.60000000000000;2.70000000000000;2.80000000000000;2.90000000000000;3;3.10000000000000;3.20000000000000;3.30000000000000;3.40000000000000;3.50000000000000;3.60000000000000;3.70000000000000;3.80000000000000;3.90000000000000;4;4.10000000000000;4.20000000000000;4.30000000000000;4.40000000000000;4.50000000000000;4.60000000000000;4.70000000000000;4.80000000000000;4.90000000000000;5;5.10000000000000;5.20000000000000;5.30000000000000;5.40000000000000;5.50000000000000;5.60000000000000;5.70000000000000;5.80000000000000;5.90000000000000;6;6.10000000000000;6.20000000000000;6.30000000000000;6.40000000000000;6.50000000000000;6.60000000000000;6.70000000000000;6.80000000000000;6.90000000000000;7;7.10000000000000;7.20000000000000;7.30000000000000;7.40000000000000;7.50000000000000;7.60000000000000;7.70000000000000;7.80000000000000;7.90000000000000;8;8.10000000000000;8.20000000000000;8.30000000000000;8.40000000000000;8.50000000000000;8.60000000000000;8.70000000000000;8.80000000000000;8.90000000000000;9;9.10000000000000;9.20000000000000;9.30000000000000;9.40000000000000;9.50000000000000;9.60000000000000;9.70000000000000;9.80000000000000;9.90000000000000;10];
trndata=[y z];
nummfs=3;
mftype='gaussmf';
epoch_n=100;
in_fismat=genfis1(trndata,nummfs,mftype);
out_fismat=anfis(trndata,in_fismat,epoch_n);
f=evalfis(u,out_fismat);
我的问题已经解决,以上就是修改后的程序,大家觉得有价值的话参考一下!我们可以做深入的研讨!

[ 本帖最后由 hrc1985 于 2009-6-22 14:58 编辑 ]
1.jpg

cxz328346418 发表于 2009-12-27 15:09:51
看看怎么样啊 ,

Themoment 发表于 2011-6-23 22:32:33
我也在研究这方面的东西,非常感谢分享,先研究一下。

llbnk 发表于 2021-11-18 16:14:46
您好最近在研究自适应逆控制问题想入门QQ:1633406335
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表