关于开方,警示后人。
查看原帖
关于开方,警示后人。
302821
落海沉楼主2022/11/22 12:24

在计算时,是以距离之间方差的大小求 deltadelta ,但方差显然是要开方的,但是一开方就寄。

错误的计算:

double clac(double a[]){
	adv=sum=0.0;
	for(int i=1;i<=n+1;i++){
		dis[i]=0.0;
		for(int j=1;j<=n;j++){
			dis[i]+=(a[j]-s[i][j])*(a[j]-s[i][j]);
		}
		dis[i]=sqrt(dis[i]);
		adv+=dis[i];
	}
	adv/=(n+1);
	for(int i=1;i<=n+1;i++){
		sum+=(dis[i]-adv)*(dis[i]-adv);
	}
	sum/=(n+1);
	sum=sqrt(sum);
	return sum;
}

正确的代码:

double clac(double a[]){
	adv=sum=0.0;
	for(int i=1;i<=n+1;i++){
		dis[i]=0.0;
		for(int j=1;j<=n;j++){
			dis[i]+=(a[j]-s[i][j])*(a[j]-s[i][j]);
		}
//		dis[i]=sqrt(dis[i]);
		adv+=dis[i];
	}
	adv/=(n+1);
	for(int i=1;i<=n+1;i++){
		sum+=(dis[i]-adv)*(dis[i]-adv);
	}
	sum/=(n+1);
	sum=sqrt(sum);
	return sum;
}

求助

2022/11/22 12:24
加载中...