INVERSION DE MATRICE

Signaler
Messages postés
2
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
15 avril 2007
-
Messages postés
1
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
8 octobre 2008
-
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/42198-inversion-de-matrice

Messages postés
1
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
8 octobre 2008

Ton code à l'air fonctionnel, par contre juste une modif ou deux:
* il manque les delete
* si tu alloues une matrice, alloue les données dans un vecteur continu, ca sera plus rapide à l'excution.

void InvdiagMat(int NbElement, float *MatVect)
{
int sizeBuffer=NbElement*NbElement;

float **Mat=new float*[NbElement];
for(int i=0;i<NbElement;++i)
Mat[i]=&MatVect[i*NbElement];

bool testDiag=true;
for(int i=0;i<NbElement;++i)
if(Mat[i][i]==0)
{
testDiag=false;
break;
}

if(testDiag)
{
float * tmpVect=new float[sizeBuffer];
float ** temp=new float*[NbElement];
for(int i=0;i<NbElement;i++)
temp[i]=&tmpVect[i*NbElement];

for(int i=0;i<sizeBuffer;i++)
tmpVect[i]=0.0f;

for(int i=0;i<NbElement;i++)
{

for(int j=0;j<NbElement;j++)
{
temp[i][i]=1/Mat[i][i];
if(j!=i) temp[i][j]=-Mat[i][j]/Mat[i][i];

for(int k=0;k<NbElement;k++)
{

if(k!=i) temp[k][i]=Mat[k][i]/Mat[i][i];

if(j!=i &&k!=i)
temp[k][j]=Mat[k][j]-Mat[i][j]*Mat[k][i]/Mat[i][i];
}

}

for(int i=0;i<NbElement;i++)
for(int j=0;j<NbElement;j++)
Mat[i][j]=temp[i][j];

}

delete temp;
delete tmpVect;
}
delete Mat;
}
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
1
"Ce code permet d'inverser une matrice carrée (la modification du code pour une matrice non carrée est pas très difficile) qui doit au moins être diagonale (pas de zéro sur la diagonale)."

Je n'ai jamais vu de matrice rectangle (non carré) diagonales....
Messages postés
2
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
15 avril 2007

Juste comme ça, très théoriquement... je crois pas que tu sois capable de modifier ton code pour inverser les matrices non-carrées car elle ne s'inverse pas vraiment. En effet, une matrice est inversible si et seulement si son déterminant est non-nulle. Donc, elle doit avoir un déterminant. Cette notion n'est cependant pas définie pour les matrices non-carrées.