Define an abstract derivable function ( ). More...
#include <roboptim/core/differentiable-function.hh>
Public Types | |
typedef GenericFunctionTraits < T >::gradient_t | gradient_t |
Gradient type. | |
typedef GenericFunctionTraits < T >::jacobian_t | jacobian_t |
Jacobian type. | |
typedef std::pair< size_type, size_type > | jacobianSize_t |
Jacobian size type (pair of values). | |
Public Member Functions | |
ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ (GenericFunction< T >) | |
size_type | gradientSize () const throw () |
Return the gradient size. | |
jacobianSize_t | jacobianSize () const throw () |
Return the jacobian size as a pair. | |
bool | isValidGradient (const gradient_t &gradient) const throw () |
Check if the gradient is valid (check size). | |
bool | isValidJacobian (const jacobian_t &jacobian) const throw () |
Check if the jacobian is valid (check sizes). | |
jacobian_t | jacobian (const argument_t &argument) const throw () |
Computes the jacobian. | |
void | jacobian (jacobian_t &jacobian, const argument_t &argument) const throw () |
Computes the jacobian. | |
gradient_t | gradient (const argument_t &argument, size_type functionId=0) const throw () |
Computes the gradient. | |
void | gradient (gradient_t &gradient, const argument_t &argument, size_type functionId=0) const throw () |
Computes the gradient. | |
virtual std::ostream & | print (std::ostream &o) const throw () |
Display the function on the specified output stream. | |
Protected Member Functions | |
GenericDifferentiableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) throw () | |
Concrete class constructor should call this constructor. | |
virtual void | impl_jacobian (jacobian_t &jacobian, const argument_t &arg) const throw () |
Jacobian evaluation. | |
virtual void | impl_gradient (gradient_t &gradient, const argument_t &argument, size_type functionId=0) const =0 throw () |
Gradient evaluation. | |
template<> | |
void | impl_jacobian (jacobian_t &jacobian, const argument_t &argument) const throw() |
Define an abstract derivable function ( ).
A derivable function which provides a way to compute its gradient/jacobian.
, where is the input size and is the output size.
Gradient computation is done through the impl_gradient method that has to implemented by the concrete class inheriting this class.
Jacobian computation is automatically done by concatenating gradients together, however this naive implementation can be overridden by the concrete class.
The gradient of a function where and is a matrix. As this representation is costly, RobOptim considers these functions as functions. Through that mechanism, gradients are always vectors and jacobian are always matrices. When the gradient or the jacobian has to be computed, one has to precise which of the functions should be considered.
If , then the function id must always be 0 and can be safely ignored in the gradient/jacobian computation. The class provides a default value for the function id so that these functions do not have to explicitly set the function id.
typedef GenericFunctionTraits<T>::gradient_t roboptim::GenericDifferentiableFunction< T >::gradient_t |
Gradient type.
Reimplemented in roboptim::SumOfC1Squares.
typedef GenericFunctionTraits<T>::jacobian_t roboptim::GenericDifferentiableFunction< T >::jacobian_t |
Jacobian type.
Reimplemented in roboptim::SumOfC1Squares.
typedef std::pair<size_type, size_type> roboptim::GenericDifferentiableFunction< T >::jacobianSize_t |
Jacobian size type (pair of values).
Reimplemented in roboptim::SumOfC1Squares.
roboptim::GenericDifferentiableFunction< T >::GenericDifferentiableFunction | ( | size_type | inputSize, |
size_type | outputSize = 1 , |
||
std::string | name = std::string () |
||
) | throw () [protected] |
Concrete class constructor should call this constructor.
inputSize | input size (argument size) |
outputSize | output size (result size) |
name | function's name |
gradient_t roboptim::GenericDifferentiableFunction< T >::gradient | ( | const argument_t & | argument, |
size_type | functionId = 0 |
||
) | const throw () [inline] |
Computes the gradient.
argument | point at which the gradient will be computed |
functionId | function id in split representation |
References roboptim::GenericDifferentiableFunction< T >::gradientSize().
Referenced by roboptim::checkGradient(), roboptim::checkGradientAndThrow(), and roboptim::GenericDifferentiableFunction< T >::isValidGradient().
void roboptim::GenericDifferentiableFunction< T >::gradient | ( | gradient_t & | gradient, |
const argument_t & | argument, | ||
size_type | functionId = 0 |
||
) | const throw () [inline] |
Computes the gradient.
Program will abort if the gradient size is wrong before or after the gradient computation.
gradient | gradient will be stored in this argument |
argument | point at which the gradient will be computed |
functionId | function id in split representation |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
References roboptim::GenericDifferentiableFunction< T >::impl_gradient(), roboptim::GenericFunction< T >::inputSize(), roboptim::GenericDifferentiableFunction< T >::isValidGradient(), and roboptim::GenericFunction< T >::logger.
size_type roboptim::GenericDifferentiableFunction< T >::gradientSize | ( | ) | const throw () [inline] |
Return the gradient size.
Gradient size is equals to the input size.
References roboptim::GenericFunction< T >::inputSize().
Referenced by roboptim::GenericDifferentiableFunction< T >::gradient(), and roboptim::GenericDifferentiableFunction< T >::isValidGradient().
virtual void roboptim::GenericDifferentiableFunction< T >::impl_gradient | ( | gradient_t & | gradient, |
const argument_t & | argument, | ||
size_type | functionId = 0 |
||
) | const throw () [protected, pure virtual] |
Gradient evaluation.
Compute the gradient, has to be implemented in concrete classes. The gradient is computed for a specific sub-function which id is passed through the functionId argument.
gradient | gradient will be store in this argument |
argument | point where the gradient will be computed |
functionId | evaluated function id in the split representation |
Implemented in roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >, roboptim::GenericNumericLinearFunction< T >, roboptim::SumOfC1Squares, roboptim::NumericQuadraticFunction, roboptim::IdentityFunction, and roboptim::ConstantFunction.
Referenced by roboptim::GenericDifferentiableFunction< T >::gradient().
void roboptim::GenericDifferentiableFunction< EigenMatrixSparse >::impl_jacobian | ( | jacobian_t & | jacobian, |
const argument_t & | argument | ||
) | const throw() [inline, protected] |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
Reimplemented in roboptim::GenericNumericLinearFunction< T >, roboptim::IdentityFunction, and roboptim::ConstantFunction.
void roboptim::GenericDifferentiableFunction< T >::impl_jacobian | ( | jacobian_t & | jacobian, |
const argument_t & | arg | ||
) | const throw () [protected, virtual] |
Jacobian evaluation.
Computes the jacobian, can be overridden by concrete classes. The default behavior is to compute the jacobian from the gradient.
jacobian | jacobian will be store in this argument |
arg | point where the jacobian will be computed |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
Reimplemented in roboptim::GenericNumericLinearFunction< T >, roboptim::IdentityFunction, and roboptim::ConstantFunction.
Referenced by roboptim::GenericDifferentiableFunction< T >::jacobian().
bool roboptim::GenericDifferentiableFunction< T >::isValidGradient | ( | const gradient_t & | gradient | ) | const throw () [inline] |
Check if the gradient is valid (check size).
gradient | checked gradient |
References roboptim::GenericDifferentiableFunction< T >::gradient(), and roboptim::GenericDifferentiableFunction< T >::gradientSize().
Referenced by roboptim::GenericDifferentiableFunction< T >::gradient().
bool roboptim::GenericDifferentiableFunction< T >::isValidJacobian | ( | const jacobian_t & | jacobian | ) | const throw () [inline] |
Check if the jacobian is valid (check sizes).
jacobian | checked jacobian |
References roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::GenericDifferentiableFunction< T >::jacobianSize().
Referenced by roboptim::GenericDifferentiableFunction< T >::jacobian().
jacobian_t roboptim::GenericDifferentiableFunction< T >::jacobian | ( | const argument_t & | argument | ) | const throw () [inline] |
Computes the jacobian.
argument | point at which the jacobian will be computed |
References roboptim::GenericDifferentiableFunction< T >::jacobianSize().
Referenced by roboptim::GenericDifferentiableFunction< T >::isValidJacobian(), roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::visualization::gnuplot::plot_jac().
void roboptim::GenericDifferentiableFunction< T >::jacobian | ( | jacobian_t & | jacobian, |
const argument_t & | argument | ||
) | const throw () [inline] |
Computes the jacobian.
Program will abort if the jacobian size is wrong before or after the jacobian computation.
jacobian | jacobian will be stored in this argument |
argument | point at which the jacobian will be computed |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
References roboptim::GenericDifferentiableFunction< T >::impl_jacobian(), roboptim::GenericFunction< T >::inputSize(), roboptim::GenericDifferentiableFunction< T >::isValidJacobian(), roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::GenericFunction< T >::logger.
jacobianSize_t roboptim::GenericDifferentiableFunction< T >::jacobianSize | ( | ) | const throw () [inline] |
Return the jacobian size as a pair.
Gradient size is equals to (output size, input size).
References roboptim::GenericFunction< T >::inputSize(), and roboptim::GenericFunction< T >::outputSize().
Referenced by roboptim::IdentityFunction::impl_jacobian(), roboptim::GenericDifferentiableFunction< T >::isValidJacobian(), and roboptim::GenericDifferentiableFunction< T >::jacobian().
std::ostream & roboptim::GenericDifferentiableFunction< T >::print | ( | std::ostream & | o | ) | const throw () [virtual] |
Display the function on the specified output stream.
o | output stream used for display |
Reimplemented from roboptim::GenericFunction< T >.
Reimplemented in roboptim::GenericTwiceDifferentiableFunction< T >, roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericLinearFunction< T >, roboptim::NumericQuadraticFunction, roboptim::GenericNumericLinearFunction< T >, roboptim::GenericQuadraticFunction< T >, roboptim::IdentityFunction, and roboptim::ConstantFunction.
References roboptim::indent().
roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ | ( | GenericFunction< T > | ) |