Formel für Standardabweichung ?



  • Ich will die 😮 in einem c programm ausrechnen. kennt einer von euch die entsprchende formel um es in c zu verwenden können. Ich bedanke mich schon mal für eure mithilfe. 😮



  • wenn du ne formel suchst, hat das ja nicht gerade viel mit c oder c++ zu tun 😮 😃



  • Das problem ist ja, dass ich die formel in c haben möchte und nicht in mathe nd da weiß ich nicht weiter.



  • Hast du die Formel? Wenn ja, was daran schafst du nicht in C++ umzusetzen?



  • Auf dieser seite steht die formel. also ich werd da nicht schlau draus.

    http://de.wikipedia.org/wiki/Standardabweichung



  • vielleicht kann ich dir das ganze etwas verdeutlichen.

    sagen wir, wir haben folgende zahlenfolge: 3 6 4

    der mittelwert x (durchschnitt) wird dann wie folgt ausgerechnet: (3+6+4)/3 = 4,3

    soweit sollte es ja bekannt sein.

    die varianz V erhält man dann folgendermaßen:

    V = [(zahl1 - mittelwert)² + (zahl2 - mittelwert)² + (zahl3 - mittelwert)²] / anzahl_der_zahlen

    auf unser beispiel bezogen bekommen wir dann:

    V = [(3 - 4,3)² + (6 - 4,3)² + (4 - 4,3)²] / 3 = 1,55666...

    um jetzt die standardabweichung s zu bekommen, müssen wir einfach nur die wurzel von der varianz ziehen:

    s = sqrt(1,55666) = 1,247...



  • Welche Standardabweichung braucht er?
    Die die auf N oder die Auf n-1 basiert? Für kleine Stichproben ist n-1 anzuwenden für große Stichproben reicht die Kenntnis der asymptotischen Annäherung und somit n



  • V = 0;
    for (int i = 1; i < N; i++)
      V += (x[i] - mu) * (x[i] - mu);
    V /= N;
    s = sqrt(V);
    

    Nur die 1:1-Umsetzung zum Verständnis - numerisch-mathematisch ist das sicherlich nicht gerade optimal...



  • Ist das korrekt? (Varianz mit N-1)

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
        //Array
        const int N = 3; //Elemente im Array
        double x[N] = { 1.0, 2.0, 3.0 };
    
        //Mittelwert m
        double m;
        for (int i = 0; i < N; i++) 
        {
            m += x[i];
        }
        m /= N;
    
        //Varianz var
        double var = 0; 
        for (int i = 0; i < N; i++) 
        {
            var += (x[i] - m) * (x[i] - m); 
        }
        var /= ( N-1 ); 
    
        //Standardabweichung sigma
        double sigma = sqrt( var );
    
        cout << "Mittelwert:         " << m     << endl;
        cout << "Varianz:            " << var   << endl;
        cout << "Standardabweichung: " << sigma << endl;
    }
    


  • vielen Danke KKS_nli du kannst super erklären, habs sofort gerafft, auf wiki bin ich verzweifelt!!!



  • Cocaine schrieb:

    Nur die 1:1-Umsetzung zum Verständnis - numerisch-mathematisch ist das sicherlich nicht gerade optimal...

    Und Laufzeittechnisch kann man da auch noch was rausholen 😉

    double mean=0;
    double variance=0;
    for (size_t i = 0; i != data.size(); ++i)
    {
        mean += data[i];
        variance += data[i]*data[i];
    }
    mean/= data.size();
    variance=variance/data.size() - mean*mean;
    

    ist eventuell auch numerisch stabiler...


Anmelden zum Antworten