2017-04-06 3 views
0

Ich habe eine ArrayList von ganzen Zahlen: [11, 15, 10, 19, 9, 1, 2, 16] und ich kann nicht scheinen, die richtige Antwort zurückzugeben.Berechnen Standardabweichung mit Java?

Mein Code:

static double Q2(ArrayList<Integer> input) { 
    Collections.sort(input); 

    ArrayList<Double> input2 = new ArrayList<>(); 
    double sum = 0; 
    double sum2 = 0; 
    double sd = 0; 

    for (int i = 0; i < input.size(); i++) { 
     sum = sum + input.get(i); 
    } 

    double mean = sum/input.size(); 

    for (int i = 0; i < input.size(); i++) { 
     input2.add((Math.pow((input.get(i) - mean), 2))); 
    } 

    for (int i = 0; i < input2.size(); i++) { 
     sum2 = sum2 + input2.get(i); 
    } 

    double mean2 = sum2/input2.size(); 

    sd = Math.sqrt(mean2); 

    return sd; 

Das soll voraussichtlich ausgegeben werden: 5,998697775350913

Meine Ausgabe ist: 6,010407640085654

Sie sich die Zeit danken, sehr geschätzt.

+3

Ich habe die richtige Ausgabe mit Ihrem Code. http://ideone.com/XmTDb2 – jyotesh

+0

Ich habe Ihren Code vereinfacht: http://ideone.com/hWTBgi. Ergebnis ist 5.998697775350913 – Zefick

+0

Vielleicht ist das Problem in Ihrer Eingabe, überprüfen Sie, dass die gleiche Liste ist, die Sie hier posten. – sirandy

Antwort

3

Obwohl mathematisch korrekt, ist dies, rechnerisch, ein schrecklicher Weg, SD zu berechnen. Es ist nicht notwendig, die Eingaben zuerst zu sortieren. Es ist nicht notwendig, ein zweites Array zu erstellen, um die quadrierten Abweichungen zu speichern; Sie können sie einfach hinzufügen, während Sie in einer Schleife gehen. Es ist nicht notwendig, Math.Pow aufzurufen, anstatt nur z * z zu berechnen.

Fix all das, und Sie haben diesen Ansatz so weit wie möglich verbessert. Ein besserer Ansatz ist jedoch die Verwendung eines online algorithm, der es in einem Durchgang tun kann.

Schließlich sollten Sie sich darüber im Klaren sein, dass in vielen Fällen, wenn Leute Sie bitten, die SD zu berechnen, die Population SD, nicht die Stichprobe SD, die stattdessen die Summe der quadrierten Abweichungen durch (n-1) teilen von n.

Verwandte Themen