0

9.1 と 9.2 を完了しました。さて、答えはそう単純なものではないと思います。手順は次のとおりです。

一連の数値の標準偏差は、それらの値の広がりの尺度です。これは、各数値と平均値の差の 2 乗の平均の平方根として定義されます。データに格納されている数値の標準偏差を計算するには:

数値の平均を計算します。

各数値について、平均からそれを引き、結果を二乗します。

手順 2 で計算した数値の平均を求めます。

ステップ 3 の結果の平方根を求めます。これが標準偏差です。データ内の数値の標準偏差を計算し、結果を double sd に格納するコードを記述します。

負でない double d の平方根を求めるには、次の式を使用します。

double s = Math.sqrt( d );

これが私のコードです:

double[] data = {  }; 
double sd; 
double sum = 0; 
double mean = 0;
double sd = 0;
runProgram = true;

for (int = 0; i < data.length; i++) {
    sum += data[i];
    mean = sum/(data.length - 1);
    mean = data[i];
    mean *= mean;
}

while (runProgram == true) 
    sd += Math.sqrt(mean);

何が間違っているのか本当にわかりません。どんなアドバイスも試されます。

4

2 に答える 2

0

sd問題は、平均が変化している間に標準偏差を計算していることです。最初にデータ セット全体の平均を計算し、次に の最終値を使用して標準偏差を計算する必要がありmeanます。

また、すべての分散の合計を平方根するだけで、毎回平方根を計算する必要はありません。

于 2013-10-15T04:28:42.240 に答える
0

あなたはそれをすべて台無しにしました。説明はかなり良いようですが、実装が間違っているようです。StandardDeviation を計算しているときに実行中 (つまり) の平均を計算していますが、これは正しくありません。SD を計算する前に平均を計算する必要があります。あなたの場合、平均は変化しています。

式を正しく理解する必要があります。

StandardDeviation はSquareRoot( (sum(square(number-mean))/n) ).

// Calculate the mean first
for (int i = 0; i < data.length; i++) {
    sum += data[i];
}
mean = sum / data.length;

sum = 0; // Re-using sum variable
for (int i = 0; i < data.length; i++) {
    double diff = data[i] - mean;
    diff = Math.pow(diff, 2);
    sum+=diff;
}

double variance = sum / data.length; // calculate the variance
sd = Math.sqrt(variance); // Standard deviation is the square root of variance
于 2013-10-15T04:35:21.900 に答える