Inv

Calcola l'inverso moltiplicativo di una matrice invertibile quadrata con il metodo di Jordan-Gauss.

matrix matrix::Inv()

Valore Restituito

Inverso moltiplicativo della matrice.

Note

Il prodotto della matrice originale e della matrice inversa è la matrice identità.

Se almeno una riga o colonna della matrice è zero, la matrice inversa non può essere ottenuta.

Se due o più righe o colonne della matrice sono dipendenti linearmente, la matrice inversa non può essere ottenuta.

 

Esempio

int TestInverse(const int size_m)
  {
   int    i,j,errors=0;
   matrix matrix_a(size_m,size_m);
//-- popolare la matrice quadrata
   MatrixTestFirst(matrix_a);
//-- saranno misurati i microsecondi
   ulong t1=GetMicrosecondCount();
//--- ottenere la matrice inversa
   matrix inverse=matrix_a.Inv();
//-- misurare
   ulong t2=GetMicrosecondCount();
//-- verificare la correttezza
   matrix identity=matrix_a.MatMul(inverse);
//---
   for(i=0i<size_mi++)
     {
      for(j=0j<size_mj++)
        {
         double value;
         //--- devono essere tutti uno lungo 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);
               //--- troppe moltiplicazioni e disposizioni, quindi ridurre la precisione di controllo
               if(diff>1e-9)
                  errors++;
              }
           }
        }
     }
//---
   double elapsed_time=double(t2-t1)/1000.0;
   printf("Inversion of matrix %d x %d  %s  errors=%d  time=%.3f ms",size_m,size_m,errors==0?"passed":"failed",errors,elapsed_time);
   return(errors);
  }