Inv

Calcule l'inverse multiplicatif d'une matrice carrée inversible par la méthode de Jordan-Gauss.

matrix matrix::Inv()

Valeur de Retour

Inverse multiplicatif de la matrice.

Note

Le produit de la matrice originale et de la matrice inverse est la matrice identité.

Si au moins une ligne ou colonne de la matrice est nulle, la matrice inverse ne peut pas être obtenue.

Si deux lignes ou colonnes de matrice ou plus sont linéairement dépendantes, la matrice inverse ne peut pas être obtenue.

 

Exemple

int TestInverse(const int size_m)
  {
   int    i,j,errors=0;
   matrix matrix_a(size_m,size_m);
//--- remplit la matrice carrée
   MatrixTestFirst(matrix_a);
//--- les microsecondes seront mesurées
   ulong t1=GetMicrosecondCount();
//--- calcule la matrice inverse
   matrix inverse=matrix_a.Inv();
//--- mesure
   ulong t2=GetMicrosecondCount();
//--- vérifie l'exactitude
   matrix identity=matrix_a.MatMul(inverse);
//---
   for(i=0i<size_mi++)
     {
      for(j=0j<size_mj++)
        {
         double value;
         //--- des 1 doivent être le long de la diagonale
         if(i==j)
            value=1.0;
         else
            value=0.0;
         if(MathClassify(identity[i][j])>FP_ZERO)
            errors++;
         else
           {
            if(identity[i][j]!=value)
              {
               double diff=MathAbs(identity[i][j]-value);
               //--- trop de multiplications et de divisions, donc réduisez la précision de la vérification
               if(diff>1e-9)
                  errors++;
              }
           }
        }
     }
//---
   double elapsed_time=double(t2-t1)/1000.0;
   printf("Inversion de la matrice %d x %d  %s  erreurs=%d  time=%.3f ms",size_m,size_m,errors==0?"passed":"failed",errors,elapsed_time);
   return(errors);
  }