欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java计算方差、标准差(均方差)实例代码

程序员文章站 2022-06-29 13:30:51
java计算标准差思路 //方差s^2=[(x1-x)^2 +...(xn-x)^2]/n 或者s^2=[(x1-x)^2 +...(xn-x)^2]/(n-1)...

java计算标准差思路

//方差s^2=[(x1-x)^2 +...(xn-x)^2]/n 或者s^2=[(x1-x)^2 +...(xn-x)^2]/(n-1)
  public static double variance(double[] x) { 
    int m=x.length;
    double sum=0;
    for(int i=0;i<m;i++){//求和
      sum+=x[i];
    }
    double dave=sum/m;//求平均值
    double dvar=0;
    for(int i=0;i<m;i++){//求方差
      dvar+=(x[i]-dave)*(x[i]-dave);
    }
    return dvar/m;
  }
  
  //标准差σ=sqrt(s^2)
  public static double standarddiviation(double[] x) { 
    int m=x.length;
    double sum=0;
    for(int i=0;i<m;i++){//求和
      sum+=x[i];
    }
    double dave=sum/m;//求平均值
    double dvar=0;
    for(int i=0;i<m;i++){//求方差
      dvar+=(x[i]-dave)*(x[i]-dave);
    }
        //reture math.sqrt(dvar/(m-1));
    return math.sqrt(dvar/m);  
  }
//bigdecimal 的sqrt方法
 private static bigdecimal sqrt(bigdecimal num) {
    if (num.compareto(bigdecimal.zero) < 0) {
      return bigdecimal.zero;
    }
    
    bigdecimal x = num.divide(new bigdecimal("2"), mathcontext.decimal128);
    while (x.subtract(x = sqrtiteration(x, num)).abs().compareto(new bigdecimal("0.0000000000000000000001")) > 0) ;
    return x;
  }

  private static bigdecimal sqrtiteration(bigdecimal x, bigdecimal n) {
    return x.add(n.divide(x, mathcontext.decimal128)).divide(new bigdecimal("2"), mathcontext.decimal128);
  }

有需要的朋友们可以测试下以上代码,感谢大家的学习和对的支持。