Page 1 of 1

Inversion de matrice pas à pas

Unread postPosted: 15 Nov 2012, 19:59
by Hayleia
Bon, c'est encore moi, et je parle encore de matrices :P

Mais cette fois, c'est plus pour poser des questions, c'est parce que j'ai fini le programme en question :D
Voilà donc un classeur qui inverse une matrice pas à pas en utilisant la méthode de Gauss et en affichant les étapes de calculs (comme pour SuperDérivées, vous n'aurez plus qu'à recopier ^^) :)
Notez que cela sert aussi pour calculer le rang d'une matrice.

Comment il fonctionne ? Il concatène votre matrice et l'identité puis effectue des opérations élémentaires sur les lignes de la matrice obtenue. Il renvoie "erreur" puis une erreur si la matrice n'est pas inversible et renvoie une matrice rectangulaire avec l'identité et l'inverse si la matrice originale était inversible ^^

Pour l'utiliser, placez le classeur dans MyLib, rafraichissez les bibliothèques et tapez gauss\inverse(<votre_matrice>) dans n'importe quel classeur ou dans le ScratchPad :)

Ci-joints, deux screenshots, l'un avant le calcul, l'autre à la fin du calcul.

Re: Inversion de matrice pas à pas

Unread postPosted: 17 Nov 2012, 09:56
by Bisam
J'avais oublié de te le dire la dernière fois, mais Philippe Fortin a déjà fait toute une bibliothèque de calculs avec des matrices (nommée "linalgcas") comprenant entre autres un programme nommé "gausstep" et un autre nommé "inversestep" avec des noms suffisamment explicites.

En plus, cette bibliothèque est préinstallée sur toutes les calculatrices Nspire (sans doute uniquement les CAS) produites depuis au moins 2 ans.
Si ça se trouve, tu la possèdes, toi aussi, sans le savoir...

Re: Inversion de matrice pas à pas

Unread postPosted: 17 Nov 2012, 16:21
by Hayleia
Bisam wrote:J'avais oublié de te le dire la dernière fois, mais Philippe Fortin a déjà fait toute une bibliothèque de calculs avec des matrices (nommée "linalgcas") comprenant entre autres un programme nommé "gausstep" et un autre nommé "inversestep" avec des noms suffisamment explicites.

En plus, cette bibliothèque est préinstallée sur toutes les calculatrices Nspire (sans doute uniquement les CAS) produites depuis au moins 2 ans.
Si ça se trouve, tu la possèdes, toi aussi, sans le savoir...

Oui je l'ai. Tout ça pour rien :P

Mais en fait, je m'en souviens, je l'avais mise sur ma calculette moi-même (ainsi que d'autres) en me disant que ça pouvait être utile, sauf qu'à l'époque je ne savais pas du tout me servir de cette calculatrice, je n'ai donc jamais réussi à me servir de ce classeur -.-°
Je l'ai donc tout simplement oubliée et j'ai refait une fonction que j'avais déjà :p
Je vais voir si j'arrive à m'en servir maintenant que je sais à peu près me servir de ma calculette :)

Bof, c'est pas grave, c'était mon premier programme complet (le premier étant un simple Number Guessing game). Je me fiche qu'il ne serve à personne, au moins il marche, je peux continuer mon apprentissage ^^
Et puis comme je l'ai codé avec des fonctions très simples, des débutants (comme moi) pourront peut-être se lancer dans la programmation en examinant mon code source qui est très facile à comprendre :)

Re: Inversion de matrice pas à pas

Unread postPosted: 25 Jul 2013, 12:59
by jmat
très bonne, est semblable à celui utilisé par la HP 50g, ne manque élémentaires indiquer les changements entre les lignes, il serait possible de faire ces changements?

merci

Re: Inversion de matrice pas à pas

Unread postPosted: 25 Jul 2013, 13:22
by nikitouzz
Tiens tu programme sur nspire toi ^^

beau programme !

Re: Inversion de matrice pas à pas

Unread postPosted: 25 Jul 2013, 13:48
by Hayleia
jmat wrote:très bonne, est semblable à celui utilisé par la HP 50g, ne manque élémentaires indiquer les changements entre les lignes, il serait possible de faire ces changements?

merci

Ça serait possible oui, mais pas très utile. Le programme fait tout le temps la même chose, et de la manière la plus simple algorithmiquement parlant (c'est à dire pas la plus simple du point de vue des calculs).

Par contre, j'ai codé ce truc il y a longtemps et en pas longtemps donc je ne me souviens plus trop comment il marche, mais je vais quand même essayer d'expliquer.
_____

Triangularisation inférieure :
Pour chaque colonne i, on cherche à mettre des zeros dans toutes les "cases" en dessous de la "case" (i,i). Pour ça, on cherche un "pivot", c'est à dire une ligne l telle que le nombre dans la case (l,i) soit non nul. Puis on se sert donc de cette ligne pour annuler tous les termes qu'on veut en dessous de (i,i), c'est à dire qu'on fait pour toutes les lignes k telles que k>i, L(k)-q*L(l)→L(k), où q est le quotient qui donne un zéro dans (k,i). Quelque part dans ces étapes se trouve aussi une "normalisation" où on met le terme (i,i) à 1.

Triangularisation inférieure :
Une fois triangulaire inférieure, il est facile d'annuler tous les termes "du dessus" puisqu'on a des 1 partout où ça nous arrange.

Fin.
_____

Voilà, j'espère qu'avec cette explication, mon programme est devenu plus clair, et si tu tiens vraiment à ajouter cette fonctionnalité, tu peux le faire, le programme n'est absolument pas protégé et le code n'est pas très obscur (j'ai pas vraiment de talents d'optimisation en Basic Nspire donc j'utilise majoritairement des boucles assez explicites dans leur but).

Re: Inversion de matrice pas à pas

Unread postPosted: 26 Jul 2013, 00:00
by jmat
Merci pour l'explication, maintenant je dois apprendre à programmer jeje