Con "secondi momenti", la documentazione indica il secondo central moment.
Nel caso di dati unidimensionali, questo sarebbe il variance (o quadrato della deviazione standard).
Nel tuo caso, dove hai dati bidimensionali, il secondo momento centrale è il covariance matrix.
Se X
è una matrice n-by-2 dei punti nella vostra regione, è possibile calcolare la matrice di covarianza Sigma
in MATLAB come questo (non testata):
mu=mean(X,1);
X_minus_mu=X-repmat(mu, size(X,1), 1);
Sigma=(X_minus_mu'*X_minus_mu)/size(X,1);
Ora, che cosa ha a che fare con ellissi? Bene, quello che stai facendo qui è, in effetti, adattando uno multivariate normal distribution ai tuoi dati. La matrice di covarianza determina la forma di quella distribuzione e le curve di livello di una distribuzione normale multivariata - aspettalo - are ellipses!
le direzioni e lunghezze degli assi dell'ellisse sono dati dai autovettori e autovalori della matrice di covarianza:
[V, D]=eig(Sigma);
Le colonne V
ora sono gli autovettori (ossia le direzioni degli assi), e valori sulla diagonale di D
sono gli autovalori (cioè le lunghezze degli assi). Quindi hai già "MajorAxisLength" e "MinorAxisLength". L'orientamento è probabilmente solo l'angolo tra l'asse maggiore e l'orizzontale (suggerimento: usare atan2
per calcolare questo dal vettore che punta lungo l'asse maggiore). Infine, il eccentricity è
sqrt(1-(b/a)^2)
dove a è la lunghezza dell'asse maggiore e b è la lunghezza dell'asse minore.
fonte
2009-10-08 16:03:29
Grazie. Questo è molto ben scritto e sembra esattamente ciò di cui ho bisogno. – BigBeagle
+1 - SO ha bisogno di spiegazioni più eleganti come questa ... quando si tratta di matematica, almeno. – Jacob
Btw, puoi calcolare la covarianza in MATLAB direttamente con 'cov' ma il tuo codice era ovviamente più istruttivo. – Jacob