diff --git a/modules/optim/doc/optim.rst b/modules/optim/doc/optim.rst index b3c7a740b1..dfa4b65df9 100644 --- a/modules/optim/doc/optim.rst +++ b/modules/optim/doc/optim.rst @@ -10,3 +10,4 @@ optim. Generic numerical optimization linear_programming downhill_simplex_method primal_dual_algorithm + conjugate_gradient diff --git a/modules/optim/include/opencv2/optim.hpp b/modules/optim/include/opencv2/optim.hpp index 715372b69a..c1e7819b6c 100644 --- a/modules/optim/include/opencv2/optim.hpp +++ b/modules/optim/include/opencv2/optim.hpp @@ -54,7 +54,6 @@ public: { public: virtual ~Function() {} - //! ndim - dimensionality virtual double calc(const double* x) const = 0; }; @@ -86,6 +85,23 @@ CV_EXPORTS_W Ptr createDownhillSolver(const Ptr(1,1,0.0), TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001)); +//! conjugate gradient method +class CV_EXPORTS ConjGradSolver : public Solver +{ +public: + class CV_EXPORTS Function : public Solver::Function + { + public: + //! gradient is like the first derivative for multivar function + virtual void getGradient(const double* x,double* buf)const=0; + //! Jacobian is like the second derivative + virtual void getJacobian(const double* x)const=0; + }; +}; + +CV_EXPORTS_W Ptr createConjGradSolver(const Ptr& f=Ptr(), + TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001)); + //!the return codes for solveLP() function enum {