|Re: [eigen] How far along is the sparse module?|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] How far along is the sparse module?
- From: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
- Date: Wed, 9 Sep 2009 17:00:22 +0200
- 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=SnkdD88BCmV+2iBMM6Rwlzlx/Njp4vZJaAP64gJ7MoA=; b=WcIL0vTFT0xyUndASusvhipYMA9SzWrkEnVw8YXCiIKR3pqu1TRs+5oNzjSuj8Qt1R RgPskwXiX86VAAhGxY0jRUpSGsKuRH2z+BRuWZJG4vZ/6a60jkj6sOOA4HGHVnPT2uiI NvAyRkTzVcTlyFwjCXrSiW3kAz54AFV5qAiQY=
- 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=Fl0RHgLwwituH1I15DQhHlUncK88/THhlxcvlZDTOR5yh1KdoIL1qXRHep5yTKYI/K bZoI0e2jSUFQqD/lWJrYEP+eiOdllU2qsMpSEBCOzoEp5VXhks2c+pFfOX6hDDIy2eYt J71SU9LPhwXIeYlOPyfCHZtQRlFPrIgK3rJQY=
note that the SparseLLT solver, just like the SparseLU, have several
"backends". For instance, SparseLU can be used with either UmfPack or
SuperLU. For instance to use SuperLU, simply do something like:
SparseLU<MatrixType, SuperLU> solver(H);
Please have a look at this file: eigen2/tests/sparse_solvers.cpp for
some working examples.
A difference between SparseLLT and SparseLU, is that SparseLLT has a
default implementation. However this is a naive implementation which
is usually much slower than CHOLMOD. Actually it is aimed to be used
as a preconditioner for iterative solvers using a quite large
tolerance value which cancels small coefficients. If the
Levenberg-Marquardt does not require an exact linear solver, this
might be a good choice.
There is also the SparseLDLT solver which takes advantage of the SPD
nature of the matrix. Its default implementation is more sophisticated
than the default SparseLLT.
Finally, note that you really should not try to compute the inverse of
the matrix H because it can be very dense even though H is sparse.
Instead, when you want to do: X = H^1 * X, do:
SparseXXX<MatrixType, YYY> solver(H);
that is much more efficient ! (of course you can use the solver object
On Wed, Sep 9, 2009 at 1:35 PM, bp<bjornpiltz@xxxxxxxxxxxxxx> wrote:
> Thanks for the advice!
>>> it can be a beast to use,
> That's why I'd prefer to stick to EIgen for the moment.
> How about using the SparseLLT solver directly?
> I'll have to benchmark it, but it seems to take advantage of the
> triangularity and sparseness of the matrix.
> I would stick with it for now unless it is orders of magnitude slower
> then TAUCS or CHOLMOD.