⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcontrol.cpp

📁 这个是模糊控制的一个VC程序
💻 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 + -