[SciPy-user] conjugate gradients solver - operator adjoint
Pauli Virtanen
pav at iki.fi
Wed Apr 22 03:46:49 EDT 2009
Tue, 21 Apr 2009 23:42:01 +0200, lists kirjoitti:
> in my program for solving the integral equations in the liquid state
> theory (based on scipy/numpy; check pyoz.vrbka.net if you are interested
> in details) i need to implement a solver of a linear system AX=B -
> generally, this shouldn't be a big problem. there are some issues,
> however...
[clip]
> having a look at the sparse.linalg.solve.cg, there's no way of
> specifying the adjoint
The conjugate gradient method assumes that the matrix is hermitian, hence
no need for specifying adjoint separately.
The algorithm you refer to is probably something different. A reference
to the paper would come handy. Anyway, as far as I see, none of the
solvers in sparse.linalg.* make use of the adjoint, so the particular
algorithm is probably not implemented in scipy.
> (which should be, if i understand the method
> correctly, necessary for getting the result, since it's impossible to
> invert something that big efficiently).
This is probably debatable. There are many iterative algorithms that can
invert non-symmetric matrices not needing to know the adjoint.
You could try using one of
scipy.sparse.linalg.cgs
scipy.sparse.linalg.bicgstab
scipy.sparse.linalg.gmres
to see if one of them works well with your problem.
Note that in general, large problems may require preconditioning for the
solvers to work efficiently. If you have the sparse matrix at hand and
don't want to think, possibilities include incomplete (LU)
decompositions (scipy.sparse.linalg.splu), algebraic multigrid (see
http://code.google.com/p/pyamg/), etc... Especially PyAMG could be worth
trying out, as it's fairly easy to use.
--
Pauli Virtanen
More information about the SciPy-User
mailing list