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); } |