[Algèbre] Diagonalisation des matrices
Posté le 22/03/2014 17:29
A la veille de mes concours de fin de prépa, je me suis rappelé que personne à ma connaissance n'avait réussi à diagonaliser des matrices avec la calculette, alors, après avoir abandonné puis recommencé puis à nouveau abandonné j'ai relevé le défi!
Donc voilà, les programmes sont en fichier joint!
- DIAGO
Diagonalise la matrice si cela est possible
- EGALMAT
Renvoie le booléen, "Mat A=Mat B" (peut être utile!)
- COMTRIX
Renvoie la comatrice et
l'inverse de la matrice
ATTENTION: Programmes à utiliser avec
PRÉCAUTIONS, je ne garantis pas la justesse des résultats dans tous les cas!
Programmes auxiliaires:
- NB ZERO
Compte le nombre de lignes nulles dans la matrice échelonnée, ce qui correspond à Dim Ker M
- D2
programme auxiliaire pour éviter les bugs de SolveN
Maintenant quelques explications!
Vous savez tous
qu'une matrice de Mn,p (lR) représente une application linéaire de lR^p dans lR^n.
Ici on s'intéresse au cas n*n, c'est-à-dire les matrices de Mn(lR) représentant les endomorphismes de lR^n.
On définit le
spectre d'une matrice M par:
Sp(M)={ λ∈lR,∃X∈Mn,1(lR), MX = λX }
Les λ sont les
valeurs propres associées aux
vecteurs propres X (on identifie matrice colonne et vecteur).
Pour déterminer le spectre, j'utilise la fonction SolveN, appliquée à Det:
SolveN ( Det (Mat M - X Mat I, X))
En réduction, on définit le
polynôme caractéristique de M par:
XM=det( M - λ*I )
où I est la matrice identité d'ordre n.
X
M est un polynôme en λ, et le spectre est inclus dans l'ensemble des racines de X
M!
On dit qu'une matrice est
diagonalisable si et seulement si elle est semblable à une matrice diagonale.
C'est-à-dire qu'il existe une base de lR^n constituée de vecteurs propres de M.
La caractérisation dont je me sers:
M est diagonalisable si et seulement si:
n = ∑(λ∈Sp(M)) Dim Eλ
où les Eλ sont les sous-espaces propres associés aux valeurs propres λ.
De plus,
j'utilise la fonction Ref (inconnue au bataillon depuis des lustres).
En fait, elle donne la matrice échelonnée, la "Row Echelon Form" (et Rref la "Row Reduced Echelon Form"), cf Wikipédia pour plus d'informations.
Bref, le résultat dont je me sers est le suivant:
le rang de la matrice M est égal au nombre de lignes non nulles de la matrice échelonnée.
Or, par théorème du rang, Dim Ker Eλ = n - rg (M-λI).
Donc: pour obtenir la dimension de chaque sous-espace propre, je compte simplement le nombre de lignes nulles dans la matrice échelonnée de M.
Si la somme des dimensions est égale à n, c'est diagonalisable, je renvoie la matrice diagonale avec les ω(λ) valeurs propres placées sur la diagonales.
( ω(λ) est l'ordre de multiplicité de λ en tant que racine de X
M, qui est égal à la dimension de Eλ dans le cas diagonalisable )
Voilà!
Si quelqu'un trouve une erreur quelconque, un contre-exemple ou carrément une erreur théorique grave dans mes programmes, qu'il m'en fasse part.
Sur ce, bonne diagonalisation à tous!
En bonus: le programme qui donne la comatrice et inverse la matrice si possible!
Fichier joint
Citer : Posté le 22/03/2014 17:34 | #
Bon, je précise:
si vous ne comprenez rien, c'est normal! (je dis ça pour Eltoredo surtout... )
Mais bon ça peut éventuellement rendre service aux Maths Spé, et à moi par la même occasion!
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 22/03/2014 17:41 | #
Je devais diagonaliser une matrice dans une interro la semaine passée...
Et...Je me suis trompé dans le déterminant... :stupid:
oui je voulais me pendre
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 22/03/2014 17:42 | #
Argh, tu m'as perdu !
Je n'ai plus le niveau là
Mias bravo quand même, il a l'air sacrément bien foutu
Je le testerai si j'arrive à retransférer quoi que ce soit vers ma calculatrice.
Citer : Posté le 22/03/2014 17:42 | #
En même temps... La réduction c'est que du calcul c'est pas hyper passionnant...
Ajouté le 22/03/2014 à 17:44 :
Merci Lephenixnoir
(je sens qu'il va me trouver un bug au bout d'une minute... )
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 22/03/2014 17:47 | #
Désolé, il n'y a pas le moindre risque
Si seulement on pouvait faire ça plutôt que des statistiques/probabilités en cours
Ça me met en rage rien que d'y penser, que toi tu t'éclates à faire ça pendant que moi je m'emmerde devant mes variables aléatoires
...
Citer : Posté le 22/03/2014 19:03 | #
@Alex_1186 : excellente initiative ! Pourquoi ne pas pousser le concept un peu plus loin et proposer un outil dans la section utilitaires ?
Pour ma part je pense que non seulement ça va me permettre de vérifier mes résultats, mais ça me servira sans aucun doute également pour les calculs d'hyperstaticité en SI, lorsque il faut déterminer le rang cinématique d'un système de 24 équations (ce qui m'est arrivé en épreuve orale il y a moins d'une semaine).
Quitte à diagonaliser, pourquoi ne pas donner la dimension des sous-espaces propres, ainsi que les vecteurs propres ? Les valeurs propres étant connues, avec la trace et le déterminant on peut dans un certain nombre de cas faire ces calculs sans trop de difficulté non ?
Super d'avoir partagé ça avec nous en tout cas.
@BTL : la diagonalisation c'est has-been, maintenant on trigonalise (véridique !) !
@Lephenixnoir : au contraire, si tu t’ennuies, profite en pour faire comme Alex' et développer des outils pour tes variables aléatoires et nous faire l'honneur de les partager avec nous !
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 22/03/2014 19:09 | #
@Ne0tux
J'ai fait pas mal de programmes de maths (formes de polynômes du 2nd degré, résolution pas à pas, cours complets...) mais je n'arrive vraiment pas à les organiser.
Je pense que je vais les compiler en un grand add-in pour réunir tous les cours que j'aurai notés.
Néanmoins j'ai déjà énormément de boulot (3 projets en add-in particulièrement, plus la partage de graphismes en web), et je ne suis pas sûr de pouvoir tout gérer à la fois.
Mais bon, je vais essayer, après tout on ne sait jamais.
Citer : Posté le 23/03/2014 10:58 | #
Merci Ne0!
Bon par contre faut que je vous prévienne de quelques trucs...
Déjà la complexité des fonctions est cubique! (je pense, en tout cas ça rame vite) Donc évitez les matrices 100*100...
J'ai eu des tonnes de bugs, et je ne suis toujours pas sûr que ça marche! D'autant que mon utilisation de la matrice échelonnée est tout de même assez empirique...
Je vous conseille fortement d'essayer sur des exemples connus avant de s'en servir pour de vrai!!!!!
Si vous tombez sur un résultat incohérent, dites-le moi!
Une erreur que j'ai rencontré: la fonction SolveN est perfectible, si les racines sont trop éloignées, genre {1.1;1.01;358000}, elle en oublie parfois! Donc ça peut bugger parfois, je me décharge de toute responsabilité!
@Ne0: Tu sais j'ai fait ça vite fait, mais si toi (ou quelqu'un d'autre) veut reprendre le code et faire un bon truc je l'y autorise sans problème!
Pour les dimensions des espaces propres, si c'est diagonalisable il suffit de lire le nombre de valeurs propres associées dans la matrice diagonale, mais tu as raison, si ça ne l'est pas c'est bête de s'en priver... Comme le spectre d'ailleurs...
Je vais changer ça dés que j'ai un moment.
Par contre les vecteurs propres je ne vois pas trop comment les obtenir, à part en résolvant des systèmes... (Brrr!)
Si tu dois calculer le rang d'une matrice (24*24! ) fais Ref Mat *** puis compte le nombre de lignes nulles!
ça a l'air de marcher! ça donne la dimension du noyau, hop n-ça et tu as le rang!
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 24/03/2014 17:00 | #
J'ai un DS de math sur quels chapitres à ton avis vendredi ?
J'ai presque tout compris, sauf que l'on n'a pas fait la seconde partie du cours sur les matrices qui porte sur les déterminants et la diagonalisation.
Du coup je le regarde dans deux semaines
Citer : Posté le 25/03/2014 20:10 | #
Oui la réduction on fait ça en spé!
Mais Lolo arrive toujours à nous caser des vecteurs propres et des valeurs propres dans ses sujets!
(je précise pour les autres gens: il a mon prof de l'année dernière, et son nom n'est pas réellement Lolo...)
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 26/03/2014 16:47 | # | Fichier joint
Je mets à jour les programmes.
Les anciens en Pièce-jointe! (les nouveaux dans le message principal!)
Petit problème apparemment réglé avec le rang des matrices et la dimension des noyaux.
Ajout du rang de la matrice si elle n'est pas inversible, ainsi que son déterminant.
Affichage des dimensions des sous-espaces propres à côté de leurs valeurs propres respectives.
A noter que la fonction SolveN bug pas mal si le programme est trop long (erreur mémoire pour moi...).
Programmes à utiliser avec précaution car je ne suis pas sûr du résultat!
(et avec les approximations numériques on est jamais sûr de toute façon...)
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 03/05/2014 12:47 | #
Le classpad a des fonctions pour calculer les valeurs propres et les vecteurs propres.
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 12/02/2016 20:42 | #
Up, je vais essayer de modifier le programme pour donner les vecteurs propres et ainsi les matrices de passage.
Citer : Posté le 29/02/2016 20:33 | #
Up aussi alors, ça peut être utile et je suis curieux de voir comme tu t'y prends
lololo Invité
Citer : Posté le 24/03/2019 09:57 | #
Je n'arrive pas a lire ton ficher. Comment faut-il l'ouvrir? Merci
Citer : Posté le 24/03/2019 10:09 | #
Il faut l'importer dans la section "Mémoire principale" de FA-124. Si tu as une calculatrice avec mémoire de stockage, tu peux aussi l'envoyer là puis le copier dans la mémoire principale de la calculatrice à l'aide la fonction COPY (F2) de l'application MEMORY.
yan Invité
Citer : Posté le 19/05/2020 10:59 | #
Bonjour, d'abord merci pour vos fichiers, j'aimerai savoir que doit on rentrer dans la calculatrice lorsqu'on fait marcher le programme pour qu'il nous donne la repinse ? Merci d'avance
Citer : Posté le 19/05/2020 11:21 | #
Tu écris ta matrice par l'éditeur de RUN/MAT ou par un programme, ensuite tu lances "DIAGO" et tu tapes le nom de ta matrice, par exemple "Mat A" (Shift-2, puis ALPHA pour la lettre).
Yan Invité
Citer : Posté le 19/05/2020 11:26 | #
Oh super merci pour la réponse rapide ! (j'écrivais Mat A avec les lettres venant de alpha.....) merci encore er bravo pour ces programmes qui vont m'être utile pour mes concours !