Ergebnis 1 bis 4 von 4

Thema: [Statistik/Programmierung(C++)/Physik]

  1. #1

    [Statistik/Programmierung(C++)/Physik]

    Moin.

    Ich bin inzwischen am Verzweifeln bei der Erstellung eines Programmes zur Berechnung von Mittelwert, Standardabweichung und Standardabweichung des Mittelwertes bis zum jeweiligen Wert x.
    Genauer gesagt habe ich eine Datei mit 800 Messwerten und bis zu jedem der 800 Messwerte soll ich oben genannte Werte berechnen, doch will das im Bezug auf die Standardabweichungen nicht so recht funktionieren (die Standardabweichung wächst zunehmend, während die Standardabweichung des Mittelwertes mehr oder minder konstant bleibt), während die Mittelwerte sinnvoll erscheinen: Code

    Da bald das Semester endet wäre ich über schnelle Hilfe oder Hilfestellungen sehr dankbar...

  2. #2
    1. Dein Programm könnte einen Buffer Overflow haben. T[800] geht nur von 0 - 799 und da du mit 1 zu beginnen zählst und du 800 Werte hast, wirst du über 799 rausgehen.
    2. Du Reinitialisierst b nicht neu, ohne b wäre das vielleicht nicht passiert Daher wurde b immer grösser da du immer mehr dazuaddierst aber b nie mehr auf 0 setzt.
    s_T_M konnte ich nicht überprüfen, da ich nicht weiss, was damit gemeint ist (ja Standardabweichung des Mittelwertes aber was soll das )
    Das else in der Mitte hab ich rausgenommen stattdessen s_T und s_T_M zu beginn mit 0 initialisiert.
    Code (Cpp):
    #include <cmath>	// Mathematische Funktionen
    #include <iostream>	// Für Konsolenein- und Ausgabe
    #include <iomanip>	// Modifikation der Ein- und Ausgabe
    #include <fstream>	// Dateiein- und Ausgabe
    using namespace std;
     
    int main ()	{
    	ifstream in("Pendel.dat");
    	ofstream out("Pendel2.dat");
    	int x=1;
    	double T[801], T_M[801], s_T = 0, s_T_M = 0;
    	double a,b;
    	T_M[0]=0;
    	out<<"Werteanzahl	 Mittelwert	 Standardabweichung	 Standardabweichung Mittelwert"<<endl;
    	while (!in.eof()) {
    		in>>T[x];
    		T_M[x]=(1.0/x)*((x-1)*T_M[x-1]+T[x]);
    		if (x>1) {
    			a = 0;
    			for (int i=1;i<=x;i++) {
    				a += (T[i]-T_M[x])*(T[i]-T_M[x]);
    			}
    			s_T=sqrt(b/(x-1));
    			s_T_M=s_T/sqrt(x);
    		}
    		out<<x<< " " <<T_M[x]<< " " <<s_T<< " " <<s_T_M<<endl;
    		x++;
    	}
    	in.close();
     
    	out.close();
     
    	return 0;
    }
     

    Geändert von Drakes (31.01.2010 um 21:20 Uhr)

  3. #3
    Ah, wunderbar. Nachdem ich noch die letzten beiden b's rausgenommen habe ergeben die Werte nun auch Sinn. Lag also hauptsächlich an der fehlenden Nullsetzung von b, soweit ich das sehe ... Danke, hast mir damit sehr geholfen.

  4. #4
    Ja, gut dass du das gesehen hast. Hatte ja vergessen b durch a bei s_T zu ersetzen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •