PInv

通过摩尔-彭罗斯(Moore-Penrose)方法计算矩阵的伪逆。

matrix matrix::PInv()

返回值

矩阵的伪逆。

举例

int TestPseudoInverse(const int size_m, const int size_k)

  {

   matrix matrix_a(size_m,size_k);

   matrix matrix_inverted(size_k,size_m);

   matrix matrix_temp;

   matrix matrix_a2;

//--- 填充矩阵

   MatrixTestFirst(matrix_a);

//--- invert

   matrix_inverted=matrix_a.PInv();

//--- 检查正确性

   int errors=0;

//--- A * A+ * A = A   (A+ is a pseudo-inverse of 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);

  }