1 #ifndef MATH_CONJUGATE_GRADIENT_H 2 #define MATH_CONJUGATE_GRADIENT_H 19 template <
class Matrix >
22 void set(
const Matrix& m) {}
32 template <
class Matrix >
43 for(
int i=0; i<m.m; i++) {
45 LOG4CXX_INFO(KrisLibrary::logger(),
"Preconditioning won't work, there's a zero entry on diagonal!\n");
49 diagInv(i) = Inv(m(i,i));
59 for(
int i=0; i<r.n; i++)
60 x(i) = r(i)*diagInv(i);
88 template <
class Matrix,
class Preconditioner >
91 const Preconditioner &M,
int &max_iter, Real &tol)
95 Real alpha, beta, rho, rho_1;
101 Real normb = norm(b);
111 if ((resid = norm(r) / normb) <= tol) {
117 for (
int i = 1; i <= max_iter; i++) {
137 LOG4CXX_INFO(KrisLibrary::logger(),
"matrix is not SPD\n");
149 if ((resid = norm(r) / normb) <= tol) {
int CG(const Matrix &A, Vector &x, const Vector &b, const Preconditioner &M, int &max_iter, Real &tol)
Definition: conjgrad.h:90
The logging system used in KrisLibrary.
Identity precondtioner.
Definition: conjgrad.h:20
Jacobi preconditioning (inverse of diagonal)
Definition: conjgrad.h:33
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12