📄 fuzzyvar.cpp
字号:
// FuzzyVar.cpp: implementation of the FuzzyVar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FuzzySys.h"
#include "FuzzyVar.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
FuzzyVar::FuzzyVar(double v):value(v)
{
}
FuzzyVar::FuzzyVar(const FuzzyVar &fv)
{
value = fv.value;
}
FuzzyVar::~FuzzyVar()
{
}
double FuzzyVar::MemberFunc(double radius, double middle)
{
if (value < middle - radius
|| value > middle + radius)
return 0;
return 1 - (fabs(middle - value) + 0.0) / radius;
}
bool FuzzyVar::IsNB(double* m=0)
{
double t;
t = MemberFunc(NS_MIDDLE - NB_MIN, NB_MIN);
if (m)
*m = t;
if (t < 0.0001 && t > -0.0001)
return false;
else
return true;
}
bool FuzzyVar::IsNS(double* m=0)
{
double t;
t = MemberFunc(NS_MIDDLE - NB_MIN, NS_MIDDLE);
if (m)
*m = t;
if (t < 0.0001 && t > -0.0001)
return false;
else
return true;
}
bool FuzzyVar::IsZO(double* m=0)
{
double t;
t = MemberFunc(ZO_MIDDLE - NS_MIDDLE, ZO_MIDDLE);
if (m)
*m = t;
if (t < 0.0001 && t > -0.0001)
return false;
else
return true;
}
bool FuzzyVar::IsPS(double* m=0)
{
double t;
t = MemberFunc(PS_MIDDLE - ZO_MIDDLE, PS_MIDDLE);
if (m)
*m = t;
if (t < 0.0001 && t > -0.0001)
return false;
else
return true;
}
bool FuzzyVar::IsPB(double* m=0)
{
double t;
t = MemberFunc(PB_MAX - PS_MIDDLE, PB_MAX);
if (m)
*m = t;
if (t < 0.0001 && t > -0.0001)
return false;
else
return true;
}
bool FuzzyVar::GetBounds(MEMBERSHIP m, double* pLowerBound, double* pUpperBound)
{
switch (m)
{
case NB:
*pLowerBound = NB_MIN;
*pUpperBound = NS_MIDDLE;
break;
case NS:
*pLowerBound = NB_MIN;
*pUpperBound = ZO_MIDDLE;
break;
case ZO:
*pLowerBound = NS_MIDDLE;
*pUpperBound = PS_MIDDLE;
break;
case PS:
*pLowerBound = ZO_MIDDLE;
*pUpperBound = PB_MAX;
break;
case PB:
*pLowerBound = PS_MIDDLE;
*pUpperBound = PB_MAX;
break;
default:
return false;
}
return true;
}
void FuzzyVar::SetValue(double v)
{
value = v;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -