Java 如何计算浮点数文件的标准偏差?
我正试图编写一个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
/*
* 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