diff --git a/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h b/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h index c8b276dcf..f1bed1116 100644 --- a/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h +++ b/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h @@ -330,13 +330,13 @@ struct solve_retval<ConjugateGradient<_MatrixType,_UpLo,_Preconditioner>, Rhs> template<typename CG, typename Rhs, typename Guess> class conjugate_gradient_solve_retval_with_guess - : solve_retval_base<CG, Rhs> + : public solve_retval_base<CG, Rhs> { typedef Eigen::internal::solve_retval_base<CG,Rhs> Base; using Base::dec; using Base::rhs; - - conjugate_gradient_solve_retval_with_guess(const CG& cg, const Rhs& rhs, const Guess guess) + public: + conjugate_gradient_solve_retval_with_guess(const CG& cg, const Rhs& rhs, const Guess& guess) : Base(cg, rhs), m_guess(guess) {} diff --git a/unsupported/test/cg.cpp b/unsupported/test/cg.cpp index bc421985e..a9ac81960 100644 --- a/unsupported/test/cg.cpp +++ b/unsupported/test/cg.cpp @@ -53,6 +53,10 @@ template<typename Scalar,typename Index> void cg(int size) x = ConjugateGradient<SparseMatrixType, Lower>().compute(m3).solve(b); VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solve, full storage, lower"); + x.setRandom(); + x = ConjugateGradient<SparseMatrixType, Lower>().compute(m3).solveWithGuess(b,x); + VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solveWithGuess, full storage, lower"); + x = ConjugateGradient<SparseMatrixType, Upper>().compute(m3).solve(b); VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solve, full storage, upper, single dense rhs");