wangzi629 发表于 2006-6-30 15:29

[原创]建立模糊控制规则

%模糊推理系统(FIS)<br>a=newfis('Simple');                                       %建立模糊推理系统<br>a=addvar(a,'input','e',[-6 6]);                        %添加误差变量   <br>% a=rmmf(a,'input',1,'mf',1);                        %[注意:]删除默认的隶属度函数(matlab6.0版本需要此项,6.5版本则不需要)<br>% a=rmmf(a,'input',1,'mf',1);<br>% a=rmmf(a,'input',1,'mf',1);<br>a=addmf(a,'input',1,'NB','gaussmf',);            %添加隶属度函数<br>a=addmf(a,'input',1,'NM','gaussmf',);<br>a=addmf(a,'input',1,'NS','trimf',[-5.5,-2,-0.35]);<br>a=addmf(a,'input',1,'ZR','trimf',[-2,0,2]);<br>a=addmf(a,'input',1,'PS','trimf',);<br>a=addmf(a,'input',1,'PM','gaussmf',);   <br>a=addmf(a,'input',1,'PB','gaussmf',);<br>%----------------------------------------------------------------------------------%<br>a=addvar(a,'input','de',[-6 6]);<br>% a=rmmf(a,'input',2,'mf',1);<br>% a=rmmf(a,'input',2,'mf',1);<br>% a=rmmf(a,'input',2,'mf',1);<br>a=addmf(a,'input',2,'NB','gaussmf',);<br>a=addmf(a,'input',2,'NM','gaussmf',);<br>a=addmf(a,'input',2,'NS','trimf',[-5.5,-2,-0.35]);<br>a=addmf(a,'input',2,'ZR','trimf',[-2,0,2]);<br>a=addmf(a,'input',2,'PS','trimf',);<br>a=addmf(a,'input',2,'PM','gaussmf',);<br>a=addmf(a,'input',2,'PB','gaussmf',);<br>%-----------------------------------------------------------------------------------%<br>a=addvar(a,'output','u',[-6 6]);<br>% a=rmmf(a,'output',1,'mf',1);<br>% a=rmmf(a,'output',1,'mf',1);<br>% a=rmmf(a,'output',1,'mf',1);<br>a=addmf(a,'output',1,'NB','gaussmf',);<br>a=addmf(a,'output',1,'NM','gaussmf',);<br>a=addmf(a,'output',1,'NS','trimf',[-5.5,-2,-0.35]);<br>a=addmf(a,'output',1,'ZR','trimf',[-2,0,2]);<br>a=addmf(a,'output',1,'PS','trimf',);<br>a=addmf(a,'output',1,'PM','gaussmf',);<br>a=addmf(a,'output',1,'PB','gaussmf',);<br>%-----------------------------------------------------------------------------------%<br>%显示隶属度函数<br>figure(1)    <br>subplot(3,1,1)<br>plotmf(a,'input',1)<br>ylabel('误差隶属度');<br>subplot(3,1,2)<br>plotmf(a,'input',2)<br>ylabel('误差率隶属度');<br>subplot(3,1,3)<br>plotmf(a,'output',1)<br>ylabel('输出隶属度');<br>%-----------------------------------------------------------------------------------%<br>%建立模糊控制规则<br>aa=0.5;                           %隶属度规则修正因子,<br>for i=1:7<br>    for j=1:7<br>      rr(i,j)=ceil(((i-4)*(1-aa)+(j-4)*aa)*(-1))+4;<br>          if rr(i,j)&gt;7<br>            rr(i,j)=7;<br>          end<br>    end<br>end                                    %模糊控制规则<br>                                       <br>r1=zeros(prod(size(rr)),3); <br>k=1;<br>for i=1:size(rr,1)<br>    for j=1:size(rr,2)<br>      r1(k,:)=;<br>      k=k+1;<br>    end<br>end<br>=size(r1);<br>r2=ones(r,2);<br>rulelist=;%规则矩阵,m+n+2列,m列输入,n列输出.m+n+1列为规则权值,m+n+2列操作符类型<br>a=addrule(a,rulelist);                   %在FIS中添加规则<br>%----------------------------------------------------------------------------------%
[此贴子已经被作者于2006-6-30 15:31:37编辑过]

wangzi629 发表于 2006-6-30 15:34

<P>注意:6.1版本和当前的6.5版本默认项不同。6.1版本有系统默认的3个隶属度函数,要是不需要需将其删除。而6.5版本的MATLAB则没有。大家使用时需注意。</P>
页: [1]
查看完整版本: [原创]建立模糊控制规则