Inverse d'une matrice

Inverse d'une matrice - Algo - Programmation

Marsh Posté le 23-10-2002 à 16:11:12    

boujour  ,
 
 
je dois faire un algo qui calcule l'inverse d'une matrice. pour les matrices carrées c simple mais pour des matrices non carrées je n'y arrive pas. le seul indice que l'on met donné c qu'il ya suivant la matrice soit une inverse a guauche, soit une inverse a droite :??:. jai beau chercher mais je ne trouve pas :(

Reply

Marsh Posté le 23-10-2002 à 16:11:12   

Reply

Marsh Posté le 23-10-2002 à 16:37:07    

Je vais peut etre dire une connerie ( arretez moi au cas! ) mais je vais quand meme essayer d'aider :)
 
L'inverse d'une matrice A c'est bien la matrice qui donne l'identité quand on la multiplie par A c'est ca? Dans ce cas retrouver un inverse de matrice ne se résume-t-il pas a résoudre un systeme tout simplement?

Reply

Marsh Posté le 23-10-2002 à 16:39:38    

http://www.gel.ulaval.ca/~fortier/ [...] rices.html
 
"L'inverse d'une matrice ne peut être obtenue qu'à partir d'une matrice carrée"

Reply

Marsh Posté le 23-10-2002 à 16:40:27    

surement mais dans ce cas je ne sais po le resoudre quand la matrice n'est pas carré :(

Reply

Marsh Posté le 23-10-2002 à 16:41:00    

Ace17 a écrit a écrit :

http://www.gel.ulaval.ca/~fortier/ [...] rices.html
 
"L'inverse d'une matrice ne peut être obtenue qu'à partir d'une matrice carrée"




 
Désolé c'est une connerie :)
 
edit : finalement ca doit etre possible quand les deux matrices ont des dimensions échangées


Message édité par Ace17 le 23-10-2002 à 16:41:42
Reply

Marsh Posté le 23-10-2002 à 16:41:41    

L'inverse d'une matrice ce n'est pas la transposée de la comatrice sur le déterminant de A?
 
Problème: je ne me souviens plus comment on calcule le déterminant d'une matrice de dimension supérieure à 3x3. :sweat: :honte: :cry:

Reply

Marsh Posté le 23-10-2002 à 16:50:16    

daprès ce que jai trouvé en cherchant, lorsque ce n'est pas carré, il y a une infinité de solutions. Il est probable que ce n'est pas une matrice "complètement inversse" mais "pseudo inverse" ou "demi inverse".
 
l'inverse a droite d'une matrice A est du type X A = B et a guauche c du typs A X = B. mais après ca je n'en sais po plus :(

Reply

Marsh Posté le 23-10-2002 à 17:09:04    

A^-1 = 1/det(A) * transposée(Comatrice(A)).
 
Il faut que A soit carrée.

Reply

Marsh Posté le 23-10-2002 à 17:10:57    

Pitounet a écrit a écrit :

A^-1 = 1/det(A) * transposée(Comatrice(A)).
 
Il faut que A soit carrée.




Et voilà Joe La Science qui vient faire son quetquet avec ses formules de la mort qui tue... :D
 
Ca geht's?

Reply

Marsh Posté le 23-10-2002 à 17:22:42    

Toucouch a écrit a écrit :

 
Et voilà Joe La Science qui vient faire son quetquet avec ses formules de la mort qui tue... :D
 
Ca geht's?




Tout à fait thierry ...
Mais jamais deux sans trois alors me voilà !!!
Sinon j'ai oublié comment on faisait alors ... Mais je vais chercher ça dont mes fichier C ce soir (on sait jamais).


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 23-10-2002 à 17:22:42   

Reply

Marsh Posté le 23-10-2002 à 17:31:21    

DarkOli a écrit a écrit :

 
Tout à fait thierry ...
Mais jamais deux sans trois alors me voilà !!!
Sinon j'ai oublié comment on faisait alors ... Mais je vais chercher ça dont mes fichier C ce soir (on sait jamais).




:lol: Excellent! Décidément, ça bosse dur chez les anciens de MT43... N'empêche, quelqu'un peut-il me réexpliquer vite fait comment on calcule un déterminant de matrice > 3x3?

Reply

Marsh Posté le 23-10-2002 à 17:34:04    

sanglier04 a écrit a écrit :

boujour  ,
 
 
je dois faire un algo qui calcule l'inverse d'une matrice. pour les matrices carrées c simple mais pour des matrices non carrées je n'y arrive pas. le seul indice que l'on met donné c qu'il ya suivant la matrice soit une inverse a guauche, soit une inverse a droite :??:. jai beau chercher mais je ne trouve pas :(




Ben déjà, toute matrice, même carré, n'est pas inversible. Ca depend si les vecteurs formés par les colonnes sont indépendant ou pas.
Sinon, le meilleurs axe de recherche pour trouver de bons algo de calcul d'inverse de matrice, c'est de chercher des algos de recherche opérationnel. Tu devrai trouver ton bonheur la dedans.  

Reply

Marsh Posté le 23-10-2002 à 17:46:17    

ce qui a été dit est correct.
 
par contre, petite astuce, pour un matrice 3x3 qui effectue une rotation, transposer la matrice donne la matrice inverse de la rotation (valable uniquement dans le cas d'une rotation)

Reply

Marsh Posté le 23-10-2002 à 17:48:52    

tomlameche a écrit a écrit :

 
Ben déjà, toute matrice, même carré, n'est pas inversible. Ca depend si les vecteurs formés par les colonnes sont indépendant ou pas.
Sinon, le meilleurs axe de recherche pour trouver de bons algo de calcul d'inverse de matrice, c'est de chercher des algos de recherche opérationnel. Tu devrai trouver ton bonheur la dedans.  




 
fo écrire la matrice a inverser et une matrice identité cote a cote, puis ensuite il faut réduire la premiere matrice en une matrice identité, et reporter les opératiosn qu'on fait sur les lignes sur la matrice identité qu'on a écrit a dote de la matrice a inverser.
 
 
cela dit, c'est des maths pures ca.

Reply

Marsh Posté le 23-10-2002 à 19:00:07    

farib a écrit a écrit :

 
 
fo écrire la matrice a inverser et une matrice identité cote a cote, puis ensuite il faut réduire la premiere matrice en une matrice identité, et reporter les opératiosn qu'on fait sur les lignes sur la matrice identité qu'on a écrit a dote de la matrice a inverser.
 
 
cela dit, c'est des maths pures ca.




 
J utilise ce principe pour les matrices carré mais pour les matrices qui ne le sont pas je suis pas sur que cela fonctionne.

Reply

Marsh Posté le 23-10-2002 à 20:09:27    

Toucouch a écrit a écrit :

 
:lol: Excellent! Décidément, ça bosse dur chez les anciens de MT43... N'empêche, quelqu'un peut-il me réexpliquer vite fait comment on calcule un déterminant de matrice > 3x3?




Je l'ai noté sur mon poly mais je ne sais plus où il est ce con !!!
 
En attendant j'ai retrouvé ça (j'ai le même en assembleur :D). Par contre ce n'est pas très clair mais c'est une version 'optimisée' et spécifique aux matrices 4x4.
 
Euh la notation de la matrice est (je crois) :

Code :
  1. 00 01 02 03
  2. 04 05 06 07
  3. 08 09 10 11
  4. 12 13 14 15


 

Code :
  1. //---------------------------------------------------------------------------
  2. // inversion de matrices : matrice de taille 4x4 exclusivement
  3. void Inversion_de_matrice(/*double* matrice,double* resultat_*/) {
  4. // variables temporaires
  5.   double t[6]={0,0,0,0,0,0};
  6. // calcul des cofacteurs de la ligne 1
  7.   t[0]=matrice[10]*matrice[15] - matrice[14]*matrice[11];
  8.   t[1]=matrice[9]*matrice[15] - matrice[13]*matrice[11];
  9.   t[2]=matrice[9]*matrice[14] - matrice[13]*matrice[10];
  10.   t[3]=matrice[8]*matrice[15] - matrice[12]*matrice[11];
  11.   t[4]=matrice[8]*matrice[14] - matrice[12]*matrice[10];
  12.   t[5]=matrice[8]*matrice[13] - matrice[12]*matrice[9];
  13.   resultat[0]=matrice[5]*t[0] - matrice[6]*t[1] + matrice[7]*t[2];
  14.   resultat[1]=matrice[4]*t[0] - matrice[6]*t[3] + matrice[7]*t[4];
  15.   resultat[2]=matrice[4]*t[1] - matrice[5]*t[3] + matrice[7]*t[5];
  16.   resultat[3]=matrice[4]*t[2] - matrice[5]*t[4] + matrice[6]*t[5];
  17. // calcul du determinant
  18.   td=matrice[0]*resultat[0] - matrice[1]*resultat[1] + matrice[2]*resultat[2] - matrice[3]*resultat[3];
  19. //  Form1->Edit1->Text=FloatToStr(td);
  20. // test du determiant : si non nul on continue
  21.   if (td==0) {
  22.     resultat_[ 0]=1;
  23.     resultat_[ 1]=0;
  24.     resultat_[ 2]=0;
  25.     resultat_[ 3]=0;
  26.     resultat_[ 4]=0;
  27.     resultat_[ 5]=1;
  28.     resultat_[ 6]=0;
  29.     resultat_[ 7]=0;
  30.     resultat_[ 8]=0;
  31.     resultat_[ 9]=0;
  32.     resultat_[10]=1;
  33.     resultat_[11]=0;
  34.     resultat_[12]=0;
  35.     resultat_[13]=0;
  36.     resultat_[14]=0;
  37.     resultat_[15]=1;
  38.     return;
  39.     }
  40. // calcul des cofacteurs de la ligne 2
  41.   resultat[4]=matrice[1]*t[0] - matrice[2]*t[1] + matrice[3]*t[2];
  42.   resultat[5]=matrice[0]*t[0] - matrice[2]*t[3] + matrice[3]*t[4];
  43.   resultat[6]=matrice[0]*t[1] - matrice[1]*t[3] + matrice[3]*t[5];
  44.   resultat[7]=matrice[0]*t[2] - matrice[1]*t[4] + matrice[2]*t[5];
  45. // calcul des cofacteurs de la ligne 3
  46.   t[0]=matrice[2]*matrice[7] - matrice[6]*matrice[3];
  47.   t[1]=matrice[1]*matrice[7] - matrice[5]*matrice[3];
  48.   t[2]=matrice[1]*matrice[6] - matrice[5]*matrice[2];
  49.   t[3]=matrice[0]*matrice[7] - matrice[4]*matrice[3];
  50.   t[4]=matrice[0]*matrice[6] - matrice[4]*matrice[2];
  51.   t[5]=matrice[0]*matrice[5] - matrice[4]*matrice[1];
  52.   resultat[8] =matrice[13]*t[0] - matrice[14]*t[1] + matrice[15]*t[2];
  53.   resultat[9] =matrice[12]*t[0] - matrice[14]*t[3] + matrice[15]*t[4];
  54.   resultat[10]=matrice[12]*t[1] - matrice[13]*t[3] + matrice[15]*t[5];
  55.   resultat[11]=matrice[12]*t[2] - matrice[13]*t[4] + matrice[14]*t[5];
  56. // calcul des cofacteurs de la ligne 4
  57.   resultat[12]=matrice[9]*t[0] - matrice[10]*t[1] + matrice[11]*t[2];
  58.   resultat[13]=matrice[8]*t[0] - matrice[10]*t[3] + matrice[11]*t[4];
  59.   resultat[14]=matrice[8]*t[1] - matrice[9]*t[3] + matrice[11]*t[5];
  60.   resultat[15]=matrice[8]*t[2] - matrice[9]*t[4] + matrice[10]*t[5];
  61. // inversion
  62.   td=1/td;
  63.   resultat_[0]=resultat[0]*td;
  64.   resultat_[1]=-resultat[4]*td;
  65.   resultat_[2]=resultat[8]*td;
  66.   resultat_[3]=-resultat[12]*td;
  67.   resultat_[4]=-resultat[1]*td;
  68.   resultat_[5]=resultat[5]*td;
  69.   resultat_[6]=-resultat[9]*td;
  70.   resultat_[7]=resultat[13]*td;
  71.   resultat_[8]=resultat[2]*td;
  72.   resultat_[9]=-resultat[6]*td;
  73.   resultat_[10]=resultat[10]*td;
  74.   resultat_[11]=-resultat[14]*td;
  75.   resultat_[12]=-resultat[3]*td;
  76.   resultat_[13]=resultat[7]*td;
  77.   resultat_[14]=-resultat[11]*td;
  78.   resultat_[15]=resultat[15]*td;
  79. // fin
  80. }
  81. //---------------------------------------------------------------------------


Message édité par darkoli le 23-10-2002 à 20:15:35

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 23-10-2002 à 20:13:01    

tu fais marcher ton imagination et tu cherches sur google !

Reply

Marsh Posté le 23-10-2002 à 21:08:36    

farib a écrit a écrit :

tu fais marcher ton imagination et tu cherches sur google !




 
si je poste ici c que jai deja chercher ...

Reply

Marsh Posté le 23-10-2002 à 21:16:49    

Pour 3x3, y a http://www.geocities.com/SiliconVa [...] ach03.html
 
Je me souviens très bien de "A^-1 = 1/det(A) * transposée(Comatrice(A))" bien que très ancien, mais suis guère plus capable de l'implémenter :pt1cable:.
 

Reply

Marsh Posté le 23-10-2002 à 23:06:23    

carbon_14 a écrit a écrit :

Pour 3x3, y a http://www.geocities.com/SiliconVa [...] ach03.html
 
Je me souviens très bien de "A^-1 = 1/det(A) * transposée(Comatrice(A))" bien que très ancien, mais suis guère plus capable de l'implémenter :pt1cable:.
 
 




 
merci, mais c tjs pour des matrices carrés, ce qui me pose problème c surtout pour celles qui ne sont pas carrés.

Reply

Marsh Posté le 23-10-2002 à 23:27:27    

Pas carré => pas inversible.
 
Ca a deja ete dit ici même.
 
B est l'inverse de A ssi AB = I et BA = I. Or c'est pas possible avec des matrices pas carrées. Point.

Reply

Marsh Posté le 23-10-2002 à 23:32:59    

Kristoph a écrit a écrit :

Pas carré => pas inversible.
 
Ca a deja ete dit ici même.
 
B est l'inverse de A ssi AB = I et BA = I. Or c'est pas possible avec des matrices pas carrées. Point.




+1
evidemment qu'une matrice n'est inversible que si elle est carré ! condition NECESSAIRE mais pas suffisante bien sûr...

Reply

Marsh Posté le 24-10-2002 à 00:02:42    

Est-ce que le produit de deux matrices non carrées donne/peut donner une matrice carrée?

Reply

Marsh Posté le 24-10-2002 à 07:28:40    

comme je l'ai dit plus haut, il semble que ce ne soit po une inverse complète mais une sorte de demi inverse (jaurai plus de précision vendredi) merci a tout ce qui ont essayer de m'aider.

Reply

Marsh Posté le 24-10-2002 à 08:48:10    

Ca permettra de savoir quelle est la transformation envisagée. Il doit y avoir un "abus de langage". La vraie inversion ne pouvant QUE concerner des matrices carrées.

Reply

Marsh Posté le 24-10-2002 à 08:49:45    

Ace17 a écrit a écrit :

Est-ce que le produit de deux matrices non carrées donne/peut donner une matrice carrée?




Pour multiplier A par B il faut que le nombre de colonnes de A soit identiques au nombres de lignes de B.
 
La matrice obtenue aura autant de lignes que la matrice A et autant de colonne que la matrice B.
 
Donc avec une matrice A de 7 colonnes et 4 lignes et une matrice B de 4 colonnes et 7 lignes tu obtiens bien une matrice carrée de 4 colonnes et 4 lignes.
 
Conclusion pour obtenir une matrice carrée avec une multiplication de deux matrices A et B (AxB). Les matrices doivent avoir les mêmes dimensions mais inversées ... :D (lignes A = colonnes B et colonnes A = lignes B).


Message édité par darkoli le 24-10-2002 à 08:52:43

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 24-10-2002 à 09:25:25    

Ok , dans ce cas il est possible d'avoir deux matrices non carrées, aux dimensions inversées l'une par rapport a l'autre, dont le produit donne la matrice identité; n'est-ce pas? Pourquoi ne pourrait-on pas dire qu'elles sont inverses l'une de l'autre?

Reply

Marsh Posté le 24-10-2002 à 09:40:37    

Parceque A est inversible ssi il existe B telle que AB = I et BA = I et ca c'est impossible si A n'est pas carrée. Faut vraiment se repeter ici :)

Reply

Marsh Posté le 24-10-2002 à 10:00:50    

Ca y est j'ai compris ;)
En fait on peut trouver B pour que AB = I mais a ce moment la il y n'y a pas forcément BA = I; d'ou les termes d'inverse a droite ou a gauche mentionnés plus haut

Reply

Marsh Posté le 24-10-2002 à 10:03:48    

Toucouch a écrit a écrit :

 
Et voilà Joe La Science qui vient faire son quetquet avec ses formules de la mort qui tue... :D
 
Ca geht's?




 
 
Héhé, il faut bien resortir le peu qui me reste.
D'ailleurs, je ne sais vraimentpas pourquoi cette formule est restée alors que tout le reste est parti !
 
Je peux t'appeller ce soir au tel ?

Reply

Marsh Posté le 24-10-2002 à 10:06:59    

pour le determinant de la matrice 3*3, je crois que c'et un truc comme ça :


    a b c
A= d e f
    i j k
 
det(A) =aek + bfi + cdj - cei -afj -dbk
 
 


 
Attention, c'est à prendre avec des pincettes comme formule, c'est suuuuuuuper vieux !


Message édité par Pitounet le 24-10-2002 à 11:15:32
Reply

Marsh Posté le 24-10-2002 à 10:21:11    

pitounet a écrit a écrit :

pour le determinant de la matrice 3*3, je crois que c'et un truc comme ça :


   a b c
A= d e f
   i j k
 
det(A) aek + bfi + cdj - cei -afj -dbk
 
 


 
Attention, c'est à prendre avec des pincettes comme formule, c'est suuuuuuuper vieux !




Sinon tu dois pouvoir retrouver la formule dans mon bout de code (qui fonctionne correctement !!!) mais comme j'avais tout décomposer les calculs à l'époque, il faut faire l'opération inverse :D


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 24-10-2002 à 12:15:45    

pour le déterminant, revenez a la définition avec les formes p-linéaires alternées

Reply

Marsh Posté le 24-10-2002 à 15:18:01    

pitounet a écrit a écrit :

 
Héhé, il faut bien resortir le peu qui me reste.
D'ailleurs, je ne sais vraimentpas pourquoi cette formule est restée alors que tout le reste est parti !




Ben c'était pas ce jour-là que tu suivais le cours? :D
 

Citation :


Je peux t'appeller ce soir au tel ?


Caramba! Ce soir c'est notre 5° anniversaire de fiançailles! (Ca fait un peu rétro, mais bon, on est sentimental ou on l'est pas :D). Donc ce soir, ch'tit resto sympa, etc. donc cramé...
 
Mais demain soir c'est avec grand plaisir que j'écouterai de nouveau le son mélodieux et suave de ta jolie voix... (J't'avais dit que j'étais sentimental... :D)
 
 
 
PS: Oli, t'as une belle voix aussi, hein! Si tu veux appeler aussi... :D


Message édité par Toucouch le 24-10-2002 à 15:18:37
Reply

Marsh Posté le 24-10-2002 à 15:39:39    

Soit la matrice http://www.ifrance.com/manupap/matrice.jpg
 
On peut calculer son déterminant par 2 manières:
 
1) http://www.ifrance.com/manupap/formule.jpg
Sachant que http://www.ifrance.com/manupap/det.jpg, on en déduit:
 
det(A)=a*(e*k-j*f)-d*(b*k-j*c)+i*(b*f-e*c)
det(A)=a*e*k+d*j*c+i*b*f-a*j*f-d*b*k-i*e*c
 
2)On rajoute les deux premières lignes en dessous de la matrice:
http://www.ifrance.com/manupap/astuce.jpg
On multiplie entre eux les termes des diagonales en rouge, on fait la somme, on obtient M=a*e*k+d*j*c+i*b*f
On fait la même opération pour les diagonales en bleu, on obtient N=i*e*c+a*j*f+d*b*k
 
On a alors det(A)=M-N=a*e*k+d*j*c+i*b*f-i*e*c-a*j*f-d*b*k

Reply

Marsh Posté le 24-10-2002 à 15:43:25    

Toucouch a écrit a écrit :

 
Ben c'était pas ce jour-là que tu suivais le cours? :D
 

Citation :


Je peux t'appeller ce soir au tel ?


Caramba! Ce soir c'est notre 5° anniversaire de fiançailles! (Ca fait un peu rétro, mais bon, on est sentimental ou on l'est pas :D). Donc ce soir, ch'tit resto sympa, etc. donc cramé...
 
Mais demain soir c'est avec grand plaisir que j'écouterai de nouveau le son mélodieux et suave de ta jolie voix... (J't'avais dit que j'étais sentimental... :D)
 
 
 
PS: Oli, t'as une belle voix aussi, hein! Si tu veux appeler aussi... :D




 
 
Bon anniversaire à tous les deux alors :)
J'essaye de t'appeler demain soir, sans pb.

Reply

Marsh Posté le 24-10-2002 à 16:04:47    

Toucouch a écrit a écrit :

 
Ben c'était pas ce jour-là que tu suivais le cours? :D
 

Citation :


Je peux t'appeller ce soir au tel ?


Caramba! Ce soir c'est notre 5° anniversaire de fiançailles! (Ca fait un peu rétro, mais bon, on est sentimental ou on l'est pas :D). Donc ce soir, ch'tit resto sympa, etc. donc cramé...
 
Mais demain soir c'est avec grand plaisir que j'écouterai de nouveau le son mélodieux et suave de ta jolie voix... (J't'avais dit que j'étais sentimental... :D)
 
 
 
PS: Oli, t'as une belle voix aussi, hein! Si tu veux appeler aussi... :D




Sauf que je ne suis pas devin ... [:cupra] (Le numéro de téléphone ???)


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 24-10-2002 à 16:58:24    

bobricard a écrit a écrit :

Soit la matrice http://www.ifrance.com/manupap/matrice.jpg
 
On peut calculer son déterminant par 2 manières:
 
1) http://www.ifrance.com/manupap/formule.jpg
Sachant que http://www.ifrance.com/manupap/det.jpg, on en déduit:
 
det(A)=a*(e*k-j*f)-d*(b*k-j*c)+i*(b*f-e*c)
det(A)=a*e*k+d*j*c+i*b*f-a*j*f-d*b*k-i*e*c
 
2)On rajoute les deux premières lignes en dessous de la matrice:
http://www.ifrance.com/manupap/astuce.jpg
On multiplie entre eux les termes des diagonales en rouge, on fait la somme, on obtient M=a*e*k+d*j*c+i*b*f
On fait la même opération pour les diagonales en bleu, on obtient N=i*e*c+a*j*f+d*b*k
 
On a alors det(A)=M-N=a*e*k+d*j*c+i*b*f-i*e*c-a*j*f-d*b*k




Oui, mais pour une matrice plus grande?

Reply

Marsh Posté le 24-10-2002 à 16:59:48    

Pitounet > Ca roule! A demain, donc...
 
Darkoli > Demande à Pitounet... ;)

Reply

Marsh Posté le 24-10-2002 à 18:22:49    

Toucouch a écrit a écrit :

 
Oui, mais pour une matrice plus grande?




 
ce sotn des cours de math qu'il faut chercher

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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