繁体   English   中英

如何在不使用Java数组的情况下获得标准差?

[英]How can I get standard deviation without using arrays in Java?

使用双浮点数据计算任何给定输入的计数,平均值和标准偏差。

每次我运行程序时,它都会给我计数和平均值,但是我的标准偏差显示为NaN。

import java.util.Scanner;

public class Final 
{
    public static void main (String[]args)
    {
        Scanner in = new Scanner(System.in);

        System.out.print("Enter a range of digits to recieive 1. Count , 2. Average , 3. StdDvn");

        double input = in.nextDouble();

        double count = 1;
        double sum = 0;
        double sumsquared = sum * sum;
        double std = 0;

        while (in.hasNextDouble())
        { double value = in.nextDouble();

            sum = input += value;
            count++;
        }

        double average = sum / count;
        std = Math.sqrt((sumsquared-(sum/count)) / (count - 1));

        System.out.println("Your count of numbers is : " + count);
        System.out.println("Your average of numbers is : " + average);
        System.out.println("Your standard deviation of numbers is : " + std);
    }
}

您的sumsquared变量始终为0因为您是在初始化double sum=0;之后立即从0*0计算得出的double sum=0;

这部分应移到总和下方。

此外,要在不使用循环的情况下计算不带数组的标准偏差,您需要知道以下3个值:

  • 输入了多少个数字。
  • 所有数字的总和。
  • 数字的平方和。

公式E[X^2]-(E[X])^2参见Wikipedia ^2表示当然是squared

public static void main (String[]args)
{
    Scanner in = new Scanner(System.in);

    double count = 10.0;   // how many numbers are entered, e.g.: 10
    double sum1 = 0.0;    // sum of the numbers
    double sum2 = 0.0;    // sum of the squares
    System.out.println("Enter 10 numbers: ");
    for (int i=0; i < 10; i++) {
      double n = in.nextDouble();
      sum1 += n;
      sum2 += n * n;
    }
    double average = sum1 / count;
    double variance = (count * sum2 - sum1 * sum1) / (count * count);
    double stddev = Math.sqrt(variance);

    System.out.println("Your count of numbers is : " + count);
    System.out.println("Your average of numbers is : " + average);
    System.out.println("Your standard deviation of numbers is : " + stddev);
}

您的sumsquared是零。 因此,您在标准偏差中使用的值为0 这是重新sumsquared的解决sumsquared

编辑:我认为您的std是不正确的。 您必须先找到平均值。 在平方根内,找到( x - mean)的总和,其中x是您的数据,然后将结果除以count - 1

public static void main (String[]args)
{


    Scanner in = new Scanner(System.in);

    System.out.print("Enter a range of digits to recieive 1. Count , 2. Average , 3. StdDvn");

    double input = in.nextDouble();

    double count = 1;
    double sum = 0;
    double std = 0;

    while (in.hasNextDouble())
    { double value = in.nextDouble();

        sum = input += value;
        count++;

    }

    double sumsquared = sum * sum;
    double average = sum / count;
    std = Math.sqrt((sumsquared-(sum/count)) / (count - 1)); /* fix this formula */

    System.out.println("Your count of numbers is : " + count);
    System.out.println("Your average of numbers is : " + average);
    System.out.println("Your standard deviation of numbers is : " + std);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM