in reply to Pseudoinversing matrix .. is this correct?
Secondly, the diagonal result in $b is returned in the form of a single row. It must be converted to a diagonal matrix before you can work on it.
I would do something like this instead:
my $mt = transpose($matrix); my $m2 = $mt x $matrix; my $m2i = $m2->inv; my $psuedo = $m2i x $mt;
You will only need svd if the m2 matrix is singular or ill-conditioned. It will allow you to "fix" any near-zeros on the diagonal.