如何用JAVA计算标准差

如何用JAVA计算标准差,java,arrays,standard-deviation,Java,Arrays,Standard Deviation,我是新来的, 目前我正试图用Java计算标准偏差(我已经在谷歌上搜索过了,哈哈) 但是我有很多问题要解决 我有十个由用户输入的值,然后我必须计算 到目前为止,我的理解要感谢那些回复我的人 是 我找到了数组的平均值 然后完成计算 double two = total[2]; double three = total[3]; double four = total[3];

我是新来的, 目前我正试图用Java计算标准偏差(我已经在谷歌上搜索过了,哈哈) 但是我有很多问题要解决

我有十个由用户输入的值,然后我必须计算 到目前为止,我的理解要感谢那些回复我的人 是 我找到了数组的平均值 然后完成计算

                double two = total[2];
                double three = total[3];
                double four = total[3];
                double five = total[4];
                double six = total[6];
                double seven = total[7];
                double eight = total[8];
                double nine = total[9];
                double ten = total[10];

                double eleven = average_total;


mean = one + two + three + four + five + six + seven + eight + nine + ten + eleven;

mean = mean/11;
//one = one - mean;
//System.out.println("I really hope this prints out a value:" +one);
*/
 //eleven = average_total - mean;
 //eleven = Math.pow(average_total,average_total);
 //stand_dev = (one + two + three + four + five + six + seven + eight + nine + ten + eleven);
 //stand_dev = stand_dev - mean;
// stand_dev = (stand_dev - mean) * (stand_dev - mean);
// stand_dev = (stand_dev/11);
// stand_dev = Math.sqrt(stand_dev);
我已经有了存储在10个值数组中的数据,但我不太确定 如何从数组中打印数据,然后进行计算,而不必在此处存储enter代码 我在其他地方操纵的数据


谢谢您抽出时间,非常感谢:)

您尝试了什么

例如,您需要循环值以打印所有值

for(int i = 0; i < yourArray.length; i++)
{
     System.out.println(yourArray[i]);
     // Add your code to calculate the values you need for standard dev
}
for(int i=0;i
我不会为您解决问题,因为这看起来像是一个作业,但我会通过给您一些伪代码来帮助您找到正确的方向:

Loop over array i=1 to 10
    Add each element to some other variable Total
End of Loop

Average = Total / 10 (required for your std. dev. equation)
现在需要求元素与平均值的距离。轻松的

Loop over array i = 1 to 10
    Replace each element with its distance from Average Squared
    Add to some variable differenceTotal
End of Loop
然后你有你的分子和分母项,你的解决方案应该是显而易见的。希望这是有点明确和有益的

  calculate mean of array.

  loop through values

       array value = (indexed value - mean)^2    

  calculate sum of the new array.

  divide the sum by the array length

  square root it 
编辑:

我将向您展示如何在数组中循环,所有内容几乎都是相同的步骤,只是使用不同的计算

// calculating mean.

int total = 0;

for(int i = 0; i < array.length; i++){
   total += array[i]; // this is the calculation for summing up all the values
}

double mean = total / array.length;
//计算平均值。
int-total=0;
for(int i=0;i
编辑2:

在阅读代码之后,您做错的部分是您没有循环遍历这些值并正确地用平均值减去它们

也就是这一部分

十一=平均值\总-平均值
11=数学功率(平均总功率,平均总功率)

你需要这样做

for(int i = 0; i < array.length; i++){
   array[i] = Math.pow((array[i]-mean),2)
}
for(int i=0;i
基本上,您需要使用newvalue=oldvalue-mean(average)更改数组中的每个值


然后计算总和。。。然后是平方根。

有一个简单的公式,可以用于在每次添加数字时快速计算标准偏差。假设已经声明并填充了
total[]
,下面是一些实现该公式的代码:

double powerSum1 = 0;
double powerSum2 = 0;
double stdev = 0;

for i = 0 to total.length {
    powerSum1 += total[i];
    powerSum2 += Math.pow(total[i], 2);
    stdev = Math.sqrt(i*powerSum2 - Math.pow(powerSum1, 2))/i;
    System.out.println(total[i]); // You specified that you needed to print 
                                  // each value of the array
}
System.out.println(stdev); // This could also be placed inside the loop 
                           // for updates with each array value.

这个公式的美妙之处在于,您不必每次添加新值时都重新处理整个数组,也不必存储数组的任何旧值,只需存储上面代码中声明的三个变量。

试试这个

import java.io.IOException;

public class StandardDeviationCalc {
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        double [] values = {9, 2, 5, 4, 12, 7, 8, 11, 9, 3, 7, 4, 12, 5, 4, 10,
                            9, 6, 9, 4 };   //change input values here
        double sum=0;
        double finalsum = 0;
        double average = 0;

        for( double i : values) {
            finalsum = (sum += i);
        }

        average = finalsum/(values.length);
        System.out.println("Average: "+ average);

        double sumX=0;
        double finalsumX=0;
        double[] x1_average = new double[2000];
        for (int i = 0; i<values.length; i++){
            double fvalue = (Math.pow((values[i] - average), 2));
            x1_average[i]= fvalue;
            System.out.println("test: "+ fvalue);
        }

        for(double i : x1_average) {
            finalsumX = (sumX += i);
        }

        Double AverageX = finalsumX/(values.length);
        System.out.println("E(X1-x1_average)^2/AverageX: "+ AverageX);
        double SquareRoot = Math.sqrt(AverageX);
        System.out.println("Standard Deviation: "+ SquareRoot);
    }
}
import java.io.IOException;
公共类标准偏差计算{
/**
*@param args
*@抛出异常
*/
公共静态void main(字符串[]args)引发IOException{
双[]值={9,2,5,4,12,7,8,11,9,3,7,4,12,5,4,10,
9,6,9,4};//在此处更改输入值
双和=0;
双终值=0;
双平均=0;
for(双i:值){
最终金额=(总和+=i);
}
平均值=最终值/(值.长度);
System.out.println(“平均值:+平均值”);
双sumX=0;
双finalsumX=0;
双[]x1_平均值=新双[2000];

for(int i=0;i显示您到目前为止的代码。双一=总计[1];双二=总计[2];双三=总计[3];双四=总计[3];双五=总计[4];双六=总计[6];双七=总计[7]双八=总数;双九=总数;双十=总数;双十一=平均总数;平均数=一+二+三+四+五+六+七+八+九+十+十一;平均数=平均数/11;十一=平均总数-平均数;十一=数学功率(平均总数,平均总数);立场发展=(一+二+三+四+五+六+七+八+九+十+十一);立场发展=立场发展-均值;立场发展=(立场发展-均值)*(立场发展-均值);立场发展=(立场发展/11-1);立场发展=数学.sqrt(立场发展);很抱歉,这造成了非常糟糕的结果。你在关于循环的讲座中睡着了,对吗?我曾尝试过手动将数组值分配给变量,然后手动写出等式,但我没有得到任何结果,尝试过编辑/发布代码,但遇到了问题确保你使用的是
double
而不是
int
对于其他方面的任何划分,您都会遇到舍入错误谢谢!我会看看如何进行此操作,非常好的建议:)@prgenhard感谢您的所有输入,它帮助了很多!我已经删除了旧代码,如果我做得正确,我应该能够以更少的代码行更快地完成它,这就是我到目前为止所做的(int j=1;j抱歉,当我评论它时,它的格式很糟糕,我需要做的是:遍历数组,将值相加,然后除以数组中的值的数量..这将得到平均值,然后我就可以处理你上面所说的内容了?抱歉,如果我似乎不是最新的,那么所有数组都从0开始,而不是从1开始,当你进行合计[j]索引0处将缺少一个值。我习惯于在数组索引0(数组[0])处初始化。此外,score1是一个单整数,因此不能像那样有一个j。数组基本上是一堆单整数(或任何您想要的对象)在一个实体中建立索引。阅读本文,了解更多说明,并遵循我的示例。学习循环和数组是非常必要的,一旦你理解了编程,我就可以