当前位置: 移动技术网 > IT编程>开发语言>Java > java计算方差、标准差(均方差)实例代码

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

2019年09月07日  | 移动技术网IT编程  | 我要评论

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);
  }

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网