|Re: [eigen] Positive Definitenes?|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Positive Definitenes?
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Wed, 3 Mar 2010 06:56:42 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=OqoQ2cqjKLB6UXJZHKT63aX4pgOMSS3uoW8muxAXZiw=; b=Op01/PlG0jjqJnwlJ++8bX26D0RvKJJaYlaZAhuN5sCtOqE7/DxRkZzMEfPl9VCe9C hXgivhwafHgIugsKflR9Ia1/S3sKpe+/CHDejoYBfvKTY1cpntif+6AYKoAU/QHcR9Cl 2s7zjARz50wRReCWNyIk1sNetXwr2ZtSIi5mQ=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=MHnqmwthDs8sT4JIrVU2M3LbWwUhRrb0CSHD626V94opcjvUtjizuUmmm7EgTiz6li f3N6wkiCscvNs88XHBoBHgtnNyzoZIywfBLbwjoEKx90HYLHDuULTg1a6Ou0DdVO41Za PAEZpzc7GwccZS0hYWHvXB5XeplVDUakybYBw=
2010/3/3 Cyril Flaig <cflaig@xxxxxxxxxxx>:
> On 2010-03-02 19:27, Benoit Jacob wrote:
>> 2010/3/2 Cyril Flaig <cflaig@xxxxxxxxxxx>:
>>> The Cholesky decomposition works only if the matrix is positive
>>> definite. If the decomposition fails then eigen sets a
>>> m_isPositiveDefinite to false, doesn't it?
>>> Or is this deprecated and not used in the new version?
>> This is deprecated indeed.
> As far as I know. The fastest way to determine the postive definitnes is
> to check the diagonal if all entries are >=0.
This is indeed a necessary condition for positiveness.
> If this is true then
> attempt a Cholesky decomposition. If it exists then the matrix is
> positive definite.
The problem with this approach is that it's an all-or-nothing test
that one has to perform at the time of the decomposition itself.
Making this useful in practice would require us to let the user pass a
choice of a threshold at the time of the decomposition itself (so an
API change) and even then, that would be pretty bad as, if the user
passes a higher threshold, he compromises the accuracy of a subsequent
solve(). So this forces a compromise between the invertibility check
and the precision of solve().