Liebe Leute,
ich habe ein Problem mit einer Standardabweichung. Ich möchte aus einem Textfile Daten zusammenfassen (ca. 3000 Werte/Stunde). Dabei möchte ich die Mittelwerte/h und Standardabweichungen ausgeben. Das Problem scheint zu sein, dass ich den Mittelwert von innerhalb einer if-Schleife für die Berechnung außerhalb brauche... oder unterliege ich hier einem Denkfehler?
Außerdem stimmen die Mittelwerte nicht 100%ig mit excel überein, evtl. erste und letzte Zeile - Schleifen-Problem?
Ich sitze schon ziemlich lange daran, und bin für jede Hilfe dankbar.
lg
chrisl
Code
Ausgabe
(die ersten und letzten beiden Zeilen; zusätzlich wird ein file generiert, in das er die Daten reinschreibt.)
MittelW -0.007871999824047089 summe -0.007871999824047089 counter2 0 Messwert -0.003935999912023544 SE Infinity stabw Infinity sekunde 17 minute 25 stunde 14
MittelW 0.8247612895651469 summe 1649.522579130294 counter2 1999 Messwert 1.258055971880257 SE 19.17678377986091 stabw 857.3974126640069 sekunde 6 minute 0 stunde 15
MittelW 0.5652572924944593 summe 1950.702916398379 counter2 3450 Messwert 0.9532799786925316 SE 17.165361168485276 stabw 1008.2366800278943 sekunde 6 minute 0 stunde 7
MittelW 0.8070397663090869 summe 2784.28719376635 counter2 3449 Messwert 0.757967983058095 SE 28.664106957959437 stabw 1683.3910462302338 sekunde 6 minute 0 stunde 8
ich habe ein Problem mit einer Standardabweichung. Ich möchte aus einem Textfile Daten zusammenfassen (ca. 3000 Werte/Stunde). Dabei möchte ich die Mittelwerte/h und Standardabweichungen ausgeben. Das Problem scheint zu sein, dass ich den Mittelwert von innerhalb einer if-Schleife für die Berechnung außerhalb brauche... oder unterliege ich hier einem Denkfehler?
Außerdem stimmen die Mittelwerte nicht 100%ig mit excel überein, evtl. erste und letzte Zeile - Schleifen-Problem?
Ich sitze schon ziemlich lange daran, und bin für jede Hilfe dankbar.
lg
chrisl
Code
Java:
package auslesen_stu;
import java.io.*;
/*
* @author c.brandstätter
*/
public class ZuluftStunden {
static String strRead, secondentry;
static String dlm = ",", dlm2 = " ", dlm3 = "/";
static double d, stdev, ste, d2;
static int counter, m, st, sec, ho, st2;
static int counter2 = 0;
static int counter3 = 1;
static BufferedReader namesFile;
static String strRead2, part1;
static String strReadMinute, strReadStunde, strReadSekunde;
static double summe = 0;
static double summed = 0;
static double aver2 = 0;
static double mw = 0;
static double mw2 = 0;
static double mw3 = 0;
static int mold = -1;
static int stold = -1;
static double abc = 0;
static FileWriter writer;
static File file;
public static void main(String[] args) throws FileNotFoundException {
namesFile = new BufferedReader(new FileReader("*"));
try {
file = new File("*");
writer = new FileWriter(file, true);
writer.write(namesFile.readLine());
writer.write(System.getProperty("line.separator"));
writer.write("Stunde " + " Mittelwert " + " Stabw " + " Standarderror ");
writer.write(System.getProperty("line.separator"));
while ((strRead = namesFile.readLine()) != null) {
if (counter > 0) {
String splitarray[] = strRead.split(dlm);
part1 = splitarray[0]; //Zeit
String zeitteil[] = part1.split(dlm3);
strReadSekunde = zeitteil[2];
strReadMinute = zeitteil[1];
strReadStunde = zeitteil[0];
secondentry = splitarray[1]; //Messwert und Skala
String cutzwei[] = secondentry.split(dlm2);
strRead2 = cutzwei[1]; //Messwert
d = Double.parseDouble(strRead2);
d2 = (d*60)/1000;
m = Integer.parseInt(strReadMinute);
st = Integer.parseInt(strReadStunde);
sec = Integer.parseInt(strReadSekunde);
summe = summe + d2;
counter2++;
// System.out.println(d);
abc = abc + (summe-aver2)*(summe-aver2);//PROBLEM!!!
// System.out.println(abc);
if (st != stold) {
summed = summe + d2;
counter3 = counter2 - 1;
aver2 = (summed) / (counter2);
//mw = (summed-counter3*aver2)*(summed-counter3*aver2);
mw2 = Math.sqrt(abc / counter3);
ste = mw2 / Math.sqrt(counter3);
//ho = st - 1;
st2 = st - 1; //aktuelle stunde
if (st2 == -1) {
st2 = 23;
}
System.out.println("MittelW " + aver2 + " summe " + summed + " counter2 " + counter3 + " Messwert " + d2 + " SE " + ste + " stabw " + mw2 + " sekunde " + sec + " minute " + m + " stunde " + st2);
writer.write(st2 + " " + aver2 + " " + mw2 + " " + ste + " "+counter3);
writer.write(System.getProperty("line.separator"));
stold = st;
counter2 = 0;
summe = 0;
mw2 = 0;
stdev = 0;
mw3 = 0;
abc = 0;
}
} //break;
counter++;
}
writer.flush();
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
if (namesFile != null) {
namesFile.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Ausgabe
(die ersten und letzten beiden Zeilen; zusätzlich wird ein file generiert, in das er die Daten reinschreibt.)
MittelW -0.007871999824047089 summe -0.007871999824047089 counter2 0 Messwert -0.003935999912023544 SE Infinity stabw Infinity sekunde 17 minute 25 stunde 14
MittelW 0.8247612895651469 summe 1649.522579130294 counter2 1999 Messwert 1.258055971880257 SE 19.17678377986091 stabw 857.3974126640069 sekunde 6 minute 0 stunde 15
MittelW 0.5652572924944593 summe 1950.702916398379 counter2 3450 Messwert 0.9532799786925316 SE 17.165361168485276 stabw 1008.2366800278943 sekunde 6 minute 0 stunde 7
MittelW 0.8070397663090869 summe 2784.28719376635 counter2 3449 Messwert 0.757967983058095 SE 28.664106957959437 stabw 1683.3910462302338 sekunde 6 minute 0 stunde 8