PInv

Calcula una matriz pseudoinversa según el método de Moore-Penrose.

matrix matrix::PInv()

Valor retornado

Matriz pseudoinversa.

Ejemplo:

int TestPseudoInverse(const int size_mconst int size_k)
  {
   matrix matrix_a(size_m,size_k);
   matrix matrix_inverted(size_k,size_m);
   matrix matrix_temp;
   matrix matrix_a2;
//--- rellenamos la matriz
   MatrixTestFirst(matrix_a);
//--- invertimos
   matrix_inverted=matrix_a.PInv();
//--- comprobamos que sea correcto
   int errors=0;
//--- A * A+ * A = A   (A+ - matriz pseudoinversa de A)
   matrix_temp=matrix_a.MatMul(matrix_inverted);
   matrix_a2=matrix_temp.MatMul(matrix_a);
   errors=(int)matrix_a.CompareByDigits(matrix_a2,10);
 
   printf("PseudoInversion %s matrix_size  %d x %d  errors=%d",errors==0?"passed":"failed",size_m,size_k,errors);
//---
   return(errors);
  }