Gast
#484657
Hallo, ich bin am Verzweifeln: Könnt ihr mal schnell nachschauen, ob ich die Varianz mit dieser Funktion richtig berechne? Die Formel für die Varianz ist laut Wikipedia: E(x^2) - (E(x))^2 http://de.wikipedia.org/wiki/Varianz Dummerweise liefert meine Funktion bei einer Messwertvektorgröße von n lediglich 1/n von dem, was die OpenCV - cvCalculateCovarianceMatrix - Funktion für das entsprechende Diagonalelement zurückgibt... Ich bin echt am verzweifeln, denn ich finde meinen Fehler nicht. Könnt ihr vielleicht mal kurz darüberschauen? Hier meine Funktion: // Funktion Variance berechnet die Varianz der Messwerte im Vektor pSample // FloatMatrix: int rows -Anzahl der Zeihlen int columns -Anzahl der Spalten float* data -Array der Größe rows*columns double Variance ( FloatMatrix* pSample){ if ( pSample->columns !=1){ printf( "Error, pSample should have only 1 column - because I need a VECTOR of samples"); return -1; } double mean_x = 0; //E(x) double xSquared = 0; //E(x^2) for ( int i = 0; i < pSample->rows; i ++){ xSquared += (pSample->data[i] * pSample->data[i]); mean_x += pSample->data[i]; } double mean_xs = xSquared / pSample->rows; mean_x = mean_x/ pSample->rows; double var = mean_xs - (mean_x * mean_x); return var; } Zahlenbeispiel: Meine Messreihe (n = 10): 5.00 33.00 15.00 35.00 21.00 24.00 29.00 21.00 31.00 27.00 43.00 16.00 49.00 18.00 51.00 10.00 61.00 4.00 65.00 12.00 Kovarianzmatrix mit OpenCV: 3600.00 -1656.00 -1656.00 900.00 Test mit meiner Varianzfunktion Vektor pSample wird mit der linken Spalte der Messreihmatrix gefüllt Varianz: 360.00 Warum??? Danke für eure Hilfe