RE: [eigen] SelfAjointView::ldlt() |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: <eigen@xxxxxxxxxxxxxxxxxxx>
- Subject: RE: [eigen] SelfAjointView::ldlt()
- From: "SHIROKOBROD Oleg" <Oleg.Shirokobrod@xxxxxxxxxx>
- Date: Tue, 27 Apr 2010 13:21:04 +0100
- Thread-index: AcrmANvDbVp+98tbRo24LI7h0D20TQAAolAA
- Thread-topic: [eigen] SelfAjointView::ldlt()
Hi,
One has to use obsolete M.part<Eigen::SelfAdjoint>() to fill in a matrix taking advantage of its symmetry unless the bug is fixed.
Oleg
-----Original Message-----
From: Listengine [mailto:listengine@xxxxxxxxxxxxxxxxx] On Behalf Of Benoit Jacob
Sent: Tuesday, April 27, 2010 14:57
To: eigen@xxxxxxxxxxxxxxxxxxx
Subject: Re: [eigen] SelfAjointView::ldlt()
Hi,
a quick look at the code suggests that SelfAdjoitView::ldlt() is
unimplemented, unless i missed it. So either we should implement it,
or remove the declaration.
Right now, you can do: matrix.ldlt() but not selfadjointview.ldlt().
I guess the real problem is that we used to have a little bug in ldlt
that makes it use more than just one triangular half of the matrix.
See comment in LDLT.h. Maybe the first thing to do, is to fix this
bug.
Benoit
2010/4/27 SHIROKOBROD Oleg <Oleg.Shirokobrod@xxxxxxxxxx>:
> Thanks Marton,
>
>
>
> The snippet of the code is part of a least squares fitter. The matrix M is
> the matrix of normal equations. I've forgotten to mention it but values is a
> Vector. I'd like to solve LS normal equation using Cholesky decomposition. I
> use also QR and SVD decomposition to solve LS problem directly without
> making up normal equations.
>
>
>
> Regards,
>
>
>
> Oleg
>
>
>
>
>
> ________________________________
>
> From: Listengine [mailto:listengine@xxxxxxxxxxxxxxxxx] On Behalf Of Márton
> Danóczy
> Sent: Tuesday, April 27, 2010 10:32
> To: eigen@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [eigen] SelfAjointView::ldlt()
>
>
>
> I don't know about the eigen part, but in case your data are available in
> advance, you could gain speed and numerical accuracy by using the qr
> decomposition instead. If A=QR then A'A=R'Q'QR=R'R, thus R is the upper
> triangular cholesky factor of A'A. Just stack your values as row vectors
> vertically into A.
>
>
>
> HTH,
>
> Marton
>
> On 27.04.2010, at 07:50, "SHIROKOBROD Oleg" <Oleg.Shirokobrod@xxxxxxxxxx>
> wrote:
>
> Hello,
>
>
>
> A have a symmetric matrix M with meaningful upper triangular part and
> arbitrary strict lower triangular part (in my case it is zero). I use
> development branch function
> M.selfadjointView<Eigen::UpperTriangular>().rankUpdate (values) at a
> previous step instead of Eigen2 M.part<Eigen::SelfAdjoint>() += values *
> values.transpose() one. I would like to use Cholesky decomposition. When I
> call Eigen::LDLT<Matrix> ldltOfM =
> M.selfadjointView<Eigen::UpperTriangular>().ldlt(), a linker issues the
> error message: "unresolved external symbol SelfAjointView<>::ldlt()". There
> is reference "Cholesky module" before SelfAjointView::ldlt() member
> declaration, but I have not fond the implementation.
>
> What is wrong?
>
>
>
> Thanks,
>
>
>
> Oleg Shirokobrod
>
>
>
>
>
>
>
>
>
>
>
> ___________________________________________________________________________
> This e-mail is confidential and is for the addressee only. Please refer to
> www.oxinst.com/email-statement for regulatory information.
>
> +++ Virus-scanned by MailControl for Oxford Instruments +++