Re: [eigen] [patch] LDLt decomposition with rank-deficient matrices |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] [patch] LDLt decomposition with rank-deficient matrices
- From: Ben Goodrich <bgokgm@xxxxxxxxxxxxxx>
- Date: Sat, 27 Feb 2010 13:31:01 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=r51HGdtPMGTI5IldbLBvrj0BDQ+kYT0/WHblQBL3GJQ=; b=PH9V7O5AY2PPRqs73Ur4YwFxFCSTJVOPFD/jfuzwiVf8mP8vZhBqSE89M3NRvCHO1E gzFdYhFBIJiuVeArusjYkqMrtu0QD9ulzD+e2S1RiFWfqGwb6PYnIHZIh0buB8FnV22F /1Mi9JKXhZu8RM24XuAX8bZVClXDLQOv756MQ=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=qH2X4iII/8jmWA2QlBFGBY1DNAsOxU0uda/xr3D2b0ARAwpkqp55FH3sO7Ebzsc3ID U2h98Q38hAG5soHmb4Tvp3JA/tLlk2JlRcEY33ThScNbEZFXVO0TujwQyh9NIcxmIEH0 X3jvPRcCUkUZRMiBmEtZRs9m/7uyF87HVPioE=
On Wed, Feb 24, 2010 at 12:45 PM, Ben Goodrich <bgokgm@xxxxxxxxxxxxxx> wrote:
> This is a great example, thank you. In my opinion, it would be good to
> have a way in eigen to define D uniquely by utilizing the unit lower
> triangular restriction on L. In other words, would it be acceptable to
> add an option to the vectorD() and matrixL() methods that reversed the
> pivoting so that the result was in textbook form with respect to the
> original matrix?
Since no one has objected so far, maybe I should try to implement this
myself. But let me make sure I understand what eigen is doing first.
We have the pivoted decomposition
A = P^T L D L^* P
and the vectorD() method and the matrixL() method get the diagonal of
D and the unit lower-triangular matrix L but those correspond to the
pivoted version of A (unless P = I). So to get the factors that
correspond to the original version of A, we need to
(1) pre-multiply matrixL() by P.transpose() to get the leftmost factor
and
(2) multiply the original A from the left by the inverse of the
leftmost factor and from the right by the inverse transposed to get
the diagonal matrix
Is there a faster way to accomplish (2)? It seems like in order to get
the unpivoted D, a method would have to call reconstructedMatrix(), do
(1), invert that matrix, and do two more matrix multiplications. That
would be computationally expensive even if all the steps were
optimized. Users could skip the reconstructedMatrix() step because
they have the original A. Maybe it would be better to write a method
to do (1) and write a separate function that takes A and its
decomposition to do (2)?
Thanks,
Ben