10 #ifndef ITERATIVE_SOLVER_ITERATOR_H_
11 #define ITERATIVE_SOLVER_ITERATOR_H_
18 using namespace Eigen;
47 typedef Matrix<T, Dynamic, 1> VectorXt;
61 index_t max_iteration_limit=1000,
64 : m_max_iteration_limit(max_iteration_limit),
65 m_tolerence(absolute_tolerence+relative_tolerence*b.
norm()),
68 m_iter_info.residual_norm=std::numeric_limits<float64_t>::max();
69 m_iter_info.iteration_count=0;
73 void begin(
const VectorXt& residual)
75 m_iter_info.residual_norm=residual.norm();
76 m_iter_info.iteration_count=0;
80 const bool end(
const VectorXt& residual)
82 m_iter_info.residual_norm=residual.norm();
84 m_success=m_iter_info.residual_norm < m_tolerence;
85 return m_success || m_iter_info.iteration_count >= m_max_iteration_limit;
95 const bool succeeded(
const VectorXt& residual)
99 m_success=m_iter_info.residual_norm < m_tolerence;
106 m_iter_info.iteration_count++;
114 const index_t m_max_iteration_limit;
125 #endif // HAVE_EIGEN3
126 #endif // ITERATIVE_SOLVER_ITERATOR_H_