在计算时,是以距离之间方差的大小求 delta ,但方差显然是要开方的,但是一开方就寄。
错误的计算:
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;
}
求助