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.
-
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...