模糊数的C++实现
来源:互联网 发布:java web页面打印功能 编辑:程序博客网 时间:2024/06/03 03:44
头文件:
#ifndef 模糊数的实现_H_INCLUDED#define 模糊数的实现_H_INCLUDED#include<iostream>using namespace std;class FuzzyNumber{public: FuzzyNumber(const double& mu=0.0,const double& alpha=0.0,const double& beta=0.0); FuzzyNumber(const FuzzyNumber& num); double mean()const; double leftSpread()const; double rightSpread()const; void setMean(const double& mu); void setLeftSpread(const double& alpha); void setRightSpread(const double& beta); double operator()(const double& x)const; FuzzyNumber& operator = (const FuzzyNumber& num); FuzzyNumber operator + (const FuzzyNumber& num)const; FuzzyNumber operator - (const FuzzyNumber& num)const; FuzzyNumber operator * (const FuzzyNumber& num)const; FuzzyNumber operator / (const FuzzyNumber& num)const; FuzzyNumber operator - ()const; FuzzyNumber& operator = (const double& num); FuzzyNumber operator + (const double& num)const; FuzzyNumber operator - (const double& num)const; FuzzyNumber operator * (const double& num)const; FuzzyNumber operator / (const double& num)const; FuzzyNumber invert()const; friend FuzzyNumber operator + (const double& crisp,const FuzzyNumber& fuzzy); friend FuzzyNumber operator - (const double& crisp,const FuzzyNumber& fuzzy); friend FuzzyNumber operator * (const double& crisp,const FuzzyNumber& fuzzy); friend FuzzyNumber operator / (const double& crisp,const FuzzyNumber& fuzzy); friend istream& operator >> (istream& is,FuzzyNumber& num); friend ostream& operator << (ostream& os,const FuzzyNumber& num) { os<<"("<<num._mu<<","<<num._alpha<<","<<num._beta<<")"; return os; } private: double _mu,_alpha,_beta; double LRfunc(const double& x)const;};FuzzyNumber::FuzzyNumber(const double& mu,const double& alpha,const double& beta):_mu(mu),_alpha(alpha),_beta(beta){};FuzzyNumber::FuzzyNumber(const FuzzyNumber& num){*this=num;}double FuzzyNumber::mean()const{return _mu;}double FuzzyNumber::leftSpread()const{return _alpha;}double FuzzyNumber::rightSpread()const{return _beta;}void FuzzyNumber::setMean(const double& mu){_mu=mu;}void FuzzyNumber::setLeftSpread(const double& alpha){_alpha=alpha;}void FuzzyNumber::setRightSpread(const double& beta){_beta=beta;}double FuzzyNumber::operator()(const double& x)const{ if(x<_mu) return LRfunc((_mu-x)/_alpha); else return LRfunc((x-_mu)/_beta);}FuzzyNumber& FuzzyNumber::operator = (const FuzzyNumber& num){ _mu=num._mu; _alpha=num._alpha; _beta=num._beta; return *this;}FuzzyNumber FuzzyNumber::operator + (const FuzzyNumber& num)const{ double mu=_mu+num._mu; double alpha=_alpha+num._alpha; double beta=_beta+num._beta; return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator - (const FuzzyNumber& num)const{ double mu=_mu-num._mu; double alpha=_alpha+num._alpha; double beta=_beta+num._beta; return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator * (const FuzzyNumber& num)const{ double mu=_mu*num._mu; double alpha=_mu*num._alpha+num._mu*_alpha; double beta=_mu*num._beta+num._mu*_beta; return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator / (const FuzzyNumber& num)const{ return *this*num.invert();}FuzzyNumber FuzzyNumber::operator - ()const{ return FuzzyNumber(-_mu,_alpha,_beta);}FuzzyNumber& FuzzyNumber::operator = (const double& num){ _mu=num; return *this;}FuzzyNumber FuzzyNumber::operator + (const double& num)const{ double mu=_mu+num; return FuzzyNumber(mu,_alpha,_beta);}FuzzyNumber FuzzyNumber::operator - (const double& num)const{ double mu=_mu-num; return FuzzyNumber(-mu,_alpha,_beta);}FuzzyNumber FuzzyNumber::operator * (const double& num)const{ double mu=_mu*num; double alpha=num*_alpha; double beta=num*_beta; return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator / (const double& num)const{ return *this*((double)1/num);}FuzzyNumber FuzzyNumber::invert()const{ double mu=(double)1/_mu; double alpha=_beta/(_mu*(_mu+_beta)); double beta=_alpha/(_mu*(_mu+_alpha)); return FuzzyNumber(mu,alpha,beta);}FuzzyNumber operator + (const double& crisp,const FuzzyNumber& fuzzy){ return FuzzyNumber(crisp)+fuzzy;}FuzzyNumber operator - (const double& crisp,const FuzzyNumber& fuzzy){ return FuzzyNumber(crisp)-fuzzy;}FuzzyNumber operator * (const double& crisp,const FuzzyNumber& fuzzy){ return FuzzyNumber(crisp)*fuzzy;}FuzzyNumber operator / (const double& crisp,const FuzzyNumber& fuzzy){ return FuzzyNumber(crisp)/fuzzy;}istream& operator >> (istream& is,FuzzyNumber& num){ is>>num._mu>>num._alpha>>num._beta; return is;}double FuzzyNumber::LRfunc(const double& x)const{ if((x>=0.0)&&(x<=1.0)) return 1.0-x; else return 0.0;}#endif // 模糊数的实现_H_INCLUDED
可以直接运行的版本:
#include <iostream>using namespace std;class FuzzyNumber{public:FuzzyNumber(const double& mu=0.0,const double& alpha=0.0,const double& beta=0.0);FuzzyNumber(const FuzzyNumber& num);double mean()const;double leftSpread()const;double rightSpread()const;void setMean(const double& mu);void setLeftSpread(const double& alpha);void setRightSpread(const double& beta);double operator()(const double& x)const;FuzzyNumber& operator = (const FuzzyNumber& num);FuzzyNumber operator + (const FuzzyNumber& num)const;FuzzyNumber operator - (const FuzzyNumber& num)const;FuzzyNumber operator * (const FuzzyNumber& num)const;FuzzyNumber operator / (const FuzzyNumber& num)const;FuzzyNumber operator - ()const;FuzzyNumber& operator = (const double& num);FuzzyNumber operator + (const double& num)const;FuzzyNumber operator - (const double& num)const;FuzzyNumber operator * (const double& num)const;FuzzyNumber operator / (const double& num)const;FuzzyNumber invert()const;friend FuzzyNumber operator + (const double& crisp,const FuzzyNumber& fuzzy);friend FuzzyNumber operator - (const double& crisp,const FuzzyNumber& fuzzy);friend FuzzyNumber operator * (const double& crisp,const FuzzyNumber& fuzzy);friend FuzzyNumber operator / (const double& crisp,const FuzzyNumber& fuzzy);friend istream& operator >> (istream& is,FuzzyNumber& num);friend ostream& operator << (ostream& os,const FuzzyNumber& num){os<<"("<<num._mu<<","<<num._alpha<<","<<num._beta<<")";return os;}private:double _mu,_alpha,_beta;double LRfunc(const double& x)const;};FuzzyNumber::FuzzyNumber(const double& mu,const double& alpha,const double& beta):_mu(mu),_alpha(alpha),_beta(beta){};FuzzyNumber::FuzzyNumber(const FuzzyNumber& num){*this=num;}double FuzzyNumber::mean()const{return _mu;}double FuzzyNumber::leftSpread()const{return _alpha;}double FuzzyNumber::rightSpread()const{return _beta;}void FuzzyNumber::setMean(const double& mu){_mu=mu;}void FuzzyNumber::setLeftSpread(const double& alpha){_alpha=alpha;}void FuzzyNumber::setRightSpread(const double& beta){_beta=beta;}double FuzzyNumber::operator()(const double& x)const{if(x<_mu)returnLRfunc((_mu-x)/_alpha);elsereturn LRfunc((x-_mu)/_beta);}FuzzyNumber& FuzzyNumber::operator = (const FuzzyNumber& num){_mu=num._mu;_alpha=num._alpha;_beta=num._beta;return *this;}FuzzyNumber FuzzyNumber::operator + (const FuzzyNumber& num)const{double mu=_mu+num._mu;double alpha=_alpha+num._alpha;double beta=_beta+num._beta;return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator - (const FuzzyNumber& num)const{double mu=_mu-num._mu;double alpha=_alpha+num._alpha;double beta=_beta+num._beta;return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator * (const FuzzyNumber& num)const{double mu=_mu*num._mu;double alpha=_mu*num._alpha+num._mu*_alpha;double beta=_mu*num._beta+num._mu*_beta;return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator / (const FuzzyNumber& num)const{return *this*num.invert();}FuzzyNumber FuzzyNumber::operator - ()const{return FuzzyNumber(-_mu,_alpha,_beta);}FuzzyNumber& FuzzyNumber::operator = (const double& num){_mu=num;return *this;}FuzzyNumber FuzzyNumber::operator + (const double& num)const{double mu=_mu+num;return FuzzyNumber(mu,_alpha,_beta);}FuzzyNumber FuzzyNumber::operator - (const double& num)const{double mu=_mu-num;return FuzzyNumber(-mu,_alpha,_beta);}FuzzyNumber FuzzyNumber::operator * (const double& num)const{double mu=_mu*num;double alpha=num*_alpha;double beta=num*_beta;return FuzzyNumber(mu,alpha,beta);}FuzzyNumber FuzzyNumber::operator / (const double& num)const{return *this*((double)1/num);}FuzzyNumber FuzzyNumber::invert()const{double mu=(double)1/_mu;double alpha=_beta/(_mu*(_mu+_beta));double beta=_alpha/(_mu*(_mu+_alpha));return FuzzyNumber(mu,alpha,beta);}FuzzyNumber operator + (const double& crisp,const FuzzyNumber& fuzzy){return FuzzyNumber(crisp)+fuzzy;}FuzzyNumber operator - (const double& crisp,const FuzzyNumber& fuzzy){return FuzzyNumber(crisp)-fuzzy;}FuzzyNumber operator * (const double& crisp,const FuzzyNumber& fuzzy){return FuzzyNumber(crisp)*fuzzy;}FuzzyNumber operator / (const double& crisp,const FuzzyNumber& fuzzy){return FuzzyNumber(crisp)/fuzzy;}istream& operator >> (istream& is,FuzzyNumber& num){is>>num._mu>>num._alpha>>num._beta;return is;}double FuzzyNumber::LRfunc(const double& x)const{if((x>=0.0)&&(x<=1.0))return 1.0-x;else return 0.0;}int main(){FuzzyNumber num1(2.0,0.5,0.5),num2(3.0,0.5,0.5);cout<<num1+num2<<endl;cout<<num1-num2<<endl;cout<<num1*num2<<endl;cout<<num1/num2<<endl;cout<<num1+2<<endl;cout<<num1-2<<endl;cout<<num1*2<<endl;cout<<num1/2<<endl;return 0;}
0 0
- 模糊数的C++实现
- 模糊的C代码-考验你的C功底和大脑细胞数
- 模糊C均值聚类算法的实现
- C#: list 中字段的模糊查找匹配实现
- c,水仙花数的实现
- 运动模糊的实现
- 模糊聚类分析的实现
- C语言实现两数的交换
- c语言实现两个数的平均值
- 实现模糊查询的方法
- Oracle模糊查询的实现
- 高斯模糊的实现
- iOS 模糊效果的实现
- 高斯模糊的实现
- iOS模糊效果的实现
- iOS 模糊搜索的实现
- jQuery实现的模糊查询
- 十进制数转二进制数的C实现代码
- PAT1038统计同成绩学生(20)
- EA基础篇绘制ER图
- POJ 2288 Islands and Bridges - 状压dp【TSP】
- android震动器类Vibrator
- ios runtime详解
- 模糊数的C++实现
- 《我怎样毁了我的一生》
- 解决找不到sun.misc.BASE64Encoder 的jar包问题
- 画线算法 中点画线 Bresenham DDA
- KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了
- 解决android studio错误 --> Error:(1, 0) Plugin with id 'com.android.application' not found
- HTML5 - Canvas标签<使用>
- CentOS图形配置网络
- 最大子列和问题