Inv

Berechnung der multiplikativen Inversen einer quadratischen invertierbaren Matrix nach der Jordan-Gauss-Methode.

matrix matrix::Inv()

Rückgabewert

Multiplikative Inverse einer Matrix

Hinweis

Das Produkt aus der ursprünglichen Matrix und der inversen Matrix ist die Identitätsmatrix.

Wenn mindestens eine Zeile oder Spalte der Matrix Null ist, kann die inverse Matrix nicht ermittelt werden.

Wenn zwei oder mehr Matrixzeilen oder -spalten linear abhängig sind, kann die inverse Matrix nicht ermittelt werden.

 

Beispiel

int TestInverse(const int size_m)
  {
   int    i,j,errors=0;
   matrix matrix_a(size_m,size_m);
//--- die quadratische Matrix auffüllen
   MatrixTestFirst(matrix_a);
//--- Zeitmessung in Mikrosekunden
   ulong t1=GetMicrosecondCount();
//--- get the inverse matrix
   matrix inverse=matrix_a.Inv();
//--- Zeitmessung
   ulong t2=GetMicrosecondCount();
//--- Prüfung auf Korrektheit
   matrix identity=matrix_a.MatMul(inverse);
//---
   for(i=0i<size_mi++)
     {
      for(j=0j<size_mj++)
        {
         double value;
         //--- Einsen müssen auf der Diagonalen liegen
         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);
               //--- zu viele Multiplikationen und Divisionen, reduzieren sie daher die Genauigkeitsprüfung
               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);
  }