找回密码
 注册
Simdroid-非首页
查看: 95|回复: 3

模糊控制

[复制链接]
发表于 2011-6-24 21:51:51 | 显示全部楼层 |阅读模式 来自 浙江杭州
本帖最后由 messenger 于 2011-7-1 18:51 编辑

模糊控制,附带说明,希望对大家有用哈!

语言变量XYZ的隶属度函数.
  论域
  

  

  言值

  

  
  

  

  -4
  
  

  

  -3
  
  

  

  -2
  
  

  

  -1
  
  

  

  0
  
  

  

  1
  
  

  

  2
  
  

  

  3
  
  

  

  4
  
  NB
  
  
1

  
  0.5
  
  
0

  
  0
  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  NS
  
  
0

  
  
0.5

  
  
1

  
  
0.5

  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  ZO
  
  
0

  
  
0

  
  
0

  
  
0.5

  
  
1

  
  
0.5

  
  
0

  
  
0

  
  
0

  
  PS
  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  
0.5

  
  
1

  
  
0.5

  
  
0

  
  PB
  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  
0

  
  
0.5

  
  
1

  


模糊控制规则表


  

  Z
  
  
X
  
  NB
  
  
NS
  
  
ZO
  
  
PS
  
  
PB
  
  

  

  

  Y
  
  NB
  
  
PB
  
  
PB
  
  
PS
  
  
PS
  
  
ZO
  
  NS
  
  
PB
  
  
PS
  
  
PS
  
  
ZO
  
  
ZO
  
  ZO
  
  
PS
  
  
PS
  
  
ZO
  
  
ZO
  
  
NS
  
  PS
  
  
PS
  
  

ZO
  
  
ZO
  
  
NS
  
  
NS
  
  PB
  
  
ZO
  
  
ZO
  
  
NS
  
  
NS
  
  
NB
  
设计带有纯延迟的一阶惯性环节(假设T=6,τ=0.02):



的模糊控制器,观察仿真结果。

编程如下:

  1. %被控系统建模
  2. num=1;
  3. den=[6,1];
  4. [a1,b,c,d]=tf2ss(num,den);%传递函数转换到状态空间
  5. x=[0];
  6. %系统参数
  7. T=0.01;h=T;td=0.02;N=1000;
  8. nd=td/T;%系统纯延迟
  9. R=ones(1,N);%参考输入
  10. %定义输入和输出变量及隶属度函数
  11. a=newfis('Simple');
  12. a=addvar(a,'input','e',[-4 4]);
  13. a=addmf(a,'input',1,'NB','trimf',[-4,-4,-2]);
  14. a=addmf(a,'input',1,'NS','trimf',[-4,-2,0]);
  15. a=addmf(a,'input',1,'ZO','trimf',[-2,0,2]);
  16. a=addmf(a,'input',1,'PS','trimf',[0,2,4]);
  17. a=addmf(a,'input',1,'PB','trimf',[2,4,4]);
  18. a=addvar(a,'input','de',[-4 4]);
  19. a=addmf(a,'input',2,'NB','trimf',[-4,-4,-2]);
  20. a=addmf(a,'input',2,'NS','trimf',[-4,-2,0]);
  21. a=addmf(a,'input',2,'ZO','trimf',[-2,0,2]);
  22. a=addmf(a,'input',2,'PS','trimf',[0,2,4]);
  23. a=addmf(a,'input',2,'PB','trimf',[2,4,4]);
  24. a=addvar(a,'output','u',[-4 4]);
  25. a=addmf(a,'output',1,'NB','trimf',[-4,-4,-2]);
  26. a=addmf(a,'output',1,'NS','trimf',[-4,-2,0]);
  27. a=addmf(a,'output',1,'ZO','trimf',[-2,0,2]);
  28. a=addmf(a,'output',1,'PS','trimf',[0,2,4]);
  29. a=addmf(a,'output',1,'PB','trimf',[2,4,4]);
  30. %模糊规则矩阵
  31. rr=[5 5 4 4 3
  32. 5 4 4 3 3
  33. 4 4 3 3 2
  34. 4 3 3 2 2
  35. 3 3 2 2 1];
  36. r1=zeros(prod(size(rr)),3);k=1;
  37. for i=1:size(rr,1)
  38. for j=1:size(rr,2)
  39. r1(k,:)=[i,j,rr(i,j)];
  40. k=k+1;
  41. end
  42. end
  43. [r,s]=size(r1);
  44. r2=ones(r,2);
  45. rulelist=[r1,r2];
  46. a=addrule(a,rulelist);
  47. %采用模糊控制器的二阶系统仿真
  48. e=0;de=0;
  49. ke=30;kd=5;ku=1;
  50. for k=1:N
  51. %输入变量变换至论域
  52. e1=ke*e;
  53. de1=kd*de;
  54. if e1>=4
  55. e1=4;
  56. elseif e1<=-4
  57. e1=-4;
  58. end
  59. if de1>=4
  60. de1=4;
  61. elseif de1<=-4
  62. de1=-4;
  63. end
  64. %模糊推理,计算出被控对象的控制输入
  65. in=[e1 de1];
  66. u=ku*evalfis(in,a);
  67. uu(1,k)=u;
  68. if k<=nd
  69. u=0;
  70. else
  71. u=uu(1,k-nd);
  72. end

  73. %控制作用于被控系统,计算系统输出;利用龙格—库塔法进行系统仿真
  74. k0=a1*x+b*u;
  75. k1=a1*(x+h*k0/2)+b*u;
  76. k2=a1*(x+h*k1/2)+b*u;
  77. k3=a1*(x+h*k2)+b*u;
  78. x=x+(k0+2*k1+2*k2+k3)*h/6;
  79. y=c*x+d*u;
  80. yy(1,k)=y;
  81. %计算系统输出误差及误差导数
  82. e1=e;e=y-R(1,k);
  83. de=(e-e1)/T;
  84. end
  85. %典型二阶环节的模糊控制输出曲线
  86. kk=[1:N]*T;
  87. figure(1);
  88. plot(kk,R,'k',kk,yy,'r');grid on
  89. xlabel('时间(秒)');ylabel('输出');
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-6-26 12:31:36 | 显示全部楼层 来自 重庆巴南区
Simdroid开发平台
模糊控制的相关资料很多,你这个是基础内容还是有什么特别之处
回复 不支持

使用道具 举报

发表于 2012-3-12 22:58:49 | 显示全部楼层 来自 陕西西安
谢啦 哈哈哈
回复 不支持

使用道具 举报

发表于 2012-3-22 20:32:14 | 显示全部楼层 来自 吉林长春
很好。就是不知道这个规则表如何建立。能给详细回答最好
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-8 08:38 , Processed in 0.032961 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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