commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ted Dunning <ted.dunn...@gmail.com>
Subject Re: [Math] "NonPositiveDefiniteMatrixException" message and meaning
Date Fri, 09 Sep 2011 16:18:41 GMT
Actually, I think that the test in the Cholesky decomposition should be
three-pronged:

  lt[i] > threshold     proceed normally, use sqrt(lt[i])

  lt[i] >= -threshold   treat as zero.  Either return rank-deficient result
if pivoting or
                        signal that original argument is not positive
definite.

  lt[i] < -threshold    treat as indication that original argument is not
semi positive definite.
                        This is different from being simply rank deficient

These tests, as framed above, are obviously sequential.  This can be avoided
if you replace the second test with abs(lt[i]) <= threshold

On Fri, Sep 9, 2011 at 4:13 AM, Gilles Sadowski <
gilles@harfang.homelinux.org> wrote:

> > > Replace that with the correct value.  I meant it to be an index.
> > >
> > > That doesn't change my other points.  There is an inherent problem with
> > > "less than" comments when you have subtracted several other elements
> > > previously and only now notices that the remainder is less than some
> other
> > > adjusted value.  The user cannot relate either value back to anything
> that
> > > they have and they may well look at their own matrix and see the
> opposite
> > > condition.  It is better to give a slightly more abstract message such
> as
> > > "Non-positive definiteness in input detected at diagonal element number
> > > xxx"
> > > where you will have to fill in the xxx since you know which
> place-holders
> > > are which.  NPD-ness is the condition that the decomposition talks
> about to
> > > the user but that condition doesn't occur at any single point in the
> > > matrix... it is a property of the whole.  All the algorithm can do is
> say
> > > "Badness happened, I found it this far along".
>
> OK, I understand. But do you agree that the test should be changed from
>
>   ltI[i] < absolutePositivityThreshold
>
> to
>
>   ltI[i] <= absolutePositivityThreshold
>
> ?

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message