如何使用数组查找标准偏差

How to find standard Deviation using arrays

本文关键字:标准 查找 何使用 数组      更新时间:2023-10-16

在这个问题中,您将编写一个函数double stddev(double a[],int size(来计算数据集的标准偏差。

#include<iostream>
#include<cmath>
using namespace std;
const int MAX = 50;
void input(int arrays[], int &size){
cout << "How many values do you want to enter?";
cin >> size;
for(int i = 0; i < size; i++){
cout << "Enter a value: ";
cin >> arrays[i];
}
return;
}
int mean(int a[], int size)
{
int sum = 0;
for (int i = 0; i < size; i++)
{
sum += a[i];
}
double average = (double)sum /
(double)size;

double sq = 0;
for (int i = 0; i < size; i++)
sq += (a[i] - average) * (a[i] - average);
return sq / size;
}
double stdDev(int arr[], int size)
{
return sqrt(mean(arr, size));
}
int main()
{
int array[MAX];
int size;
input( array, size);
mean(array,size);
cout<<"Standerd Dev is: "<<stdDev(array,size)<<endl;
return 0;
}

因此,它允许用户输入值,当实际标准偏差大于1时,它会工作,但如果不是,它会打印0。例如,对于5,6,7,它打印0,但它应该是.816...

我需要帮助理解我做错了什么。这是我的函数中的错误还是我调用main函数时的错误?

正如我在评论中已经提到的,您将返回mean(实际计算方差(的结果作为int。因此,无论你在其中计算什么值(以double作为中间结果的类型(,它的所有数字都将在小数点后截止。

将您的申报更改为

double mean(int a[], int size)

也许给它一个更合适的名字。

什么是意思?它是数值的平均值。

double mean(int a[], int size)
{
double sum = 0.0;
if( size < 1 ) return sum;
for (int i = 0; i < size; i++) {
sum += a[i];
}
return sum / size;
}

什么是差异?它是每个值与平均值的差值。(留给读者练习,如何一次性计算mean和stddev(。

double variance(int a[], int size)
{
double var = 0.0;
if( size < 1 ) return var;
double mu = mean(a,size);
for (int i = 0; i < size; i++) {
var += (a[i] - mu) * (a[i] - mu);
}
return var / size; //Read about Bessel correction
}

标准偏差是多少?它是方差的平方根。哦,读一下https://en.wikipedia.org/wiki/Bessel%27s_correction和https://en.wikipedia.org/wiki/Standard_deviation#Sample_standard_deviation

double stdDev(int arr[], int size)
{
return sqrt( variance(arr, size) );
}