资源描述:
《C实现模糊控制算法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、由于项目需要,需要模糊控制算法,之前此类知识为0,经过半个多月的研究,终于有的小进展。开始想从强大的互联网上搜点c代码来研究下,结果搜遍所有搜索引擎都搜不到,以下本人从修改的模糊控制代码,经过自己修改后可在vc6.0,运行!输入e表示输出误差,ec表示误差变化率,经过测试具有很好的控制效果,对于非线性系统和数学模型难以建立的系统来说有更好的控制效果!现将其公开供大家学习研究!#include#include"math.h"#definePMAX 100 #definePMIN -100 #defi
2、neDMAX 100 #defineDMIN -100 #defineFMAX 100 /*语言值的满幅值*/intPFF[4]={0,12,24,48};/*输入量D语言值特征点*/intDFF[4]={0,16,32,64};/*输出量U语言值特征点*/intUFF[7]={0,15,30,45,60,75,90};/*采用了调整因子的规则表,大误差时偏重误差,小误差时偏重误差变化*//*a0=0.3,a1=0.55,a2=0.74,a3=0.89 */ intrule[7]
3、[7]={//误差变化率-3,-2,-1,0,1,2,3 //误差 {-6,-6,-6,-5,-5,-5,-4,}, // -3 {-5,-4,-4,-3,-2,-2,-1,}, // -2 {-4,-3,-2,-1,0,1,2,}, // -1 {-4,-3,-1,0,1,3,4,}, // 0 {-2,-1,0,1,2,3,4,}, // 1 {1,2,2,3,4,4,5,}, // 2 {4,5,5,5,6,6,6}};
4、 // 3/**********************************************************/int Fuzzy(intP,intD) /*模糊运算引擎*/{int U; /*偏差,偏差微分以及输出值的精确量*/unsignedint PF[2],DF[2],UF[4]; /*偏差,偏差微分以及输出值的隶属度*/int Pn,Dn,Un[4];long temp1,temp2; /*隶属度的确定*//*根据PD的指定语言值获得有效隶属度*/i
5、f(P>-PFF[3]&&P6、-PFF[0])); } elseif(P<=PFF[1]) { Pn=1;PF[0]=FMAX*((float)(PFF[1]-P)/(PFF[1]-PFF[0])); } elseif(P<=PFF[2]) { Pn=2;PF[0]=FMAX*((float)(PFF[2]-P)/(PFF[2]-PFF[1])); } elseif(P<=PFF[3]) { Pn=3;PF[0]=FMAX*((float)(PFF[3]-P)/(PFF[3]-PFF[2])); }
7、 }elseif(P<=-PFF[3]) { Pn=-2; PF[0]=FMAX; }elseif(P>=PFF[3]) { Pn=3; PF[0]=0; }PF[1]=FMAX-PF[0]; if(D>-DFF[3]&&D8、[0]=FMAX*((float)(-DFF[1]-D)/(DFF[2]-DFF[1])); } elseif(D<=DFF[0]) { Dn=0; DF[0]=FMAX*((float)(-DFF[0]-D)/(DFF[1]-DFF[0])