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

📄 模糊指数平滑.txt

📁 模糊指数平滑算法源程序,进行预测 计算.
💻 TXT
字号:
#include<iostream.h>
#include<math.h>


		
void fuzzysmooth(int nHisFirst, int nHisLast, int nForeFirst, int nForeLast, double* pData, double* xy)
{
	double x[100];
	
	for(int i = 0; i <= nHisLast - nHisFirst; i++)
	{
		x[i] = pData[i];
	}
//	BuildModel();
    double a;
	double s1[100],s2[100],ay[100],by[100];	
    int T,L,J,M;
	
	T= nHisLast - nHisFirst + 1;    //历史数据个数  
	L= - nForeFirst + nForeLast + 1;//待测数据个数  
	J=20;
	M=2;
	s1[0]=x[0];
	s2[0]=x[0];
	ay[0]=x[0];
	by[0]=0;
	xy[0]=x[0];
//	a=ding();
/////////////////////////////////////////////
    int l,j,t;
	double u[100];
	static double xx[50][50];
	static double r[50][50];
//	static double xy[50];
	double y[100];
	double max,min,g=0.0,b=0.0;

	/* 形成xx阵 */
	for(j=0;j<J;j++)
	{
		y[j]=j*1.0/J;
		s1[0]=x[0];
		s2[0]=x[0];
		ay[0]=x[0];
		by[0]=0.0;
		for(t=1;t<T;t++)
		{
			s1[t]=y[j]*x[t]+(1-y[j])*s1[t-1];
			s2[t]=y[j]*s1[t]+(1-y[j])*s2[t-1];
			ay[t]=2*s1[t]-s2[t];
			by[t]=(s1[t]-s2[t])*y[j]/(1-y[j]);
			xy[t]=ay[t-1]+by[t-1];
			xx[0][j]+=fabs(xy[t]-x[t])/(T-1);
			xx[1][j]+=pow(x[t]-xy[t],2)/(T-1);
			xx[3][j]+=pow(x[t]-xy[t],2)/(T-1-M);
		}
		xx[2][j]=sqrt(xx[1][j]);
		xx[3][j]=sqrt(xx[3][j]);
	}
	/* 形成R阵 */
	for(i=0;i<4;i++)
	{
		max=xx[0][0];
		min=xx[0][0];
		for(j=0;j<J;j++)
			if(xx[i][j]>max) max=xx[i][j];
			else if(xx[i][j]<min) min=xx[i][j];
			for(j=0;j<J;j++)
				r[i][j]=(max-xx[i][j])/(max-min);
	}
	/* 各方案u值 */
	for(j=0;j<J;j++)
	{
		for(i=0;i<4;i++)
		{
			g+=pow(1-r[i][j],2);
			b+=pow(r[i][j],2);
		}
		u[j]=1.0/(1+g/b);
	}
	/*确定最优各方案 */
	max=u[0];
	l=0;
	for(j=0;j<J;j++)
		if(u[j]>max)
		{
			max=u[j];
			l=j;
		}
	a=u[l];

///////////////////////////////////////////

	/* i<T */
	for(i=1;i<T;i++)
	{
		s1[i]=a*x[i]+(1-a)*s1[i-1];
		s2[i]=a*s1[i]+(1-a)*s2[i-1];
		ay[i]=2*s1[i]-s2[i];
		by[i]=(s1[i]-s2[i])*a/(1-a);
		xy[i]=ay[i-1]+by[i-1];
	}
	/* i>=T */
	for(i=1;i<=L;i++)
	{
		xy[T-1+i]=ay[T-1]+by[T-1]*(i);
	}

	xy[0] = x[0];
	xy[1] = x[1];
}


void main()
{
double	xy[100];

int nHisFirst=1990,nHisLast=1993,nForeFirst=1994,nForeLast=1994;

static double pData[20]={583.1461,615.0973,684.7702,857.4556};

fuzzysmooth(nHisFirst,nHisLast,nForeFirst,nForeLast,pData,xy);

cout<<"预测值:"<<endl;
for(int i=0;i<=- nForeFirst + nForeLast;i++)
{   
	cout<<"forecast["<<i+nForeFirst<<"]="<<xy[i+nHisLast - nHisFirst + 1]<<endl;
}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -