DIAGONALISATION D'UNE MATRICE NXN

sonyone Messages postés 2 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 22 mars 2005 - 22 mars 2005 à 23:47
Huisne Messages postés 1 Date d'inscription vendredi 21 février 2014 Statut Membre Dernière intervention 21 février 2014 - 21 févr. 2014 à 17:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30240-diagonalisation-d-une-matrice-nxn

Huisne Messages postés 1 Date d'inscription vendredi 21 février 2014 Statut Membre Dernière intervention 21 février 2014
21 févr. 2014 à 17:56
J'ai téléchargé la macro de diagonalisation d'une matrice nxn.
Elle me permet de résoudre des problèmes relatifs aux calculs parasismiques.
Dans le manuel d'utilisation on indique la méthode pour diagonaliser à l'intérieur d'un programme après avoir copier le module "mdDiagonalisation".
Pas de problème pour copier le code.
Je rencontre des difficultés pour appeler la procédure Diagonalisation(A,V0,eps,itmax)...
Est-il possible de me proposer un exemple concret d'appel de la procédure, notamment pour définir préalablement A, V0, eps et itmax.
reynath Messages postés 1 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 9 mai 2011
9 mai 2011 à 15:12
J'ai testé sur une matrice 32x32 et ça fonctionne bien hormis sur les 4 derniers vecteurs propres qui sont complètement faux. Si quelqu'un sait pourquoi ?
Et sinon je pense qu'il y a un problème avec les valeurs propres évidentes.
myazou Messages postés 1 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 12 janvier 2011
12 janv. 2011 à 15:04
svp comment on télécharge le code :s merci pour votre aide
ledreff Messages postés 1 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 14:05
Bonjour,

Je viens de tester le programme diagonalisation.xls (dans le cadre de la mise en place d'une Analyse Factorielle des Correspondances (Statistiques)) et je trouve les bonnes valeurs propres mais pas les vecteurs propres souhaités, même en les normant (cf : commentaires précédents).
Comment puis-je arriver aux vecteurs propres souhaités?
Merci d'avance.

Matrice à diagonaliser :
0,475 0,137 0,274 0,115
0,316 0,170 0,404 0,110
0,268 0,171 0,465 0,096
0,385 0,159 0,332 0,124

Valeurs propres obtenues avec diagonalisation.xls et autre programme :
1 0 0 0
0 0,209 0 0
0 0 0,022 0
0 0 0 0,003

Vecteurs propres obtenues avec diagonalisation.xls :
1 1 -0,245 0,047
1 -0,388 0,494 1
1 -0,899 -0,261 -0,215
1 0,295 1 -0,871

Vecteurs propres obtenues avec autre programme (et souhaitées):
1 0,547 0,083 -0,005
1 -0,213 -0,167 -0,100
1 -0,492 0,088 0,022
1 0,162 -0,339 0,088
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 14:41
ok parfait, me voilà rassuré.
(OK aussi pour le M-1=tM, je l'avais oublié... c'est un peu loin pour moi...)
J'aurais peut être du rajouter la matrice normée dans les résultats. Le jour où je maîtriserai les macros VB sous openoffice je me pencherai peut etre sur la question....
Ca me donnera une occasion de faire une source "vraiment" libre....
bonne continuation
Merci
maxpant Messages postés 3 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 14:29
Et voilà, ma normalisation fonctionne et maintenant tout va bien, je vérifie :
matrice à diagonaliser = norm(VP)*D*norm(VP)'
où ' dénote la transposée. Pas d'inversion à faire, le temps de calcul vous dit merci.

Encore merci et bravo pour ton code, sa vitesse est impressionnante.
maxpant Messages postés 3 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 14:19
Le vrai pb c'est que comme la matrice des veps n'est pas normalisée, elle est orthogonale mais pas orthonormale. Et les matrices orthonormales ont cette sympathique propriété que M-1=tM, et donc c'est plus facile à manipuler (évite l'inversion de matrice).
Je pense que je me suis gouré dans la normalisation, sinon ça devrait marcher.

PS : je ne te met pas mon exemple, c'est une matrice 20*20...
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 14:05
Bonjour Maxpant, ce que vous dites m'étonne, il me semblait que ca fonctionnait, ce qui semblerait être confirmé avec la matrice dont parle LLARBI au dessus.
Mon problème est que je suis passé sous linux et je n'ai pas encore pris le temps de faire fonctionner tout ça sous openoffice... faut dire que je m'en sers plus du tout en fait...
du coup je peux pas tester sur d'autres matrices.
Pourriez vous me donner un exemple qui ne fonctionne pas ?

(NB : pas besoin de normaliser la base propre pour remettre la matrice diagonale dans la base initiale...la norme d'un vecteur propre n'a pour ainsi dire que peu d'importance !)
maxpant Messages postés 3 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 11:37
Très bien foutu, ça tourne au poil. Les valeurs propres sont très bonnes. Mais par contre les vecteurs propres... même après normalisation, quand je fais VP*D*VP', je ne retrouve pas la matrice initiale.
Je suis sur que les valeurs propres sont bonnes, je les ai vérifiées avec un autre logiciel.
Quel est donc le pb avec les vecteurs propres ?
chtebel Messages postés 62 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 3 janvier 2011 1
6 nov. 2008 à 15:34
Un bijou ton programme, a premier vue en tout cas. En vba yen a pas des masses qui trainent sur le net.

encore bravo
++
elwely08 Messages postés 1 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 21 mai 2008
21 mai 2008 à 16:39
%Merci pour votre aide.
LLARBI Messages postés 3 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 21 avril 2008
21 avril 2008 à 14:41
Je vous remercie pour la réponse que vous m'avez fait parvenir concernant la diagonalisation. Un grand merci pour votre aide et votre intérêt qui m'a donné la joie et un soulagement d'une charge mentale qui a durée plus d'une journée....
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
21 avril 2008 à 13:49
les vecteurs propres données par le programme ne sont effectivement pas normés
il faut donc diviser chaques vecteurs par leur normes respectives et tu retombes bien sur la matrice de ton corrigé (enfin dans ton exemple c'est le négatif de la norme qu'il faut appliquer).

la particularité du programme est de toujours renvoyé une coordonnée de valeur 1 sur les vecteurs et de calculer les autres coordonnées à partir de cette valeur.

les 2 matrices données par le programme et ton corrigé sont donc colinéaires !
donc on peut dire que ce sont les meme d'un point de vue diagonalisation (ce qui compte dans une matrice de vecteur propre c'est la base qu'il forme donc la norme importe peu....)

voili, bon courage pour la suite....
LLARBI Messages postés 3 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 21 avril 2008
21 avril 2008 à 13:20
Ennoncé
Matrice à diagonaliser Corrigé de l'exercice Soluation proposée par l'utilitaire
1.000 -0.533 0.347 0.445 0.879 -0.167 -0.682917133 1 0.228615005
-0.533 1.000 -0.950 -0.651 0.189 -0.734 1 0.215456797 1
0.347 -0.950 1.000 0.614 -0.436 -0.657 -0.942507508 -0.495975185 0.895350847

?1=2.260 ?2=0.712?3=0.026 ?1=2.259 ?2=0.713 ?3=0.028

Suite du commentaire précédent
LLARBI Messages postés 3 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 21 avril 2008
21 avril 2008 à 13:05
Bonjour,
je ne suis mathématicien mais avoir toujours besoin de diagonalisation de matrice lors d'analyse des données appliquées au marketing.

en utilisant cet utilitaire de diagonalisation, je retrouve des valeurs propres comme annoncé dans le corrigé des exercices. Mais les vecteurs propores sont différents, et surtout non normés. Comment résoudre ce problème ?
MERCI.
adelzeglaoui Messages postés 1 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 novembre 2007
28 nov. 2007 à 16:26
Bonjour,

J'essaie de diagonaliser une matrice 111*111 mais ça bug je ne sais pas pourquoi:(
vous avez une idee pourquoi ca bloque?
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
26 juil. 2005 à 20:46
alors, y'a un élément qui fait modifier completement le temps de calcul, c'est la précision demandé. comme c'est un calcul basé sur l'itération, il faut se méfier de cette précision car l'erreur se multiplie au fur et à mesure, surtout si les matrices sont grosses (beaucoup d'itérations...). donc tes dernières valeurs propres et vecteurs propres risquent de pas etre tres justes...
méfiances....
cchevali Messages postés 5 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 26 juillet 2005
26 juil. 2005 à 09:09
C'est marrant, j'ai tout recupéré ta fonction de diagonalisation pour mon boulo (j'ai de grosses bestioles à diagonaliser) en finance de marché, et la ca tourne presque instantanement pour une 20x20 !
Donc le temps de calcul devait etre pris par des choses annexes (enfin... j'ai pas trop le temps de regarder). L'espoir renait
;-)
Encore merci pour ta source, ca m'enleve une bonne epine du pied !
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
25 juil. 2005 à 19:05
Je ne connais malheureusement pas d'autres sources sur le sujet (sinon je n'aurais surement pas fait celle la :-p)
Pour ce qui est de la rapidité, j'avoue ne m'etre arrêté qu'aux matrices 12x12... je sais pas te dire s'il existe plus rapide. A ma connaissance non... mais en fouillant un peu, on est toujours surpris par les mathématiques... et ca m'interesse de le savoir si tu trouves des infos sur le sujet.
En tout cas merci pour ton commentaire.
cchevali Messages postés 5 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 26 juillet 2005
25 juil. 2005 à 16:06
Une belle source merci.
Tu semble assez bien connaitre le probleme. Tes algorithmes sont ils rapides ? Parce que avec une matrice 20x20 il a un peu de mal (1-2 minutes). Je n'ose pas essayer pour une 50x50...
Si tu connais d'autres sources, je suis preneur.
@+
dam81 Messages postés 6 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 20 novembre 2008
25 mars 2005 à 08:57
Désolé, j'avais déjà corriger ce bug, mais j'ai du mettre une mauvaise version de mon fichier sur le site. je la met à jour tout de suite.
Merci d'avoir relever cette erreure

Bonne diagonalisation...
cdunyach Messages postés 1 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 25 mars 2005
25 mars 2005 à 08:48
moi je suis arrivé à rentrer la dimension, mais c'est pendant le calcul qu'il a planté.
Avec le debogueur j'ai réussi à réparer: apparemment c'est la matrice à diagonaliser, qui est dimensionnée sous le nom "MTemp()" et qui est utilisée sous le nom "MT()". Je suis pas du tout un développeur, mais je suis tres fier d'avoir trouvé le problème!!!
sonyone Messages postés 2 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 22 mars 2005
22 mars 2005 à 23:47
j ai l impression que ca marche pas , quand je rentre la dimension il plante ............
Rejoignez-nous