On 10/19/13 5:14 AM, Sean Owen wrote: > On Sat, Oct 19, 2013 at 12:21 AM, Phil Steitz <phil.ste...@gmail.com> wrote: >> The decomposition solvers can "invert" non-square matrices. There >> is no documentation describing what exactly is being returned in >> these cases. It is not obvious to me exactly what conditions the >> returned value satisfies in each case when the actual parameter is >> not square. Do all of them return pseudo-inverses X satisfying AXA >> = A where A is the input matrix? Do they satisfy other conditions >> as well? Under what conditions will exceptions be thrown? We >> should either throw NonSquareMatrixException (as MatrixUtils now >> does) on non-square arguments or define precisely what is being >> computed by each of the solvers for non-square arguments and what >> the preconditions are. > Lots of the decompositions are not even defined for non-square > matrices -- for example LU. I think this covers that pretty well: > http://commons.apache.org/proper/commons-math/userguide/linear.html > (end of 3.4) > > Looks like these decompositions do check and reject non-square > matrices, and javadoc that. So set those aside. I think we're talking > about QR and SVD here.
Right. Sorry, I had randomly chosen QR to look at when I did not see clear doco in DecompositionSolver. > > For non-square matrices, the inverse can't exist, so the result is > intended to be a pseudo-inverse. Yes it will always satisfy AXA = A. > We can point people to the definition of pseudo-inverse but I think > the salient fact is that in Ax = b, the "best" answer for x is > pinv(A)*b in the sense that: > > - if there are no exact solutions, x gives the closest solution > (minimizes L2 norm of Ax-b) > - if there are many solutions, x is the smallest solution (smallest L2 > norm of x) > > You can make more specific and useful statements too, like, pinv(A) > will be a left- or right-inverse of A if it's not singular. And of > course if A is square and non-singular you get the real inverse out of > this, which also satisfies the generalized conditions above. > > > 1. The javadoc does say it's a pseudo-inverse which is correct but > maybe it bears explaining that slightly? Yes. Patches most welcome on this. As long as we get good javadoc in the Decomp classes themselves, that is OK, IMO. > > 2. The DecompositionSolver javadoc says that SingularMatrixException > is thrown if A is singular, but, at the least the SVD impl does not. > And indeed it does the meaningful thing in this case. This comment can > be moved down to, say, the QR decomposition, which does reject a > singular matrix (and it's beyond me whether it can be modified to not > do so) Right. The DecompositionSolver javadoc should refer users to the specific impl for preconditions / exceptions. > > 3. While playing with it I was not able to get the QR decomposition to > (pseudo-)invert a tall/skinny (non-singular) matrix. I think it is a > small bug in that it solves for an identity matrix of the wrong size > here, but again, some chance I'm missing something.) Investigation / tests / documentation much appreciated. Thanks for looking into this! Phil > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org