MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

PseudoInverse for exact matrices

  • To: mathgroup at
  • Subject: [mg25154] PseudoInverse for exact matrices
  • From: Gianluca Gorni <gorni at>
  • Date: Tue, 12 Sep 2000 02:58:43 -0400 (EDT)
  • Sender: owner-wri-mathgroup at


A mathematician that I know, who is not into programming,
and uses the computer as a calculator mainly, has been talking
of Mathematica with contempt and of a competing product with
praise, after trying to find the pseudoinverse of a 15 by 15
matrix of rational numbers. Mathematica run out of memory without
giving an answer, while the competition gave the result in
practically no time.

I was hurt in my pride, and looked into the matter.

Mathematica 4's documentation states that PseudoInverse[] works for both
numeric and symbolic matrices, and that it is based on singular
value decomposition. Now, I suppose that the singular value
decomposition is appropriate for floating point matrices, but it
looks crazy for exact matrices.

So I wrote the following algorithm that calculates the pseudoinverse
with only rational operations:

myPseudoInverse[m_List?MatrixQ /; Precision[m] === Infinity] :=
    Module[{n = NullSpace[m]},
      n = If[n === {}, {Table[0, {Length[First[m]]}]}, n];
      Inverse[Transpose[m].m + Transpose[n].n].Transpose[m]];

and compared it with the built-in PseudoInverse on my (rather slow)

mat = Partition[Range[5*6], 5];

Timing[a = myPseudoInverse[mat];]
   {0.0166667 Second, Null}

Timing[b = PseudoInverse[mat];]
   {1.96667 Second, Null}

a == b

With the original 15 by 15 rational matrix, myPseudoInverse
gave an answer in less than a second, while PseudoInverse
crashed Mathematica and forced me to reboot.

In the meanwhile, I am afraid that Mathematica has made an outspoken and
influential detractor in the math department of a major university.

                Gianluca Gorni

  • Prev by Date: Re: 1.11.5 Exporting Formulas from Notebooks
  • Next by Date: Random spherical troubles
  • Previous by thread: Re: CellAutoDelete
  • Next by thread: Re: PseudoInverse for exact matrices