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;
//---riempire la matrice
MatrixTestFirst(matrix_a);
//-- invertire
matrix_inverted=matrix_a.PInv();
//-- verificare la correttezza
int errors=0;
//--- A * A+ * A = A (A+ è una pseudoinversa di 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);
}
|