LU is theoretically lower if you have a faster matrix multiply.

Otherwise it is about 2n^3/3 + n^2 + n/3, I think.

On Wed, Sep 7, 2011 at 9:26 PM, Greg Sterijevski <gsterijev...@gmail.com>wrote:

> I thought that QR is of O(n^3) complexity, while LU is probably in the
> vicinity of O(n^2.5). While this is not a barn burning improvement, it is
> an
> improvement. Consider that if you are using the covariance of the
> parameters
> in deciding how to make the next step (some kind of inverse hessian rule),
> the repeated calls to inverse add up?
>
> Would it be a terrific eyesore to include a constructor with a boolean
> argument that says bUseQR? The call to LU is localized, so there is minimal
> refactoring. One could also pass the boolean into the getCovariances
> method.
>
>
>
>
> On Wed, Sep 7, 2011 at 4:48 PM, Ted Dunning <ted.dunn...@gmail.com> wrote:
>
> > It shouldn't be all that different from QR (at most about 2x different).
> >
> > On Wed, Sep 7, 2011 at 1:16 PM, Greg Sterijevski <gsterijev...@gmail.com
> > >wrote:
> >
> > > It is also my recollection that LU is very quick to calculate. Would it
> > be
> > > possible to allow users to choose?
> > >
> > > On Wed, Sep 7, 2011 at 3:07 PM, Ted Dunning <ted.dunn...@gmail.com>
> > wrote:
> > >
> > > > Does the LUDecomposition not use pivots?  LU should always do so
> since
> > it
> > > > is
> > > > numerically unstable otherwise.  I would be surprised if it doesn't
> > given
> > > > the normal level of quality in commons math.
> > > >
> > > > QR is, of course, almost always preferable to LU as you note.  But I
> > > would
> > > > be surprised at radically different answers.
> > > >
> > > > Perhaps the only real difference between the two methods in this one
> > case
> > > > is
> > > > a difference in threshold.
> > > >
> > > > What is the condition number of your matrix?
> > > >
> > > > On Wed, Sep 7, 2011 at 6:34 AM, Gilles Sadowski <
> > > > gil...@harfang.homelinux.org> wrote:
> > > >
> > > > > Hi.
> > > > >
> > > > > > >>>
> > > > > > >>>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()"?
> > > > >
> > > > >
> > > > > Regards,
> > > > > Gilles
> > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > > > > For additional commands, e-mail: dev-h...@commons.apache.org
> > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to