IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Calculs des vecteurs propres d'une matrice Symétrique


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut Calculs des vecteurs propres d'une matrice Symétrique
    Bonjours,

    pour les besoin d'un projet j'applique l'algorithme PCA sur une base d'images, mais voila arrivé a l'étape du calcul des vecteur propres (et valeur propres) je bloque, j'ai chercher sur internet et j'ai trouvé pas mal d'algorithme qui implémentait ca mais je ne comprend pas très bien a chaque fois, alors je demande si on peut m'aiguiller sur un algorithme efficace(pas trop lent ), et aussi qui soit compréhensible et donc pas extrêmement difficile à implémenter, enfin je voudrait des avis.

    Merci.

    NB : La matrice est Symétrique et d'une taille de (50x50).

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Dans "Numerical Recipes", section 11.0.4, on lit ceci:
    You have probably gathered by now that the solution of eigensystems ia a fairly complicated business. It is. It is one of the few subjects covered in this book for which we do not recommend that you avoid canned routines.
    Je te recommande donc d'utiliser des sous-programmes tous faits. Alors, commence par regarder si tu trouves ce dont tu as besoin dans la librairie LAPack, gratuite sur le site www.netlib.org, ou dans Matlab (cher), ou dans Scilab ou Octave (gratuits).
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    merci pour votre réponse, j'utilise OpenCv en C++ pour réaliser mon projet et j'ai déjà trouvé des algo tous-fait déjà implémenté dans OpenCv, Mais bon voila moi j'ai vraiment envie d’enrichir mes connaissance, et donc je veux comme même essayer de réaliser moi même l'algorithme de calcul ou en moins en faire une partie. En parlant de cela j'ai vu que les meilleur algorithme concernant les matrice Symétrique était la méthode de Jacobi, et j'ai aussi trouvé de bon retour par rapport a la méthode QR, ou encore la Décomposition en valeur Singulière.

    donc voila de ces méthode pouvais vous me conseillé une qui serait efficace et pas trop trop difficile a programmer !

    Merci Beaucoup.

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Au chapitre 11 de "Numerical Recipes", tu trouveras les listings des sous-programmes écrits en C++. Que te faut-il de plus?
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    si tu souhaites enrichir tes connaissances dans le domaine, je te conseille la lecture de deux livres totalement gratuits :

    - numerical methods for large eigenvalue problems :
    http://www-users.cs.umn.edu/~saad/books.html

    - templates for the solution of algebraic eigenvalue problems :
    http://www.cs.ucdavis.edu/~bai/ET/contents.html

    Si tu souhaites te procurer un livre payant sur le sujet, je peux aussi t'indiquer des ouvrages de référence.

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!
    Au chapitre 11 de "Numerical Recipes", tu trouveras les listings des sous-programmes écrits en C++. Que te faut-il de plus?
    Jean-Marc Blanc
    +1 et petite précision... pour les matrices symétriques le meilleur algorithme est celui de Jacobi (dont tu as les sources).
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Bonsoir,

    si tu souhaites enrichir tes connaissances dans le domaine, je te conseille la lecture de deux livres totalement gratuits :

    - numerical methods for large eigenvalue problems :
    http://www-users.cs.umn.edu/~saad/books.html

    - templates for the solution of algebraic eigenvalue problems :
    http://www.cs.ucdavis.edu/~bai/ET/contents.html

    Si tu souhaites te procurer un livre payant sur le sujet, je peux aussi t'indiquer des ouvrages de référence.
    Merci beaucoup je verrai ca, enfin sachant que l'algorithme de jacobi est le plus performant je vais me concentrer a fond pour bien le comprendre et le faire, si j'ai un problème je reviendrait .

    Merci pour ta réponse et sinon en ce qui concerne les livre payant, je suis algérien et malheureusement ici on a aucun moyen pour se procurer de telle livre.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    si tu es dans l'impossibilité de te procurer des livres payants, tu peux toujours en consulter certains (partiellement) en allant sur http://books.google.fr.

    LE livre de référence sur les problèmes aux valeurs propres symétriques :
    http://books.google.fr/books?id=mWin...page&q&f=false

    Bonne continuation!

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par nadal1991 Voir le message
    merci pour votre réponse, j'utilise OpenCv en C++ pour réaliser mon projet et j'ai déjà trouvé des algo tous-fait déjà implémenté dans OpenCv, Mais bon voila moi j'ai vraiment envie d’enrichir mes connaissance, et donc je veux comme même essayer de réaliser moi même l'algorithme de calcul ou en moins en faire une partie. En parlant de cela j'ai vu que les meilleur algorithme concernant les matrice Symétrique était la méthode de Jacobi, et j'ai aussi trouvé de bon retour par rapport a la méthode QR, ou encore la Décomposition en valeur Singulière.

    donc voila de ces méthode pouvais vous me conseillé une qui serait efficace et pas trop trop difficile a programmer !

    Merci Beaucoup.
    Seule solution, prendre un bon livre tel que le Golub pour comprendre les problématiques. Attention, c'est de l'anglais.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    rebonsoir,

    bon voila j'ai réussi a implémenter la méthode de Jacobi pour le calcul des valeur et vecteur propre, j'ai fait des test sur des matrice a petit nombre et elle marche bien ! mais voila la je me retrouve face a un problème, quand j'essaye d'appliquer JACOBI a une matrice (de n'importe qu'elle dimension ) mais avec des coefficient très grands ( de l'ordre de 10^6) je me retrouve avec l'algorithme qui boucle et qui ne fini pas, donc je voulais savoir si la méthode de Jacobi avait un problème avec les coefficients très très grand ? et aussi si c'était possible de par exemple diviser la matrice sur un grand nombre pour réduire la taille des coefficient et après application de l'algorithme de Jacobi pouvoir récupérer les valeur et vecteur propre de la matrice d'origine !

    merci.

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Grand nombre ou petit nombre, ce n'est pas ça qui est problématique, mais petit conditionnement ou grand conditionnement !

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    dans mon cas je pense que si ca pose un probleme la grandeur des coefficient sinon comment expliquer que ca donne une réponse rapide et juste pour des matrice a coefficient normaux et que la methode boucle sans fin pour des matrice a coefficient très grand?? (et je parle des coefficient pas de la taille de la matrice )

    et sinon tu voulais dire quoi par "conditionnement" j'ai pas saisi ?

    Merci

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le conditionnement, c'est super important, c'est le rapport entre la valeur propre la plus grande et la plus faible. Si tu dépasses la précision du type que tu utilises, tu auras des imprécisions et potentiellement le problème que tu as de stabilité.
    De manière générale, il faut mettre une limite en nombre d'itérations et sortir une erreur si la méthode ne converge pas.

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    je vient de un peux me documenter sur le conditionnement et avec ce que t'a dit je comprend un peux mieux ce probleme, mais:" faire une condition pour sortir si on boucle trop " ca m'aide pas moi, j'ai pas envie de gérer, j'ai besoin d'avoir ces vecteur et valeur propre; alors y'a t'il une chose a faire avant ou pendant l'algorithme pour bien conditionner notre matrice et faire que l'algorihtme marche ?

    merci.

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Non, il n'y a rien à faire. Si ta matrice est mal conditionnée, elle est mal conditionnée.

    Et toutes les routines sortent et retournent une erreur en cas de défaut de convergence.

  16. #16
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    il faut préconditionner le problème pour améliorer son conditionnement. Dans les cas des problèmes aux valeurs propres, l'approche la plus simple consiste à équilibrer les lignes et colonnes de ta matrice à l'aide d'une matrice diagonale : A <- DAD, où D est diagonale. On choisit la même matrice diagonale à gauche et à droite de A pour préserver la propriété de symétrie. Si ta matrice est à diagonale dominante, tu peux choisir D égale à la matrice formée par les racines carrées des inverses des coefficients diagonaux de A. En théorie, A devrait aussi vérifier la propriété A de Young mais le temps d'essayer de vérifier ça tu auras déjà eu le temps de tester si ce préconditionnement fonctionne ou pas! Si ça ne marche pas bien, tu peux aussi prendre D égale à la matrice formée par les racines carrées des normes infinies des lignes de A. Si ça ne marche toujours pas, essaye les préconditionneurs décrits dans ce document :
    http://www.google.fr/url?sa=t&source...0gRsBtEcT-FWqQ

    Si rien ne fonctionne, il faudra utiliser des méthodes plus sophistiquées et vérifier que tu as correctement codé tes algorithmes.

  17. #17
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Non, il n'y a rien à faire. Si ta matrice est mal conditionnée, elle est mal conditionnée.
    Beaucoup des matrices que l'on rencontre en pratique sont mal conditionnées et heureusement il y a toujours quelque chose à faire pour y remédier (préconditionnement). Dans le cas présent, c'est plutôt au conditionnement des paires propres de la matrice auquel il faut s'intéresser.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Deux petits trucs si ta matrice est mal conditionnée...

    1- si c'est en fait une matrice de variance covariance, le mieux est d'utiliser une SVD sur la donnée initiale. En général c'est nettement plus robuste. Mais tu peux aussi essayer une SVD directement sur la matrice (la décomposition en valeurs singulières, c'est robuste à la base).

    2- ajoute à ta matrice l'identité fois une petite valeur (la plus grande valeur propre fois 1e-6 quelque chose du genre: A + e Id, e petit), ca va mécaniquement améliorer le conditionnement, sans trop modifier les vecteurs propres "principaux" (portés par les grosse valeurs propres). Ca revient, implicitement, à régulariser la recherche des vecteurs propres.

    Francois
    Dernière modification par Invité ; 17/06/2011 à 21h37.

  19. #19
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Il y a une question qui n'a pas été abordée dans cette discussion, à savoir si tu cherches toutes les valeurs propres ou seulement quelques-unes (les plus grandes ou les plus petites). Dans ce dernier cas, la méthode de la puissance itérée mériterait d'être envisagée.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  20. #20
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,
    mes souvenirs d'algèbre linéaire sont un peu poussiéreux mais il me semble que :

    Soit une matrice symétrique réelle. Soit la matrice diagonale telle que (voir algos de diagonalisation d'une matrice). Alors, est orthogonale et ses colonnes sont les vecteurs propres de .

    Des vecteurs propres de il est facile d'en déduire les valeur propres. Me tromperais-je ?
    -- Yankel Scialom

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/03/2009, 19h39
  2. valeurs propres et vecteurs propres d'une matrice
    Par galadorn dans le forum C++
    Réponses: 2
    Dernier message: 28/02/2009, 20h06
  3. valeurs propres d'une matrice symétrique réelle
    Par afnane dans le forum Mathématiques
    Réponses: 15
    Dernier message: 18/06/2008, 16h39
  4. Calcul rapide des valeurs propres d'une matrice creuse
    Par gsagnol dans le forum Mathématiques
    Réponses: 3
    Dernier message: 21/12/2007, 23h37
  5. Réponses: 15
    Dernier message: 18/07/2007, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo