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

📄 decision.cpp

📁 灰色关联度程序
💻 CPP
字号:
#include <stdio.h>
#include <math.h>
#include  <stdlib.h>

#define n 5

double d0[n]={0.0254,0.1369,0.0354,0.1865,0.2159};
//double d0[n]={0.0424,0.0685,0.0885,0.0799,0.0981};
//double d1[n]={0.0424,0.1369,0.0442,0.1865,0.1373};
//double d1[n]={0.0353,0.1097,0.0354,0.0799,0.0981};
//double d1[n]={0.0254,0.0685,0.0885,0.1331,0.2159};
double d1[n]={0.0310,0.0959,0.0530,0.1331,0.1767};


double grade;
double p=0.5;
double a[n],b[n];


//均值化
/*
void pre()
{
	int i;
	double s0=0,s1=0;
	for(i=0;i<n;i++)
	{
		s0=s0+d0[i];
		s1=s1+d1[i];
	}
	s0=s0/n;
	s1=s1/n;
	for(i=0;i<n;i++)
	{
		a[i]=d0[i]/s0;
		b[i]=d1[i]/s1;
	}
}

*/

//直接

void pre()
{
	int i;
	double s0=0,s1=0;
	for(i=0;i<n;i++)
	{
		a[i]=d0[i];
		b[i]=d1[i];
	}
}



/*
//初值
void pre()
{
	int i;
	double s0=0,s1=0;
	for(i=0;i<n;i++)
	{
		a[i]=d0[i]/d0[0];
		b[i]=d1[i]/d1[0];
	}
}
*/

void deng()
{
	int i,j;
	double ma=0,mi=0,t;
	double a1[n],b1[n];
	
	pre();  //1
	for(i=0;i<n;i++)
	{
		a1[i]=a[i]/a[0];
		b1[i]=b[i]/b[0];
	}

	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			t=fabs(a1[i]-b1[j]);
			if(t>ma)
				ma=t;
			else if(t<mi)
				mi=t;
		}

	grade=0;
	for(i=0;i<n;i++)
	{
		grade=grade+(mi+ma*p)/(fabs(a1[i]-b1[i])+ma*p);
	}
	grade=grade/n;
	printf("Deng grade is:%5.4f\n",grade);
	
}

void euclid()
{
	int i,j;
	double ma=0,mi=0,t=0,t1=0,t2=0;
	double a1[n],b1[n];
 
	pre(); //2

	for(i=0;i<n;i++)
	{
		a1[i]=a[i]/a[0];
		b1[i]=b[i]/b[0];
	}

	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			t1=fabs(a1[i]-b1[j]);
			if(t1>ma)
				ma=t1;
			else if(t1<mi)
				mi=t1;
		}

	t1=0;
	for(i=0;i<n;i++)
	{
		t1=t1+(mi+ma*p)/(fabs(a1[i]-b1[i])+ma*p);//相关系数
	}
	t1=t1/n;
	
	for(i=0;i<n;i++)
	{
		t=(mi+ma*p)/(fabs(a1[i]-b1[i])+ma*p);//相关系数
		
		t2=t2+(t1-t)*(t1-t);
	}
	grade=1-sqrt((1-t1)*(1-t1)+t2/n);
	printf("Euclid grade is:%5.4f\n",grade);
}

void abso()
{
	int i;
	double s0=0,si=0,t=0;
	double a1[n],b1[n];
    
	pre(); //3
	//零化
	for(i=0;i<n;i++)
	{
		a1[i]=a[i]-a[0];
		b1[i]=b[i]-b[0];
	}

	for(i=1;i<n-1;i++)
	{
		s0=s0+a1[i];
		si=si+b1[i];
		t=t+a1[i]-b1[i];
	}
	s0=fabs(s0+a1[n-1]/2);
	si=fabs(si+b1[n-1]/2);
	t=fabs(t+a1[n-1]/2-b1[n-1]/2);
	grade=(1+s0+si)/(1+s0+si+t);
	printf("Abso grade is:%5.4f\n",grade);
	
}

void rela()
{
	int i;
	double s0=0,si=0,t=0;
	double a1[n],b1[n];
    
	pre();//4

	for(i=0;i<n;i++)
	{
		a1[i]=(a[i]-a[0])/a[0];
		b1[i]=(b[i]-b[0])/b[0];
	}

	for(i=1;i<n-1;i++)
	{
		s0=s0+a1[i];
		si=si+b1[i];
	}
	
	s0=s0+a1[n-1]/2;
	si=si+b1[n-1]/2;
	t=fabs(si-s0);
	s0=fabs(s0);
	si=fabs(si);
	grade=(1+s0+si)/(1+s0+si+t);
	printf("Rela grade is:%5.4f\n",grade);
	
}

void bmodel()
{
	int i;
	double s0=0,s1=0,s2=0;
	double a1[n],b1[n];
 
	pre();//5

	//零化
	for(i=0;i<n;i++)
	{
		a1[i]=a[i]-a[0];
		b1[i]=b[i]-b[0];
	}

	for(i=0;i<n;i++)
	{
		s0=s0+fabs(b1[i]-a1[i]);
	}
	s0=s0/n;

	for(i=0;i<n-1;i++)
	{
		s1=s1+fabs(b1[i+1]-a1[i+1]-b1[i]+a1[i]);
	}
	s1=s1/(n-1);

	for(i=1;i<n-1;i++)
	{
		s2=s2+fabs(b1[i+1]-a1[i+1]-2*(b1[i]-a1[i])+b1[i-1]-a1[i-1]);
	}
	s2=s2/(n-2);

	grade=1/(1+s0+s1+s2);
	printf("Bmodel grade is:%5.4f\n",grade);
	
}

void tmodel()
{
	int i;
	double s1=0,s2=0,t=0;
	double a1[n],b1[n];

	pre();//6

	for(i=1;i<n;i++)
	{
		s1=s1+fabs(a[i]-a[i-1]);
		s2=s2+fabs(b[i]-b[i-1]);
	}
	s1=s1/(n-1);
	s2=s2/(n-1);

	for(i=1;i<n;i++)
	{
		a1[i]=a[i]/s1;
		b1[i]=b[i]/s2;
	}
	
	grade=0;
	for(i=1;i<n;i++)
	{
		s1=a1[i]-a1[i-1];
		s2=b1[i]-b1[i-1];
		t=s1*s2;
		
		if(fabs(t)>0.00001)
		{
			s1=fabs(s1);
			s2=fabs(s2);

			if(t>0)
				t=1;
			else
				t=-1;
			
			if(s1<=s2)
				grade=grade+t*s1/s2;
			else
				grade=grade+t*s2/s1;
		}

	}
	grade=grade/(n-1);
	printf("tmodel grade is:%5.4f\n",grade);	
}

void xielv()
{
	int i;
	double a0=0,b0=0,t0=0,t1=0;
	double a1[n],b1[n];
    

	pre();//7
	//零化
	for(i=0;i<n;i++)
	{
		a1[i]=a[i]-a[0];
		b1[i]=b[i]-b[0];
	}

	for(i=0;i<n;i++)
	{
		a0=a0+a1[i];
		b0=b0+b1[i];
	}
	a0=a0/n;
	b0=b0/n;

	grade=0;
	for(i=0;i<n-1;i++)
	{
		t0=fabs((a1[i+1]-a1[i])/a0);
		t1=(b1[i+1]-b1[i])/b0;
		grade=grade+(1+t0)/(1+t0+fabs(t0-t1));
	}
	grade=grade/(n-1);
	printf("Xielv grade is:%5.4f\n",grade);
}

void improve()
{
	int i,c=4;
	double si=0,k0,k1,bi=0,w=0,t=0;
	double a1[n],b1[n];
    
	pre();

	//零化
	for(i=0;i<n;i++)
	{
		a1[i]=a[i]/a[0];
		b1[i]=b[i]/b[0];
	}
	/*
	t=b1[i]-a1[i];
	for(i=0;i<n;i++)
	{
		b1[i]=b[i]-t;
	}
*/
	for(i=0;i<n;i++)
	{
		si=si+b1[i];
	}

	grade=0;
	for(i=0;i<n-1;i++)
	{
		k0=a1[i+1]-a1[i];
		k1=b1[i+1]-b1[i];
		bi=atan((k1-k0)/(1+k1*k0));
		w=1-fabs((b1[i]-a1[i])/(si-a1[i]));
		grade=grade+w/(1+c*tan(bi/2));
	}
	grade=grade/(n-1);
	printf("Improve grade is:%5.4f\n",grade);
	
}

void main()
{
	deng();
	euclid();
//	improve();
	abso();
	rela();
	xielv();
	bmodel();
	tmodel();
}

⌨️ 快捷键说明

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