ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
599
599
EMPFEHLEN
-
Hallo alle,
ich will „variance“ rechnen, aber mein Problem ist, daß nur die letzte wert von dem
Arrayliste genommen werde
Für „sum“ und „mean“ kriege ich die richtige werte
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
ArrayList list = new ArrayList(); double sum=0.0; double mean=0.0; double variance=0.0; Iterator iterator=list.iterator(); Iterator iteratore=list.iterator(); while(iterator.hasNext()){ sum += ((Double)iterator.next()).doubleValue(); mean = (sum / list.size()); } while(iteratore.hasNext()) { variance=Math.pow(((Double)iterator.next()).doubleValue()-mean,2); }
Danke
-
01.09.06 13:04 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Bei der Varianz werden die die quadrierten Abstände der Werte zum Durchschnitt aufaddiert und werden dann noch mit 1/n multipliziert...
Schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
/** * */ package de.tutorials; import java.util.Arrays; /** * @author Thomas.Darimont * */ public class StatisticsExample { /** * @param args */ public static void main(String[] args) { double[] values = { 8952.00, 8883.30, 7539.10, 7842.60 }; double average = calcAverage(values); System.out.println("Values: " + Arrays.toString(values)); System.out.println("Average: " + average); System.out.println("Variance: " + calcVariance(values,average)); System.out.println("Median: " + calcMedian(values)); } private static double calcMedian(double[] values) { // Median bei geraden n // Mittelwert der beiden "mittleren" Werte // (data[n/2] + data[n/2+1]) / 2 double median = 0.0; if (values.length % 2 == 0) { median = (values[(values.length-1)/2] + values[(values.length-1)/2 + 1])/2; } else { // Median bei ungeradem n // data[(n+1)/2] median = values[values.length/2]; } return median; } private static double calcVariance(double[] values,double average) { /* _n * v^2 = 1/n * \ (data[i] - average)^2 * /_i=1 * */ double variance = 0.0; for (int i = 0; i < values.length; i++) { variance += Math.pow(values[i] - average, 2); } variance *= 1.0 / values.length; return variance; } private static double calcAverage(double[] values) { /* * _n * a = 1/n * \ data[i] * /_i = 0 * */ double average = 0.0; for (int i = 0; i < values.length; i++) { average += values[i]; } average /= values.length; return average; } }
Ausgabe:
Code :1 2 3 4
Values: [8952.0, 8883.3, 7539.1, 7842.6] Average: 8304.25 Variance: 388363.5524999996 Median: 8211.2
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Danke für die schnelle Antworte.
Das problem ist, ich habe ein Arraylist (deswegen musste ich iterator benutzen) und in mein programme functioniert schon nur beim Variance rechnen habe ich was falsche mehr oder weniger geschriben.........
danke
-
01.09.06 15:34 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
ich wollte dir nur damit deutlich machen dass du die Varianz "falsch" berechnest...
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi sim!
Dein Code stimmt hinten und vorne nicht.
(1) Du teiltst ungehemmt durch die Länge leerer Listen.
(2) while(iteratore.hasNext()) {
variance=Math.pow(((Double)iterator.next()).doubleValue()-mean,2);
iterator <> iteratore
Eigentlich hätte Dein Code gar nicht laufen können.
(3) mean = (sum / list.size());
Komisch ist auch, dass der Mittelwert ständig neu berechnet wird. Da die letzte Berechnung aber stimmt, funktioniert das so. Eigentlich gehört die Mittelwertberechnung aber nicht in den Iterator.
(4) Die Varianz ist der Durchschnitt der Summe der Abweichungsquadrate. Bei Dir wird gar nicht die Summe berechnet.
Die beiden wesentlichen Fehler (2) und (4) korrigiert und der ArrayList ein paar Werte spendiert. Dann wird aus Deiner Fassung folgendes:
ArrayList list = new ArrayList();
list.add(new Double(2.0));
list.add(new Double(3.0));
list.add(new Double(7.0));
double sum=0.0;
double mean=0.0;
double variance=0.0;
Iterator iterator=list.iterator();
Iterator iteratore=list.iterator();
while(iterator.hasNext()){
sum += ((Double)iterator.next()).doubleValue();
mean = (sum / list.size());
}
while(iteratore.hasNext()) {
variance= variance + Math.pow(((Double)iteratore.next()).doubleValue()-mean,2);
}
variance = variance / list.size();
System.out.println("Summe="+sum);
System.out.println("Mean ="+mean);
System.out.println("Var ="+variance);
Ausgabe:
Summe=12.0
Mean = 4.0
Var = 4.666666667
Probe: Var = 1/3*{ (2-4)^2+(3-4)^2+(7-4)^2 }
= 1/3*{ 4 + 1 + 9 }
für die Varianz: 14/3 =4.6666667
Grüsse vom Dorfdepp
Ähnliche Themen
-
Vektor mit Iterator durchlaufen
Von lgorse im Forum C/C++Antworten: 2Letzter Beitrag: 03.09.10, 20:43 -
XPresso Iterator
Von axn im Forum Cinema 4DAntworten: 2Letzter Beitrag: 26.03.10, 21:58 -
Matrix & Iterator
Von schickano im Forum C/C++Antworten: 3Letzter Beitrag: 09.01.10, 15:13 -
[c++] Problem mit Iterator bei Anwendung der Funktion erase() auf container vector
Von Mizi Mace im Forum C/C++Antworten: 15Letzter Beitrag: 10.11.08, 14:33 -
Iterator - Fehler
Von Der Held im Forum JavaAntworten: 9Letzter Beitrag: 20.10.05, 22:33





Zitieren

Login





