@Namespace(value="cv") @Properties(inherit=opencv_core.class) public class ConjGradSolver extends MinProblemSolver
defined on an *n*-dimensional Euclidean space, using the **Nonlinear Conjugate Gradient method**.
The implementation was done based on the beautifully clear explanatory article [An Introduction to
the Conjugate Gradient Method Without the Agonizing
Pain](http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf) by Jonathan Richard
Shewchuk. The method can be seen as an adaptation of a standard Conjugate Gradient method (see, for
example
It should be noted, that this method, although deterministic, is rather a heuristic method and
therefore may converge to a local minima, not necessary a global one. What is even more disastrous,
most of its behaviour is ruled by gradient, therefore it essentially cannot distinguish between
local minima and maxima. Therefore, if it starts sufficiently near to the local maximum, it may
converge to it. Another obvious restriction is that it should be possible to compute the gradient of
a function at any point, thus it is preferable to have analytic expression for gradient and
computational burden should be born by the user.
The latter responsibility is accomplished via the getGradient method of a
MinProblemSolver::Function interface (which represents function being optimized). This method takes
point a point in *n*-dimensional space (first argument represents the array of coordinates of that
point) and compute its gradient (it should be stored in the second argument as an array).
\note class ConjGradSolver thus does not add any new methods to the basic MinProblemSolver interface.
\note term criteria should meet following condition:
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
// or
termcrit.type == TermCriteria::MAX_ITER) && termcrit.maxCount > 0
MinProblemSolver.Function
Pointer.CustomDeallocator, Pointer.Deallocator, Pointer.NativeDeallocator, Pointer.ReferenceCounter
Constructor and Description |
---|
ConjGradSolver(Pointer p)
Pointer cast constructor.
|
Modifier and Type | Method and Description |
---|---|
static ConjGradSolver |
create() |
static ConjGradSolver |
create(MinProblemSolver.Function f,
TermCriteria termcrit)
\brief This function returns the reference to the ready-to-use ConjGradSolver object.
|
getFunction, getTermCriteria, minimize, minimize, minimize, setFunction, setTermCriteria
clear, empty, getDefaultName, position, read, save, save, write, write, write
address, asBuffer, asByteBuffer, availablePhysicalBytes, calloc, capacity, capacity, close, deallocate, deallocate, deallocateReferences, deallocator, deallocator, equals, fill, formatBytes, free, hashCode, isNull, isNull, limit, limit, malloc, maxBytes, maxPhysicalBytes, memchr, memcmp, memcpy, memmove, memset, offsetof, parseBytes, physicalBytes, position, put, realloc, referenceCount, releaseReference, retainReference, setNull, sizeof, toString, totalBytes, totalPhysicalBytes, withDeallocator, zero
public ConjGradSolver(Pointer p)
Pointer.Pointer(Pointer)
.@opencv_core.Ptr public static ConjGradSolver create(@opencv_core.Ptr MinProblemSolver.Function f, @ByVal(nullValue="cv::TermCriteria(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS,5000,0.000001)") TermCriteria termcrit)
All the parameters are optional, so this procedure can be called even without parameters at all. In this case, the default values will be used. As default value for terminal criteria are the only sensible ones, MinProblemSolver::setFunction() should be called upon the obtained object, if the function was not given to create(). Otherwise, the two ways (submit it to create() or miss it out and call the MinProblemSolver::setFunction()) are absolutely equivalent (and will drop the same errors in the same way, should invalid input be detected).
f
- Pointer to the function that will be minimized, similarly to the one you submit via
MinProblemSolver::setFunction.termcrit
- Terminal criteria to the algorithm, similarly to the one you submit via
MinProblemSolver::setTermCriteria.@opencv_core.Ptr public static ConjGradSolver create()
Copyright © 2020. All rights reserved.