2017-03-14 28 views
-2

私はクラスのこの課題に取り組んでおり、どこが間違っているのか分かります。私は教授の例と同じ入力をしましたが、私は別の出力を持っています。入力1,2,3,4,5,5,6,6,7,8,9,10の平均値は5.61であり、標準偏差は2.99794373974304である。私は正しい5.6163を得ていますが、標準偏差は2.9963144027287916です。どこが間違っているのか分かりません。何か案は?私のためにこれをする誰かを探していない。私はどこに間違っているのか知る必要があります。平均、標準偏差

public static void main(String[] args) { 
    // 
    Scanner input = new Scanner(System.in); 
    //User Input 1-10 
    System.out.print("Enter a number: "); 
    double inputA = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputB = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputC = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputD = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputE = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputF = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputG = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputH = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputI = input.nextDouble(); 
    System.out.print("Enter a number: "); 
    double inputJ = input.nextDouble(); 

    //Formula for Mean 
    double mean = (inputA + inputB + inputC + inputD + inputE + inputF + inputG + inputH + inputI + inputJ)/10; 

    //Formula for standard deviation 
    //Subtract each input by the mean 
    double m1 = (inputA - mean); 
    double m2 = (inputB - mean); 
    double m3 = (inputC - mean); 
    double m4 = (inputD - mean); 
    double m5 = (inputE - mean); 
    double m6 = (inputF - mean); 
    double m7 = (inputG - mean); 
    double m8 = (inputH - mean); 
    double m9 = (inputI - mean); 
    double m10 = (inputJ - mean); 

    //Square each m variable 
    double v1 = (Math.pow(m1, 2)); 
    double v2 = (Math.pow(m2, 2)); 
    double v3 = (Math.pow(m3, 2)); 
    double v4 = (Math.pow(m4, 2)); 
    double v5 = (Math.pow(m5, 2)); 
    double v6 = (Math.pow(m6, 2)); 
    double v7 = (Math.pow(m7, 2)); 
    double v8 = (Math.pow(m8, 2)); 
    double v9 = (Math.pow(m9, 2)); 
    double v10 = (Math.pow(m10, 2)); 

    //Add all the sums squared sums together 
    double var = (v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10); 


    //divide by the number of variables to get Variance 
    double var1 = (var/10); 
    double var2 = (var % 10); 
    double var3 = (var1 + var2); 

    //Standard deviation is the square root of the Variance 
    double dev = (Math.sqrt(var3)); 

    //Mean and Deviation print 
    System.out.println("The mean is " + mean); 
    System.out.println("the deviation is: " + dev); 
} 

私のコーディングを改訂しました。しかし、私はまだオフです。誰も私がより正確な答えを得るのを助けることができますか?私はまだ困った!

public static void main(String[] args) { 



    double[] arrayM = new double[10]; 
    double[] arrayV = new double[10]; 

    double sum = 0; 

    for (int index = 0; index < arrayM.length ; index ++) { 
     System.out.print("Enter a number: "); 
     Scanner input = new Scanner(System.in); 
     double in = input.nextDouble(); 
     arrayM[index] = in; 
     sum += in;  
    } 
     //final mean and variant 
     double mean = sum/arrayM.length; 
     double vari = 0; 

    for (int index = 0; index < arrayM.length ; index ++) { 
     double var=((index+1)-mean)^2; 
     arrayV[index] = var; 
     vari += var; 
    } 
     double variant = vari/arrayM.length; 
    //final deviation 

    double devi= Math.sqrt(variant); 




    System.out.print("The mean is: "+mean); 
    System.out.print("The standard deviation is: "+devi); 

} 

}

ので、((インデックス+ 1)-mean)^ 2が動作しませんダブルVAR =内を意味すると言うところ。どうすればいいのですか?

最終編集:私はそれを理解しました。ここに最終コードがあります。

public class TESTPROJECT { 

    /** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 



//Arrays 
    Scanner input = new Scanner(System.in); 
     double[] arrayM = new double[10]; 
     double[] arrayV = new double[10]; 


    //Sum 
    double sum = 0; 


    //Sum array 
    for (int index = 0; index < arrayM.length ; index ++) { 
     System.out.print("Enter a number: "); 
     double in = input.nextDouble(); 
     arrayM[index] = (in); 
     sum += in;  
    } 

    //Mean 
    double mean = sum/arrayM.length; 

    for (int index = 0; index < arrayM.length ; index ++) { 
     double var = arrayM[index] - mean; 
     arrayV[index] = var; 
    } 

    //Variant Loop 
    double sqre = 0; 

    for(int index = 0; index < arrayV.length; index++) { 
     double sqr = Math.pow(arrayV[index],2); 
     sqre += sqr; 
    } 

    //Deviation cal 
    double variant = sqre/arrayM.length; 

    //final deviation 

    double devi= Math.sqrt(variant); 



    //ouput 
     System.out.println("The mean is: "+mean); 
     System.out.println("The standard deviation is: "+devi); 

} 
} 
+0

あなたはループについて聞いたことがありますか? –

+0

Math.pow(x、2)は使用しないでください。代わりにx * xを使用してください – FredK

+0

あなたは実際に分散の定義を知っていますか? – FredK

答えて

0

あなたは解決策に近づいています(ただし、実装はあまり便利ではありません)。 分散と偏差の定義を参照してください。 これはコード作成を開始する前に完了しているはずです。あなたが定義が見つからない場合は、こちらを試してください:https://en.wikipedia.org/wiki/Standard_deviation

をあなたがどこかにここに間違っている:

//divide by the number of variables to get Variance 
double var1 = (var/10); 
double var2 = (var % 10); // why ? 
double var3 = (var1 + var2); // and why ?? 

ところで、アレイとループを使用することが助けになるかもしれませんが、ここでは抜粋です。

double[] valuesArray = new double[] {1.0,2,3,4.5,5.6,6,7,8,9,10}; 

    double mean = 0; 
    double variance = 0; 
    double deviation = 0; 

    for (int index = 0; index < valuesArray.length ; index ++) { 
     mean += valuesArray[index]; 

     System.out.println("value "+ index + " is : "+valuesArray[index]); 
    } 

    System.out.println("Sum : "+mean); 

    // divide sum by number of values 
    mean = mean/((double) valuesArray.length); 

    System.out.println("Mean : "+mean); 
+0

私は今これを試しています。私はあなたに結果を知らせます。結論は、私はループを作る必要があります。トップ部分も。私は、説明されていない残りがあると仮定していました。私がそれをしたとき、それは実際の答えに近づいた。 –

+0

私はそれを理解しています。私はちょうど配列から値を引っ張ってループの各値を計算してから、後で引き出すために2番目の配列に格納するのに苦労しています。 –

+0

偏差の2乗平均に非常によく似たループを作成できます。同じ長さの新しい配列を作成し、各行に対応する平方偏差を意味するようにします(数式を参照)。ここでは、このループを使用して偏差を準備することができます(実際には別の平均を計算しているので、私が与えたコードサンプルは偏差の目的に少しだけ適応する必要があります)。 1つの新しい配列2個々の偏差でそれを埋めるためのループ3これらの偏差を合計するためにループを使用する4一度ループが終了し、偏差の合計を割り算する5 std偏差を計算する6ボイル – LoneWanderer

関連する問題