资源描述:
《模糊控制算法c程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include"math.h"#definePMAX 100 #definePMIN -100 #defineDMAX 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}
2、;/*采用了调整因子的规则表,大误差时偏重误差,小误差时偏重误差变化*//*a0=0.3,a1=0.55,a2=0.74,a3=0.89 */ intrule[7][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,},
3、// 0 {-2,-1,0,1,2,3,4,}, // 1 {1,2,2,3,4,4,5,}, // 2 {4,5,5,5,6,6,6}}; // 3/**********************************************************/int Fuzzy(intP,intD) /*模糊运算引擎*/{int U; /*偏差,偏差微分以及输出值的精确量*/unsignedint PF[2],DF[2],UF[4];
4、 /*偏差,偏差微分以及输出值的隶属度*/int Pn,Dn,Un[4];long temp1,temp2; /*隶属度的确定*//*根据PD的指定语言值获得有效隶属度*/if(P>-PFF[3]&&P5、F[1]-P)/(PFF[2]-PFF[1])); } elseif(P<=PFF[0]) { Pn=0; PF[0]=FMAX*((float)(-PFF[0]-P)/(PFF[1]-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)/(P
6、FF[2]-PFF[1])); } elseif(P<=PFF[3]) { Pn=3;PF[0]=FMAX*((float)(PFF[3]-P)/(PFF[3]-PFF[2])); } }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]&&D7、(D<=-DFF[2]) { Dn=-2;DF[0]=FMAX*((float)(-DFF[2]-D)/(DFF[3]-DFF[2]));} elseif(D<=-DFF[1]) { Dn=-1; DF[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])); } elseif(D
8、<=DFF[1]) { Dn=1; DF[0]=FMAX*((float)(DFF[1]-D)/(DFF[1]-DFF[0])); } elseif(D<=DFF[2]) { Dn=2;DF[0]=FMAX*((float)(DFF[2]-D)/(DFF[2]-DFF[1])); } elseif(D<=DF