OPERATIONS SUR LES MATRICES MATHÉMATIQUES

Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005 - 14 févr. 2004 à 15:52
Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005 - 5 déc. 2005 à 21:10
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/20412-operations-sur-les-matrices-mathematiques

Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005
5 déc. 2005 à 21:10
euh le zip est disponible, qu'est ce que tu voudrais qu'il t'envoie exactement?
poliZ Messages postés 1 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 5 décembre 2005
5 déc. 2005 à 18:46
Ton programme m'intéresse beaucoup, j'avoue que cette demande peut paraitre osée mais je compte sur les apitoiments d'un informaticien face à une débutante en VB!!!
si tu pouvais me l'envoyer à paulinerobert@wanadoo.fr je t'en serai super reconnaissante !
Merci beaucoup...
Pauline
ghitaik Messages postés 36 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 11 mai 2009
2 nov. 2004 à 01:06
desolee, mais j'ai besoin d'un produit de 2 Msf(car j'ai declare ma matrice comme etant un msflexgried) pas 2 tableaux,c'est comme ca que j'ai debute mon projet et j'ai trouve du mal pour utiliser votre code dans mon application.si c'est possible fait le pour moi+transpose.merci d'avance
PhenXDesign Messages postés 26 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 2 mai 2005 2
20 févr. 2004 à 23:29
c'est bon mon prof de maths a fini le cours sur les matrices !
il m'a meme donné des formules pour tout ça
j'ai completement remodelé la source, mais pas encore mis gauss et tout ça, je le fais ce weekend
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
18 févr. 2004 à 23:10
j'avais pas pense a la mise sous forme de developpement limite ...

perso, je suis quasiment obligé de passer par la diagonalisation car c'est pour appliquer a de la modelisation de composants electroniques.

faudra que je trouve un cours/tuto/bouquin la dessus ...

si tu connais un bon site qui trate des maths et des matrices ...
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
18 févr. 2004 à 11:45
Sans faire un cours trop pédant :

Définition de l'exponentielle :
exp(A) = 1 + A + A^2 / 2! + A^3 / 3! + ...
En général, on utilise A comme un nombre réel, et on utilise l'équivalent de l'exponentielle comme exp(A) = 2.71^A

Mais A peut être une matrice ! d'où l'utilisation de la première définition, parce qu'on sait additionner et multiplier des matrices.

Maintenant, y'a un problème : il faut faire une somme infinie.
Ce genre de problème, on peut souvent le faire à la main.
Pour ce faire, on diagonalise la matrice, et comme ça la puissance d'une matrice se réduit à la puissance des termes diagonaux, puis on somme les termes et puis on "voit" souvent apparaître des exponentielles à l'intérieur de la matrice.

Pour l'exponentielle d'une matrice, version informatique :
1) y'a pas besoin de diagonaliser, parce que l'ordinateur est rapide pour multiplier des matrices quelconques !
2) tu calcules la matrice A*A (tu la gardes en mémoire) et tu l'additionnes avec la matrice Id + A, en n'oubliant pas de diviser par 2 factorielle
3) tu calcules la matrice suivante simplement par :
A^(n+1) = A^n * A (avec A^n gardée en mémoire)
(n+1) ! = n! * (n+1) (n! aussi gardé en mémoire)
4) tu sommes le tout, et puis il faut bien que tu t'arrêtes une fois. Pour ça, tu peux par exemple comparer la dernière matrice obtenue avec l'avant dernière (en les soustrayant par exemple) et puis faire la somme des valeurs absolues des éléments de ta matrice, et t'arrêter si cette somme est petite.
5) ne pas oublier de donner un compteur maximum, parce que certaines matrices ne convergent pas !

Enfin bon courage.

Une dernière remarque : si tu t'intéresse vraiment à programmer des opérations sur des matrices, soit tu prends un bon livre de maths et tu regardes les bons algorithmes, soit tu surfes sur ce site et tu t'aperçois qu'il y a tout plein de programmes bien expliqués qui utilisent ces différents algorithmes !
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
17 févr. 2004 à 23:33
me souviens plus :-(

c'est loin le cours sur les matrices !!!

si tu peux faire un petit rappel ... ;-)

a l'occasion, je cherche aussi a calculer l'exponenciele d'une matrice, si si ca existe j'te jure :-)
Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005
16 févr. 2004 à 12:20
C'est la méthode la moins économique pour calculer l'inverse d'une matrice ça... Bcp plus rapide en résolvant un système n équations n inconnues par Gauss.
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
16 févr. 2004 à 00:11
alors si je me souviens bien : l'inverse d'une matrice est egale a la transposee de la matrice de cofacteurs divisee par le determinant de A

donc
-1- besoin du determinant de A (c'est en cours)
-2- besoin de la transposition (ca tu l'as)
-3- la matrice des cofacteurs .... la c'est la bonne question :-)

1erement : c'est quoi un cofacteur ?
supposons la matrice A :
a11 a12 a13
a21 a22 a23
a31 a32 a33

le cofacteur de a11, c'est le determinant de la sous matrice a22,a23,a32,a33
le cofacteur de a12, c'est le determinant de la sous matrice a21,a23,a31,a33 ....

en fait , qd on calcul le cofacteur pr rapot 1terme, on supprime la ligne et la colonne de ce terme, et on calcule le determinant de ce qui reste

la matrice des cofacteurs .... ben c'est la ise en matrice de tous les cofacteurs EN "CHANGEANT LE SIGNE 1 FOIS SUR 2" ...
cofact(A) =
[cofact(a11) , -cofact(a12), cofact(a13)]
[-cofact(a21) .....]

au final, ton inversion de matrice deviens : (pour A 3*3)
-1- calcul de det(A)
-2- calcul des 9 cofacteurs, et mise sous forme matricielle (attention a changer les signes de cofact(a12), cofact(a21), cofact(a23), cofact(a32))
-3- transposition
-4- diviser par det(A)

ex : A =
[1 1 2]
[1 5 2]
[-2 3 1]

-1- det(A) = 20

-2- cofact(A) =
[-1 -(+5) 13]
[-(-5) 5 -(+5)]
[-8 (0) 4]
j'ai fais apparaitre les changements de signes en mettant les valeurs des cofacteurs entre parentheses

-3- trans(cofact(A)) =
[-1 5 -8]
[-5 5 0]
[13 -5 4]

-4 tans(cofact(A)) / det(A) =
[-0.05 0.25 -0.4]
[-0.25 0.25 0]
[0.65 -0.25 0.2]
ce qui est egal (d'apres ma calculatrice) a A exp -1 ...
PhenXDesign Messages postés 26 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 2 mai 2005 2
15 févr. 2004 à 15:30
merci !
je l'ai deja telechargée, et c une mine d'or, a part que c'est assez compliqué, mais je vais m'y pencher serieusement !
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
15 févr. 2004 à 12:30
Et encore une source pour faire joujou avec les matrices !
Bon, d'accord, pour l'instant ta source se démarque un peu des autres, parce que tu mises sur l'interface.

Mais pour la programmation mathématique, je te propose de regarder les autres sources (en particulier http://www.vbfrance.com/code.aspx?ID=18276 pour ne pas faire de pub), ça te donnera des idées pour inverser les matrices ou calculer le déterminant...
PhenXDesign Messages postés 26 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 2 mai 2005 2
14 févr. 2004 à 22:46
c'est bon, j'ai resolu le petit probleme de produit !
PhenXDesign Messages postés 26 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 2 mai 2005 2
14 févr. 2004 à 21:31
ouais, c 'est bien ce ke je pensais, pour l'inverse ...
mais je crois que pour trouver l'inverse d'une matrice carrée avec un determinant non nul, il faut resoudre n² equation a n inconnues où n est le nombre de lignes, ce qui est pluto difficile ^^
ensuite, avec le trinagle, on peut resoudre des systemes de n equetions a n inconnues : Gauss
ce qui est bie pratique, mais deja, il faut que j'arrive a faire le produit de 2 matrices, je sais le faire sur papier, mais en vb, j'ai un pti trou, je vais reessayer
Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005
14 févr. 2004 à 21:24
Diagonaliser, c'est mettre la matrice sous une forme diagonale dans une base adaptée (ce n'est pas toujours possible),
trigonaliser c'est la mettre sous la forme triangulaire supérieure (c'est toujours possible dans C)
et l'inverse de A c'est la matrice B si elle existe telle que A*B=Id (matrice identité).
Mais si tu viens juste de voir les matrices, ton programme sera déja assez complet quand tu aura programmé le calcul du determinant :)
PhenXDesign Messages postés 26 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 2 mai 2005 2
14 févr. 2004 à 16:45
diagonaliser, ça veut dire mettre la matrice en forme de triangle dont l'hypothenuse est la diagonale ?
que veut dire trigonaliser ?
et inverser, c'est quelle operation ? A exposant -1 ?

je viens juste d'apprendre les matrices, alors excuse moi de pas avoir tout ça :-)
Tellmarch Messages postés 53 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 27 septembre 2005
14 févr. 2004 à 15:52
Rajoute aussi la fonction diagonaliser ou trigonaliser, ça peut etre interessant à programmer...Et la fonction inverser surtout!
Rejoignez-nous