web-dev-qa-db-fra.com

Combien coûte-t-il de calculer les valeurs propres d'une matrice?

Combien coûte-t-il de calculer les valeurs propres d'une matrice?

Quelle est la complexité des meilleurs algorithmes?

Combien de temps cela prend-il en pratique si j'ai une matrice 1000 x 1000? Je suppose que cela aide si la matrice est rare?

Existe-t-il des cas où le calcul de la valeur propre ne se terminerait pas?

Dans R, je peux calculer les valeurs propres comme dans l'exemple de jouet suivant:

m<-matrix( c(13,2, 5,4), ncol=2, nrow=2 )
eigen(m, only.values=1)
$values
[1] 14  3

Est-ce que quelqu'un sait quel algorithme il utilise?

Existe-t-il d'autres packages (open-source) qui calculent la valeur propre?

30
Frank

La plupart des algorithmes de calcul de valeurs propres vont jusqu'à big-Oh (n ^ 3), où n est la dimension ligne/colonne de la matrice (symétrique et carrée).

Pour connaître la complexité temporelle du meilleur algorithme jusqu'à ce jour, vous devrez vous reporter aux derniers travaux de recherche en calcul scientifique/méthodes numériques.

Mais même dans le pire des cas, il vous faudrait au moins 1000 ^ 3 opérations pour une matrice 1000x1000.

R utilise par défaut la routine LAPACK (DSYEVR, DGEEV, ZHEEV et ZGEEV). Cependant, vous pouvez spécifier EISPACK = TRUE en tant que paramètre pour utiliser les routines RS, RG, CH et CG d'un EISPACK.

Les packages Open Source les plus populaires et les plus performants pour le calcul des valeurs propres sont LAPACK et EISPACK.

20
amit-agrawal

Avec les grandes matrices, vous ne voulez généralement pas toutes les valeurs propres. Vous voulez juste que les plus rares fassent (disons) une réduction de dimension.

L'algorithme canonique est l'algorithme itératif d'Arnoldi-Lanczos implémenté dans ARPACK:

www.caam.rice.edu/software/ARPACK/

Il y a une interface matlab dans eigs:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/eigs.html

eigs(A,k) and eigs(A,B,k) return the k largest magnitude eigenvalues.

Et il existe maintenant une interface R:

http://igraph.sourceforge.net/doc-0.5/R/arpack.html

18
ramanujan

Je suppose que cela aide si la matrice est rare?

Oui, il existe des algorithmes qui fonctionnent bien sur des matrices creuses.

Voir par exemple: http://www.cise.ufl.edu/research/sparse/

12
vartec

Combien de temps cela prend-il en pratique si j'ai une matrice 1000x1000?

MATLAB (basé sur LAPACK) calcule sur une machine bicœur à 1,83 GHz toutes les valeurs propres d'une variable aléatoire 1000x1000 en environ 5 secondes. Lorsque la matrice est symétrique , le calcul peut être fait beaucoup plus rapidement et ne nécessite que 1 seconde environ.

8
Fanfan

Je jetterais un coup d'œil à Les algorithmes à valeur propre , qui renvoient à un certain nombre de méthodes différentes. Ils auront tous des caractéristiques différentes, et j'espère que l'un d'eux conviendra à vos besoins.

5
Brian Agnew

Apache Mahout est un framework open-source construit sur map-réduire (c’est-à-dire qu’il fonctionne pour de très grandes matrices). Notez que pour beaucoup de matrices matricielles, la question n'est pas "Quelle est la durée d'exécution du big-o" mais plutôt "A quel point est-ce qu'il est parallélisable?" Mahout dit ils utilisent Lanczos, qui peut être exécuté en parallèle sur autant de processeurs que vous le souhaitez.

2
Xodarap

Il utilise l'algo QR. Voir Wilkinson, J. H. (1965) Le problème des valeurs propres algébriques. Clarendon Press, Oxford. Il n'exploite pas la pauvreté.

0
power