inverse matrice

inverse matrice - Delphi/Pascal - Programmation

Marsh Posté le 07-05-2004 à 15:52:57    

comment calculer l'inverse d'une matrice en pascal?

Reply

Marsh Posté le 07-05-2004 à 15:52:57   

Reply

Marsh Posté le 10-05-2004 à 20:05:33    

c'est pas specifique au pascal ca, revoit tes maths pour faire un algo ;)  :hello:


---------------
.
Reply

Marsh Posté le 10-05-2004 à 20:47:05    

Pivot de Gauss...

Reply

Marsh Posté le 12-05-2004 à 14:50:35    

Calcule le déterminant (ça t'évitera déjà de bosser dans le vide si il est nul) puis on a A^(-1)=1/det(A) * t(C) avec C la matrice des coffacteurs de A, t(C) sa transposée.
Pour rappel, chaque élément de C se calcul ainsi :
 c(i, j) = (-1)^(i+j) * det(D)
D étant la sous-matrice de A quand on enlève la ligne i et la colonne j.
 
pour une petite matrice, tu peux effectivement utiliser le Pivot de Gauss (calcul le déterminant avant pour au moins savoir si elle est inversible), sinon cette méthode est la plus systématique.
 
Edit: ce serait plutôt catégorie Algo non ? (après avoir révisé ses maths =) )


Message édité par Tentacle le 12-05-2004 à 14:51:37
Reply

Marsh Posté le 12-05-2004 à 16:43:09    

Et tu le calcules comment ton déterminant si ta matrice elle est pas 2x2 ni 3x3?

Reply

Marsh Posté le 12-05-2004 à 16:44:54    

Et j'ajoute que calculer la 1/det * transposée de la comatrice , ca fait exploser les temps de calcul des que ta matrice devient un peu grande... Donc non, c'est vraiment le Pivot de Gauss la méthode valable

Reply

Marsh Posté le 12-05-2004 à 18:55:01    

pour calculer le déterminant, faut le faire récursivement selon une ligne ou une colonne.
 
C'est vrai qu'il faudrait calculer des tas de déterminant pour la comatrice :/

Reply

Marsh Posté le 13-05-2004 à 07:42:33    

Ace17 a écrit :

Et j'ajoute que calculer la 1/det * transposée de la comatrice , ca fait exploser les temps de calcul des que ta matrice devient un peu grande... Donc non, c'est vraiment le Pivot de Gauss la méthode valable


 
euh non ... tu peux aussi passer par la méthode de housholder, ou cholesky si ta matrice est symétrique ...
 
j'ajouterai que comme tu vas résoudre n systèmes linéaires avec gauss (ou householder), il ne faut pas triangulariser la matrice à chauqe fois, mais conserver le décomposition (LU ou QR) et l'appliquer à chaque vecteur ...
 
c'est dans tous les bons cours d'analyse numérique ou sinon, tu peux trouver sur le web , un livre qui s'appelle numerical recipee in C ...
tout est expliqué dedans !

Reply

Marsh Posté le 13-05-2004 à 07:56:20    

"Donc non, c'est vraiment le Pivot de Gauss la méthode valable" ... comparé au coup de la transposée de la comatrice, évidemment!
 
Si la matrice est symétrique, va pour Cholesky...
Et si tu as n systemes a résoudre (meme matrice mais second membre différent), va pour la décomposition (P)LU...  
 
Mais s'il s'agit de ne résoudre qu'un seul systeme, a priori quelconque... moi je dis Pivot de Gauss
 
Quant a Numerical Recipes c'est un excellent bouquin mais passer par la pour inverser une malheureuse matrice...c'est un peu le marton pilon pour écraser les mouches!!

Reply

Marsh Posté le 22-05-2004 à 23:32:34    

benoiz a écrit :

comment calculer l'inverse d'une matrice en pascal?


 
 En général, on n'a jamais besoin de calculer l'inverse d'une matrice.  
On s'arrange pour résoudre directement le système.
 
 Calculer l'inverse d'une matrice, c'est simplement résoudre un système un peu spécial (dont le second membre est le vecteur identité...)
 
 Le plus simple et le plus efficace, dans le cas général, c'est tout simplement le bon vieux algorithme de Gauss.  
 (Laisse tomber la méthode avec l'inverse du déterminant et la matrice des cofacteurs : c'est très util pour les démonstrations théoriques. Pour les calculs pratiques, cela n'est pas efficace.)
 
 Si tu veux assurer une bonne précision, tu peux ajouter à la méthode de Gauss le pivotage partiel. (En évitant de diviser par des coeff trop petits, tu évites la perte de précision. C'est souvent du luxe.)
 
 Evidemment, si tes matrices ont des propriétés particulières (symétrique, creuse, ...) tu disposes d'autres algo plus adaptés : Cholesky, QR, solveurs rapides itératifs...
 
 Mais franchement, la méthode de Gauss, c'est ce qu'il faut dans le cas général "sans prétention". Et en plus, cela se programme en 20 minutes et à peu près autant de lignes !
 
 (Pour le cas de grosses flemmes ou de "pas envie de chercher", le classique "Numerical Recipes" existe également en Pascal. Je crois me souvenir qu'il y a du code directement utilisable.)
 
 Si tu n'es pas tout à fait allergique au calcul algébrique, l'exercice vaut la peine de se pencher sur la programmation d'algo de Gauss.
 
Gruik!

Reply

Marsh Posté le 22-05-2004 à 23:32:34   

Reply

Marsh Posté le 23-05-2004 à 00:21:34    

GruikGruik a écrit :

dont le second membre est le vecteur identité...


C'est quoi que t'appelles vecteur identité?

Reply

Marsh Posté le 23-05-2004 à 01:39:47    

Ace17 a écrit :

C'est quoi que t'appelles vecteur identité?


 


1 0 0
0 1 0
0 0 1


 
non  :??:

Reply

Marsh Posté le 23-05-2004 à 07:27:33    

Ca c'est la matrice identité... Et ca ne peut en aucun cas faire office de second membre

Reply

Marsh Posté le 23-05-2004 à 11:46:08    

Ace17 a écrit :

Ca c'est la matrice identité... Et ca ne peut en aucun cas faire office de second membre


 
c'est pas avec ca qu'on inverse une matrice  :??:

Reply

Marsh Posté le 23-05-2004 à 12:18:25    

didier1809 a écrit :

c'est pas avec ca qu'on inverse une matrice  :??:


Ben c'est comme si tu disais que c'est avec le nombre 1 qu'on calcule l'inverse d'un nombre rationnel..

Reply

Marsh Posté le 23-05-2004 à 12:32:12    

j'ai apris ca moi
 
matrice_a_inverser   matrice_unitée
 
ex :
 


1 2 3  1 0 0
4 5 6  0 1 0  
7 8 9  0 0 1


 
et avec dees operations style l2 = l2 + l1, on doit arriver a avoir la matrice unitée a gauche, et la matrice a droite est la matrice inversée


---------------
.
Reply

Marsh Posté le 23-05-2004 à 12:54:26    

Oui, oui, c'est parfaitement exact ce que tu dis,
mais dire que c'est avec la matrice identité qu'on inverse une matrice ...
Disons que c'est pas faux, mais c'est ridicule... dans la mesure ou l'important dans le processus d'inversion c'est Gauss ; Sinon, je peux aussi dire que c'est grace a la multiplication et la division qu'on calcule l'inverse d'une matrice...
 
Mais moi ce que je voulais savoir c'est ce que Gruik^2 appelait "vecteur identité" qui justifiait l'inversion d'une matrice ( car c'est vrai que dans la pratique, on n'inverse quasiment jamais de matrice mais on résout un systeme )


Message édité par Ace17 le 23-05-2004 à 12:55:18
Reply

Marsh Posté le 23-05-2004 à 14:46:52    

Ace17 a écrit :

Oui, oui, c'est parfaitement exact ce que tu dis,
mais dire que c'est avec la matrice identité qu'on inverse une matrice ...
Disons que c'est pas faux, mais c'est ridicule... dans la mesure ou l'important dans le processus d'inversion c'est Gauss ; Sinon, je peux aussi dire que c'est grace a la multiplication et la division qu'on calcule l'inverse d'une matrice...
 
Mais moi ce que je voulais savoir c'est ce que Gruik^2 appelait "vecteur identité" qui justifiait l'inversion d'une matrice ( car c'est vrai que dans la pratique, on n'inverse quasiment jamais de matrice mais on résout un systeme )


 
on est bien d'accord  :hello:  :jap:


---------------
.
Reply

Marsh Posté le 23-05-2004 à 15:04:36    

à mon avis ce qu'il voualait dire en parlant de vecteur identité, c que pour utiliser ta méthode de gauss comme j'en avais parlé avec la méthode LU
 
tu décompose ta matrice en LU, et apres tu resoud n systèmes linéaires avec a chaque fois Ax=b ou b est ce qu'on peut appeler "vecteur identité"  
 
en fait tu résoud pour chaque colonne de la matrice identité(1 colonne= ~vecteur identité), pis apres tu colle les résultats et ça te donne ta matrice inverse ... c comme cela que l'on a appris à le faire en analyse numérique ...
 
bon ok ct pas tres bien exprimé, mais je crois que c ça ...

Reply

Marsh Posté le 23-05-2004 à 18:51:03    

fucky_fuck a écrit :

tu décompose ta matrice en LU


en PLU... [:aloy]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed