📄 fcontrol.cpp
字号:
#include <math.h>
#include <iostream.h>
data unsigned char Ec_state,E_state;//误差和误差变化率的
data unsigned char E_State[7]={0;0;0;0;0;0;0};//误差E所包括的7个域
data unsigned char Ec_State[7]={0;0;0;0;0;0;0};//误差变化率Ec所包括的7个域
data unsigned char U_State[7]={0;0;0;0;0;0;0};//输出U所包括的7个域
data unsigned char E_Mship[7]={0;0;0;0;0;0;0};//误差E的隶属度
data unsigned char Ec_Mship[7]={0;0;0;0;0;0;0};//误差变化率Ec的隶属度
data unsigned char U_Mship[7]={0;0;0;0;0;0;0};//输出U的隶属度
#define Boundary_L -60
#define Boundary_R 60
#define PS 3
#define Z 4
#define NS 5
#define NM 6
#define NB 7
void E_judge_f(double x); //判断误差E所在的域
void Ec_judge_f(double y);//判断误差变化率Ec所在的域
void U_judge_f(void);//根据规则表确定U可能在的域
void calu_Mship_U(void);//输出U隶属度的计算
void calu_Mship_E(void);//误差E隶属度的计算
void calu_Mship_Ec(void);//误差变化率Ec隶属度的计算
void calu_Mship_E(void)
{
int t;
for (t=0;t<=6;t++)
{
if ( E_State[t]==1)
}
}
void E_judge_f(double x) //误差的模糊化
{
double x;
if(x<-40) E_State[0]=1;else E_State[0]=0;
if((x>-60)&(x<-20)) E_State[1]=1;else E_State[1]=0;
if((x>-40)&(x<0)) E_State[2]=1;else E_State[2]=0;
if((x>-20)&(x<20)) E_State[3]=1;else E_State[3]=0;
if((x>0)&(x<40)) E_State[4]=1;else E_State[4]=0;
if((x>20)&(x<60)) E_State[5]=1;else E_State[5]=0;
if(x>40) E_State[6]=1;else E_State[6]=0;
}
void Ec_judge_F(double y)//误差变化率的模糊化
{
double y;
if(y<-4) Ec_State[0]=1;else Ec_State[0]=0;
if((y>-6)&(y<-2)) Ec_State[1]=1;else Ec_State[1]=0;
if((y>-4)&(y<0)) Ec_State[2]=1;else Ec_State[2]=0;
if((y>-2)&(y<2)) Ec_State[3]=1;else Ec_State[3]=0;
if((y>0)&(y<4)) Ec_State[4]=1;else Ec_State[4]=0;
if((y>2)&(y<6)) Ec_State[5]=1;else Ec_State[5]=0;
if((y>4) Ec_State[6]=1;else Ec_State[6]=0;
}
void U_judge_F(void)//模糊推理
{
if ((E_State[6]==1)&(Ec_State[6]==1)) U_State[6]=1;//E=PB
if ((E_State[6]==1)&(Ec_State[5]==1)) U_State[6]=1;
if ((E_State[6]==1)&(Ec_State[4]==1)) U_State[6]=1;
if ((E_State[6]==1)&(Ec_State[3]==1)) U_State[5]=1;
if ((E_State[6]==1)&(Ec_State[2]==1)) U_State[6]=1;
if ((E_State[6]==1)&(Ec_State[1]==1)) U_State[6]=1;
if ((E_State[6]==1)&(Ec_State[0]==1)) U_State[6]=1;
if ((E_State[5]==1)&(Ec_State[6]==1)) U_State[5]=1;//E=PM
if ((E_State[5]==1)&(Ec_State[5]==1)) U_State[5]=1;
if ((E_State[5]==1)&(Ec_State[4]==1)) U_State[5]=1;
if ((E_State[5]==1)&(Ec_State[3]==1)) U_State[4]=1;
if ((E_State[5]==1)&(Ec_State[2]==1)) U_State[5]=1;
if ((E_State[5]==1)&(Ec_State[1]==1)) U_State[5]=1;
if ((E_State[5]==1)&(Ec_State[0]==1)) U_State[5]=1;
if (E_State[4]==1) U_State[4]=1;//E=PS
if ((E_State[3]==1)&(Ec_State[6]==1)) U_State[4]=1;//E=ZE
if ((E_State[3]==1)&(Ec_State[5]==1)) U_State[4]=1;
if ((E_State[3]==1)&(Ec_State[4]==1)) U_State[4]=1;
if ((E_State[3]==1)&(Ec_State[3]==1)) U_State[3]=1;
if ((E_State[3]==1)&(Ec_State[2]==1)) U_State[2]=1;
if ((E_State[3]==1)&(Ec_State[1]==1)) U_State[2]=1;
if ((E_State[3]==1)&(Ec_State[0]==1)) U_State[2]=1;
if (E_State[2]==1) U_State[2]=1;//E=NS
if ((E_State[1]==1)&(Ec_State[6]==1)) U_State[1]=1;//E=NM
if ((E_State[1]==1)&(Ec_State[5]==1)) U_State[1]=1;
if ((E_State[1]==1)&(Ec_State[4]==1)) U_State[1]=1;
if ((E_State[1]==1)&(Ec_State[3]==1)) U_State[2]=1;
if ((E_State[1]==1)&(Ec_State[2]==1)) U_State[1]=1;
if ((E_State[1]==1)&(Ec_State[1]==1)) U_State[1]=1;
if ((E_State[1]==1)&(Ec_State[0]==1)) U_State[1]=1;
if ((E_State[0]==1)&(Ec_State[6]==1)) U_State[0]=1;//E=NB
if ((E_State[0]==1)&(Ec_State[5]==1)) U_State[0]=1;
if ((E_State[0]==1)&(Ec_State[4]==1)) U_State[0]=1;
if ((E_State[0]==1)&(Ec_State[3]==1)) U_State[1]=1;
if ((E_State[0]==1)&(Ec_State[2]==1)) U_State[0]=1;
if ((E_State[0]==1)&(Ec_State[1]==1)) U_State[0]=1;
if ((E_State[0]==1)&(Ec_State[0]==1)) U_State[0]=1;
}
void calu_membership(void)//去模糊化
{
for (int t=0;t<=6;t++)
{
if(E_State[t]==1)
}
}
void main()
{
double a,b,c;
double E,Ec;
cout<<"请输入论域范围:"<<endl;
cin>>a;
cout<<"请输入域的数目:"<<endl;
cin>>b;
cout<<"请输入误差:"<<endl;
cin>>E;
cout<<"请输入误差变化率:"<<endl;
cin>>Ec;
E_judge_f(E); //判断误差E所在的域
Ec_judge_f(Ec);//判断误差变化率Ec所在的域
U_judge_f();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -