commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilles Sadowski <>
Subject Re: [Math] "LUDecomposition" in "AbstractLeastSquaresOptimizer"
Date Wed, 07 Sep 2011 13:34:12 GMT

> >>>
> >>>In class "AbstractLeastSquaresOptimizer" (in "o.a.c.m.optimization.general"),
> >>>the method "getCovariances()" uses "LUDecompositionImpl" to compute the
> >>>inverse of a matrix.
> >>>In my application, this leads to a "SingularMatrixException". If I change
> >>>"LUDecompositionImpl" to "QRDecompositionImpl", no exception is raised.
> >>>Also, keeping "LUDecompositionImpl" but passing a much lower singularity
> >>>threshold, does not raise the exception either.
> >>>
> >>>Thus, I wonder whether there was a reason for using "LU", and if not,
> >>>whether I could change the decomposition solver to "QR" (as this is a
> >>>cleaner solution than guessing a good value for the threshold).
> >>
> >>There are no reason for LU decomposition, and QR decomposition is
> >>known to be more stable. So I would also consider switching to this
> >>algorithm is a cleaner solution.
> >
> >Fine. I'll open a JIRA issue.
> >
> >A unit test "testNonInvertible" in "LevenbergMarquardtOptimizerTest" fails
> >with the change to "QRDecomposition" because no "SingularMatrixException"
> >is raised anymore.
> >What was the purpose of that test?
> The purpose was to check that impossible problems were detected properly.

My question should have been clearer: Was the previous behaviour correct
(i.e. an exception *must* be raised somehow)?
The switch to "QR" seems to imply that a previously impossible problem is
now quite possible.  So, is the problem really impossible or was the test
actually testing a fragile implementation of "getCovariances()"?


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message