Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算浮点数文件的标准偏差?_Java_File_Text Files_Standard Deviation - Fatal编程技术网

Java 如何计算浮点数文件的标准偏差?

Java 如何计算浮点数文件的标准偏差?,java,file,text-files,standard-deviation,Java,File,Text Files,Standard Deviation,我正试图编写一个Java程序,在读取一个充满浮点数的文本文件后,计算最大、最小、平均和标准偏差。正如你所看到的,我已经计算了最大值,最小值,平均值,但是对于标准偏差,我感到困惑。我该如何实现这一点 另外,我对编程还比较陌生,如果结构不正确,我很抱歉 这是我的密码: /* * Create a Java program to read a file of floating point numbers and compute * the following statistics from the

我正试图编写一个Java程序,在读取一个充满浮点数的文本文件后,计算最大、最小、平均和标准偏差。正如你所看到的,我已经计算了最大值,最小值,平均值,但是对于标准偏差,我感到困惑。我该如何实现这一点

另外,我对编程还比较陌生,如果结构不正确,我很抱歉

这是我的密码:

/*
 * Create a Java program to read a file of floating point numbers and compute
 * the following statistics from the data file:
 * 
 * 1. Maximum
 * 2. Minimum
 * 3. Arithmetic Average (Mean)
 * 4. Standard Deviation
 * 
 * Do not assume anything about the large numbers in the file. They could be
 * positive or negative, and their magnitude could be extremely large or
 * extremely small.
 */

import java.io.*;
import java.util.Scanner;

public class DataFile {

public static void main(String[] args) {
    // declare variables
    double number, maximum, minimum, sum, mean, standardDeviation;
    int count;

    Scanner file = null;

/* -------------------------------------------------------------------------- */
    try {
        file = new Scanner(new File("RawData.txt"));
    }

    catch(FileNotFoundException e) {
        System.out.print("Error; The program was terminated!");
        System.exit(1);
    }

/* -------------------------------------------------------------------------- */
    // initialize variables
    maximum = file.nextDouble();
    minimum = maximum;
    sum = 0;
    count = 1;

    while(file.hasNextDouble()) {
        number = file.nextDouble();

        if(number > maximum)
            maximum = number;

        else if(number < minimum)
            minimum = number;

        sum += number;
        count += 1;

    } // end while loop

    file.close();

/* -------------------------------------------------------------------------- */
    // mean calculation
    mean = sum / count;

    // standard deviation calculation
    // .....

    // display statistics
    System.out.println("Maximum ------------> " + maximum                   );
    System.out.println("Minimum ------------> " + minimum                   );
    System.out.println("Sum ----------------> " + sum                       );
    System.out.println("Count --------------> " + count                     );
    System.out.println("Mean ---------------> " + mean                      );

} // end method main

} // end class DataFile
/*
*创建一个Java程序来读取浮点数文件并计算
*数据文件中的以下统计信息:
* 
* 1. 最大限度
* 2. 最低限度
* 3. 算术平均值(平均值)
* 4. 标准差
* 
*不要对文件中的大数字做任何假设。他们可能是
*正或负,其大小可能非常大或非常小
*非常小。
*/
导入java.io.*;
导入java.util.Scanner;
公共类数据文件{
公共静态void main(字符串[]args){
//声明变量
双倍数、最大值、最小值、总和、平均值、标准差;
整数计数;
扫描文件=空;
/* -------------------------------------------------------------------------- */
试一试{
文件=新扫描仪(新文件(“RawData.txt”);
}
catch(filenotfounde异常){
System.out.print(“错误;程序被终止!”);
系统出口(1);
}
/* -------------------------------------------------------------------------- */
//初始化变量
最大值=file.nextDouble();
最小值=最大值;
总和=0;
计数=1;
while(file.hasNextDouble()){
number=文件.nextDouble();
如果(数量>最大值)
最大值=数量;
否则如果(数量<最小值)
最小值=数量;
总和+=数字;
计数+=1;
}//在循环结束时结束
file.close();
/* -------------------------------------------------------------------------- */
//平均值计算
平均值=总和/计数;
//标准差计算
// .....
//显示统计数据
System.out.println(“最大值---------------->”+最大值);
System.out.println(“最小值---------------->”+最小值);
System.out.println(“总和-------------------------->”+总和);
System.out.println(“计数----------------->”+Count);
System.out.println(“平均值-------------------------->”+平均值);
}//结束方法main
}//结束类数据文件

在while循环中,您可以将每个
number
放入在此循环之前初始化的
ArrayList
。当到达文件末尾时,您可以更改
ArrayList
中的值-您需要提供一个循环,将列表中已有值与平均值之间的差值存储在该列表中,然后将该差值平方。循环整个
ArrayList
之后,对
ArrayList
中的值求和,除以
计数
,然后只需要该结果的元素。

正如Przemysław MoskalI所建议的,我相信这就是你想要的!列表在Java中非常有用。这项工作完成得非常快,因此请确保您对最终计算感到满意!快乐编程

编辑使用的计算公式得益于芭丝谢芭的建议,它允许你根本不使用列表(这更节省内存)

请访问此网站,了解了解计算的简单方法:

//初始化变量
最大值=file.nextDouble();
最小值=最大值;
总和=0;
计数=1;
双重计算sum=0;
双平方和=0;
while(file.hasNextDouble()){
number=文件.nextDouble();
平方和+=数学功率(数字,2);
计算数+=个数;
如果(数量>最大值)
最大值=数量;
否则如果(数量<最小值)
最小值=数量;
总和+=数字;
计数+=1;
}//在循环结束时结束
file.close();
/* ------------------------------------------------------------------------*/ 
//平均值计算
平均值=总和/计数;
双标准差=0;
双标准差均值=0;
双标准差=0;
双平方和=平方和-((数学功率(计算量,2)/(计数-1));
双平方=平方和/(计数-1);
double otherStdDev=数学.sqrt(sSquared);
//显示统计数据
System.out.println(“最大值---------------->”+最大值);
System.out.println(“最小值---------------->”+最小值);
System.out.println(“总和-------------------------->”+总和);
System.out.println(“计数----------------->”+Count);
System.out.println(“平均值-------------------------->”+平均值);
System.out.println(“StdDev-------------------------->”+其他StdDev);
}//结束方法main

您知道计算是什么吗?或者你只是在问如何编码?对不起。我想知道如何编码。我有sigma表示法的公式,这让它有点困难。也要计算均方,然后使用所谓的标准偏差计算公式。进一步澄清?谷歌“标准偏差计算公式”。如果你用这个,我会投票的。
// initialize variables
maximum = file.nextDouble();
minimum = maximum;
sum = 0;
count = 1;
double computationalSum = 0;
double squareSum = 0;

while(file.hasNextDouble()) {
    number = file.nextDouble();

    squareSum += Math.pow(number, 2);
    computationalSum += number;

    if(number > maximum)
        maximum = number;

    else if(number < minimum)
        minimum = number;

    sum += number;
    count += 1;

} // end while loop

file.close();

/* ------------------------------------------------------------------------*/ 
// mean calculation
mean = sum / count;
double stdDevSum = 0;
double stdDevMean = 0;
double stdDev = 0;

double sumOfSquares = squareSum - ((Math.pow(computationalSum, 2)/(count-1)));
double sSquared = sumOfSquares/(count-1);
double otherStdDev = Math.sqrt(sSquared);

// display statistics
System.out.println("Maximum ------------> " + maximum                   );
System.out.println("Minimum ------------> " + minimum                   );
System.out.println("Sum ----------------> " + sum                       );
System.out.println("Count --------------> " + count                     );
System.out.println("Mean ---------------> " + mean                      );
System.out.println("StdDev -------------> " + otherStdDev);

} // end method main