声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1664|回复: 3

[编程技巧] 请教:模糊控制的MATLAB编程问题

[复制链接]
发表于 2006-11-7 18:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在运行MATLAB编写的模糊控制程序时总是出现以下问题:
Error in ==> evalfis at 81
[output,IRR,ORR,ARR] = evalfismex(input, fis, numofpoints);

Error in ==> MH at 81
U=ku*evalfis(in,FC);
请教各位高手如何解决?
回复
分享到:

使用道具 举报

发表于 2006-11-7 19:10 | 显示全部楼层
这一类错误问题请提供详细的错误信息或者给出相应的代码,否则别人基本没办法帮你
 楼主| 发表于 2006-11-7 19:25 | 显示全部楼层
这是代码
% 被控系统建模
num=10;
den=[1 3 2];
[a1,b,c,d]=tf2ss(num,den);
x=[0;0];
%系统参数
T=0.1;td=0.5;
N=250;
R=1*ones(1,N);
%建立新的FIS结构为FC.fis
FC=newfis('FC');
%添加输入输出变量
FC=addvar(FC,'input','E',[-6 6]);
FC=addvar(FC,'input','EC',[-6 6]);
FC=addvar(FC,'output','U',[-7 7]);
%添加隶属度函数
FC=addmf(FC,'input',1,'NB','trimf',[-6 -6 -2]);
FC=addmf(FC,'input',1,'NM','trimf',[-6 -4 -1]);
FC=addmf(FC,'input',1,'NS','trimf',[-5 -2 0]);
FC=addmf(FC,'input',1,'N0','trimf',[-3 -0 +0]);
FC=addmf(FC,'input',1,'P0','trimf',[0 0 3]);
FC=addmf(FC,'input',1,'PS','trimf',[0 2 5]);
FC=addmf(FC,'input',1,'PM','trimf',[1 4 7]);
FC=addmf(FC,'input',1,'PB','trimf',[2 6 6]);

FC=addmf(FC,'input',1,'NB','trimf',[-6 -6 -2]);
FC=addmf(FC,'input',1,'NM','trimf',[-7 -4 -1]);
FC=addmf(FC,'input',1,'NS','trimf',[-5 -2 0]);
FC=addmf(FC,'input',1,'0','trimf',[-2 0 2]);
FC=addmf(FC,'input',1,'PS','trimf',[0 2 5]);
FC=addmf(FC,'input',1,'PM','trimf',[1 4 7]);
FC=addmf(FC,'input',1,'PB','trimf',[2 6 6]);

FC=addmf(FC,'output',1,'NB','trimf',[-7 -7 -3]);
FC=addmf(FC,'output',1,'NM','trimf',[-7 -4 -1]);
FC=addmf(FC,'output',1,'NS','trimf',[-5 -1 1]);
FC=addmf(FC,'output',1,'0','trimf',[-2 0 2]);
FC=addmf(FC,'output',1,'PS','trimf',[-1 1 5]);
FC=addmf(FC,'output',1,'PM','trimf',[1 4 7]);
FC=addmf(FC,'output',1,'PB','trimf',[3 7 7]);

%添加控制规则
rr=[7 7 7 7 6 4 4;
    7 7 7 7 6 4 4;
    6 6 6 6 4 3 3;
    6 6 5 4 3 2 2;
    6 6 5 4 3 2 2;
    5 5 4 2 2 2 2;
    4 4 2 1 1 1 1;
    4 4 2 1 1 1 1;];
r1=zeros(prod(size(rr)),3);k=1;
for i=1:size(rr,1)
    for j=1:size(rr,2)
        r1(k,:)=[i,j,rr(i,j)];
        k=k+1;
    end
end
[r,s]=size(r1);r2=ones(r,2);
rulelist=[r1,r2];
FC=addrule(FC,rulelist);
%采用模糊控制器的二阶系统仿真
E=0;EC=0;IE=0;
x=[0,0];
ke=60;kd=2.5;ki=0.01;ku=0.8;
for k=1:N
    %输入变量变换至论域
    E1=ke*E;
   EC1=kd*EC;
   if E1>=6
       E1=6;
   elseif E1<=-6
       E1=-6;
   end
   if EC1>=6
       EC1=6;
   elseif EC1<=-6
       EC1=-6;
   end
%模糊推理,计算出被控对象的控制输入
  in=[E1 EC1];
U=ku*evalfis(in,FC);
  uu(1,k)=U;
%控制作用于被控系统,计算系统输出
k0=a1*x+b*u;
k1=a1*(x+h*k0/2)+b*u;
k2=a1*(x+h*k1/2)+b*u;
k3=a1*(x+h*k2)+b*u;
x=x+(k0+2*k1+2*k2+k3)*h/6;
y=c*x+d*u;
%计算系统输出误差及误差导数
E1=E;
E=y-R(1,k);
EC=(E-E1)/T;
IE=IE+E*T;
yy(1,k)=y;
end
%典型二阶环节的模糊控制输出曲线
kk=[1:N]*T;
figure(1);
plot(kk,R,'k',kk,yy,'r',kk,yy1,'b');
发表于 2007-3-30 16:46 | 显示全部楼层
原帖由 liuxiaoli487 于 2006-11-7 19:25 发表
这是代码
% 被控系统建模
num=10;
den=;
=tf2ss(num,den);
x=;
%系统参数
T=0.1;td=0.5;
N=250;
R=1*ones(1,N);
%建立新的FIS结构为FC.fis
FC=newfis('FC');
%添加输入输出变量
FC=addvar(FC,'in ...

请问有没有模型类的东西?直观的东西,这个代码实现了什么?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 12:20 , Processed in 0.061769 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表