Registered Member
|
In the page, http://eigen.tuxfamily.org/dox-devel/cl ... ioner.html, this is the description for the diagonal preconditioner:
This class allows to approximately solve for A.x = b problems assuming A is a diagonal matrix. In other words, this preconditioner neglects all off diagonal entries and, in Eigen's language, solves for: A.diagonal().asDiagonal() . x = b I am not clear about this description. What is meant by "solves for: A.diagonal().asDiagonal() . x = b"? That is a big simplification and I don't think that is happening. |
Moderator
|
More precisely is basically does something like:
x = A.diagonal().asDiagonal().inverse() * b; except that the zeros on the diagonal are ignored (if any). |
Registered Member
|
Sorry for the late reply.
Isnt the following a huge simplification? x = A.diagonal().asDiagonal().inverse() * b; Diagonal preconditioning solves the following system in general: A.diagonal().asDiagonal() * A * x = A.diagonal().asDiagonal() * b; |
Moderator
|
once integrated within a solver, the problem that is really solved is A.diagonal().inverse()*(A*x-b)=0 (you forgot the inverse in your equation). Within the solver, we need to be able to apply A.diagonal().inverse() to some vectors, this is what DiagonalPreconditioner::solve() is responsible for. So at the level of DiagonalPreconditioner::solve(), it does something like y = A.diagonal().asDiagonal().pseudoInverse() * f; |
Registered Member
|
Registered users: bartoloni, Bing [Bot], Google [Bot], Yahoo [Bot]