Inverse d'une matrice

Résolu
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 - 13 mars 2008 à 10:55
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 - 20 mars 2008 à 20:15
bonjour,
  je voudrai faire un programme ki calcul l'inverse d'une matrice (matx[5][5]) en visual C++ 2008, j'arrive pa à faire, si klkun peut m'aider ça sera jentil, j'en ai besoin pour mon stage,
 merci d'avance

10 réponses

rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
20 mars 2008 à 20:15
ok, buno,


voila la solution ke jé trouvé( en fait moi j'ai travaillé sur une matrice 5x5)


et je pense ke cette methode est valable pr n'importe kelle matrice carrée).


void mat_inver(
double Mat[5][5],
double matinver[5][5]) {



int
i,j;




for
(i=0;i<5;i++){







for
( j=0;j<5;j++){



matinver[i][j]=0;


} }



for
(i=0;i<5;i++){







for
(

int
j=0;j<5;j++){



matinver[i][i]=1/Mat[i][i];



if
(j!=i)



{


matinver[i][j]=-Mat[i][j]/Mat[i][i];


}



for
(

int
k=0;k<5;k++){




if
(k!=i)



{


matinver[k][i]=Mat[k][i]/Mat[i][i];


}



if
(j!=i &&k!=i)



{


matinver[k][j]=Mat[k][j]-Mat[i][j]*Mat[k][i]/Mat[i][i];


} } }



for
(

int
i=0;i<5;i++)



{



for
(

int
j=0;j<5;j++)



{


Mat[i][j]=matinver[i][j];


}





}


}


}
1
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
13 mars 2008 à 14:21
Salut,
Qu'est-ce qui te bloque? La formule? La structure de données pour représenter une matrice?
Une petite recherche sur le site te donne la page suivante.

Bon courage,

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
13 mars 2008 à 18:42
salut;
merci buno; en fait  j comprend pa trop le C++, je connu la formul ki pass pa le calcul de determinant et la transposé du comatrice, mé j sai pa traduire ça ds un programme C++,
et merci.
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
13 mars 2008 à 18:55
Regardes alors le 2nd lien que je t'ai passé.
Essaie d'implémenter quelque chose et n'hésites pas à revenir nous voir

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
13 mars 2008 à 18:57
j vai essayer, merci
0
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
18 mars 2008 à 16:36
bonjour, 
 
je suis tjrs a la recherche de cette matrice inverse;  en fait j'ai fait un programme qui calcul la matrice inverse par la methode de pivot de gauss, ça compile mais je pense qu'il ya un probleme dans les boucles, j'espere bien de recevoir une reponse qui peut me faire avancer,
voila mon programme:
#include

"stdafx.h"#include

#include

<math.h>using

namespace std;
void

inverse_matrice(double mat[5][5],double mat1[5][5],double matI[5][5],double matinver[5][5]){

int i,j,k;

for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
if(i!=j){matI[i][j]=0;}

else{matI[i][j]=1;}matinver[i][j]=matI[i][j];

mat1[i][j]=mat[i][j];}}

for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
if(mat[i][i]==0){cout<<

"impossible d'inverser la matrice par pivot de gauss: on peut pas diviser par zero"<<endl;}

else{mat1[i][j]=mat[i][j]/mat[i][i];matinver[i][j]=matI[i][j]/mat[i][i];}}

mat[i][j]=mat1[i][j];

matI[i][j]=matinver[i][j];

for(k=1;k<=5;k++){
if(k!=i){

for(j=1;j<=5;j++){mat1[k][j]=mat[k][j]-mat[i][j]*mat[k][i];

matI[k][j]=matinver[k][j]-matinver[i][j]*mat[k][i];}}}

mat[i][j]=mat1[i][j];

matinver[i][j]=matI[i][j];}}

int

main(){
double

mat[5][5];double mat1[5][5];double I[5][5];double matinver[5][5];mat[1][1]=3; mat[1][2]=2; mat[1][3]=5; mat[1][4]=1 ; mat[1][5]=7;

mat[2][1]=1; mat[2][2]=4; mat[2][3]=0; mat[2][4]=6 ; mat[2][5]=4;

mat[3][1]=9; mat[3][2]=5; mat[3][3]=8; mat[3][4]=2; mat[3][5]=1;

mat[4][1]=6; mat[4][2]=1; mat[4][3]=3; mat[4][4]=4; mat[4][5]=6;

mat[5][1]=8; mat[5][2]=7; mat[5][3]=10; mat[5][4]=0; mat[5][5]=1;

cout<<mat[1][1]<<

" "<<mat[1][2]<<
" "<<mat[1][3]<<
" "<<mat[1][4]<<
" "<<mat[1][5]<<endl;cout<<mat[2][1]<<

" "<<mat[2][2]<<
" "<<mat[2][3]<<
" "<<mat[2][4]<<
" "<<mat[2][5]<<endl;cout<<mat[3][1]<<

" "<<mat[3][2]<<
" "<<mat[3][3]<<
" "<<mat[3][4]<<
" "<<mat[3][5]<<endl;cout<<mat[4][1]<<

" "<<mat[4][2]<<
" "<<mat[4][3]<<
" "<<mat[4][4]<<
" "<<mat[4][5]<<endl;cout<<mat[5][1]<<

" "<<mat[5][2]<<
" "<<mat[5][3]<<
" "<<mat[5][4]<<
" "<<mat[5][5]<<
"\n"<<endl; 

inverse_matrice( mat, mat1,I, matinver);

cout<<mat1[1][1]<<

" "<<mat1[1][2]<<
" "<<mat1[1][3]<<
" "<<mat1[1][4]<<
" "<<mat1[1][5]<<endl;cout<<mat1[2][1]<<

" "<<mat1[2][2]<<
" "<<mat1[2][3]<<
" "<<mat1[2][4]<<
" "<<mat1[2][5]<<endl;cout<<mat1[3][1]<<

" "<<mat1[3][2]<<
" "<<mat1[3][3]<<
" "<<mat1[3][4]<<
" "<<mat1[3][5]<<endl;cout<<mat1[4][1]<<

" "<<mat1[4][2]<<
" "<<mat1[4][3]<<
" "<<mat1[4][4]<<
" "<<mat1[4][5]<<endl;cout<<mat1[5][1]<<

" "<<mat1[5][2]<<
" "<<mat1[5][3]<<
" "<<mat1[5][4]<<
" "<<mat1[5][5]<<
"\n"<<endl; 

cout<<matinver[1][1]<<

" "<<matinver[1][2]<<
" "<<matinver[1][3]<<
" "<<matinver[1][4]<<
" "<<matinver[1][5]<<endl;cout<<matinver[2][1]<<

" "<<matinver[2][2]<<
" "<<matinver[2][3]<<
" "<<matinver[2][4]<<
" "<<matinver[2][5]<<endl;cout<<matinver[3][1]<<

" "<<matinver[3][2]<<
" "<<matinver[3][3]<<
" "<<matinver[3][4]<<
" "<<matinver[3][5]<<endl;cout<<matinver[4][1]<<

" "<<matinver[4][2]<<
" "<<matinver[4][3]<<
" "<<matinver[4][4]<<
" "<<matinver[4][5]<<endl;cout<<matinver[5][1]<<

" "<<matinver[5][2]<<
" "<<matinver[5][3]<<
" "<<matinver[5][4]<<
" "<<matinver[5][5]<<
"\n"<<endl;
0
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
18 mars 2008 à 16:40
c un peu long mé vous pouvez regarder just la partie superieure, "void matrice_inverse" merci encore une foi;
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
20 mars 2008 à 16:06
Je veux bien regarder ton code dès que j'ai un moment...
Par contre, tu pourrais me dire à quoi correspondent les matrices que tu passe à la fonction d'inversion?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
rif59 Messages postés 41 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 16 novembre 2008 1
20 mars 2008 à 16:09
merci buno, j'ai trouvé la solution
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
20 mars 2008 à 16:35
Ok, c'est cool.
Tu peux donc fermer le topic ("Réponse Acceptée") avec, si possible,  la solution à ton problème.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0