Solves linear system a(x) = b using conjugate gradient solver where a is a linear function of x.
More...
#include <math/optimize/conjgrad.h>
|
typedef D::element_type | value_type |
|
|
value_type | operator() (F &a, const D &b, D &x, const D &preconditioner, value_type convergence_target=-1.0) |
|
template<typename D, typename F>
struct sc::ConjugateGradientSolver< D, F >
Solves linear system a(x) = b using conjugate gradient solver where a is a linear function of x.
- Template Parameters
-
D | type of x and b , as well as the preconditioner; must implement the following standalone functions:
- size_t size(const D&)
- D clone(const D&)
- D copy(const D&)
- value_type minabs_value(const D&)
- value_type maxabs_value(const D&)
- void vec_multiply(D& a, const D& b) (element-wise multiply of a by b)
- value_type dot_product(const D& a, const D& b)
- void scale(D&, value_type)
- void daxpy(D& y, value_type a, const D& x)
- void assign(D&, const D&)
- double norm2(const D&)
|
F | type that evaluates the LHS, will call F::operator()(x, result), hence must implement operator()(const D&, D&) const |
- Parameters
-
a | object of type F |
b | RHS |
x | unknown |
preconditioner | |
convergence_target | |
- Returns
- the 2-norm of the residual, a(x) - b, divided by the number of elements in the residual.
The documentation for this struct was generated from the following file: