java计算方差、标准差(均方差)实例代码
程序员文章站
2023-11-24 20:52:16
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); }
有需要的朋友们可以测试下以上代码,感谢大家的学习和对的支持。