Par "deuxième moments", la documentation signifie que le deuxième central moment.
Dans le cas de données unidimensionnelles, il s'agit du variance (ou le carré de l'écart-type).
Dans votre cas, où vous avez des données bidimensionnelles, le deuxième moment central est le covariance matrix.
Si X
est une matrice n par 2 des points dans votre région, vous pouvez calculer la matrice de covariance Sigma
dans Matlab ce (non testé):
mu=mean(X,1);
X_minus_mu=X-repmat(mu, size(X,1), 1);
Sigma=(X_minus_mu'*X_minus_mu)/size(X,1);
Maintenant, qu'est-ce que cela a à faire avec des ellipses? Eh bien, ce que vous faites ici est, en effet, d'adapter un multivariate normal distribution à vos données. La matrice de covariance détermine la forme de cette distribution, et les courbes de niveau d'une distribution normale multivariée - attendez-la - are ellipses!
Les orientations et les longueurs des axes de l'ellipse sont donnés par les vecteurs propres et les valeurs propres de la matrice de covariance:
[V, D]=eig(Sigma);
Les colonnes de V
sont maintenant les vecteurs propres (à savoir les directions des axes), et les valeurs sur la diagonale de D
sont les valeurs propres (c'est-à-dire les longueurs des axes). Donc vous avez déjà les 'MajorAxisLength' et 'MinorAxisLength'. L'orientation est probablement juste l'angle entre l'axe principal et l'axe horizontal (indice: utilisez atan2
pour calculer ceci à partir du vecteur pointant le long de l'axe principal). Enfin, le eccentricity est
sqrt(1-(b/a)^2)
où est la longueur de l'axe principal et b est la longueur de l'axe mineur.
Merci. Ceci est très bien écrit, et ressemble exactement à ce dont j'ai besoin. – BigBeagle
+1 - SO a besoin d'explications plus élégantes comme ça ... quand il s'agit de mathématiques, au moins. – Jacob
Btw, vous pouvez calculer la covariance dans MATLAB directement avec 'cov' mais votre code était évidemment plus instructif. – Jacob