gyzmo1
Messages postés13Date d'inscriptionsamedi 29 novembre 2003StatutMembreDernière intervention 9 juillet 2004
-
29 avril 2004 à 17:45
vacadam
Messages postés1Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention24 août 2004
-
24 août 2004 à 15:13
Salut à tous, g un problème concernant les matrice. J utilise l algorithme de Greville pour inverser ma matrice, le pb ce que cette méthode utilise la division par la norme de colonne. Or sur de grosses matrices cette norme est vraiment grande, ce qui a pour concéquence de ramener pratiquement tous les resultats a zéro et d'ainsi fausser totalement le resultat. Je voudrais savoir si qq'1 connait une parade ou si qq'1 connait une autre méthode.
je joint mon code pour ceux qui connaisse !
void Matrice::Calc_Greville(Matrice &Greville)
{
float troncature=0;
int i,var=0,k,j,L1,C1;
L1=Ligne;
C1=Colonne;
Matrice MatM, MatM2, Bk, Ck, Dk, MatM3;
//algo de greville initialisation
for (i=0;i<L1;i++)
if(Mat[i][0]!=0) var++;
if (var==0)
{
for (i=0;i<L1;i++)
Greville.Mat[0][i]=0;
}
else
{
if (MatM.Ligne !=0)
MatM.desalloue();
MatM.Alloue(1,L1);
Transpose(L1,1,MatM);
Matrice temporaire=Matrice(this);
Matrice MatV=Matrice(1,1);
MatM.Matricemul(temporaire,1,L1,L1,1,MatV);
temporaire.desalloue();
MatV.Mat[0][0]=1/MatV.Mat[0][0];
var=0;
/*la troncature permet de considerer une valeur de
Ck comme nulle si celle ci est inferieur à 10^-5*/
for (i=0;i<L1;i++)
{
troncature=Ck.Mat[i][0]*100000;
if((int)troncature!=0)
var++;
}
if (var!=0)
{
MatM2.Alloue(1,L1);
Ck.Transpose(L1,1,MatM2);