roboptim::GenericDifferentiableFunction< T > Class Template Referenceabstract
Mathematical abstract functions

Define an abstract derivable function ( ). More...

`#include <roboptim/core/fwd.hh>`

Inheritance diagram for roboptim::GenericDifferentiableFunction< T >:

## Public Types

typedef GenericFunctionTraits< T >::gradient_t | gradient_t
| Gradient type. More...
typedef GenericFunctionTraits< T >::jacobian_t | jacobian_t
| Jacobian type. More...
typedef std::pair< size_type, size_type > | jacobianSize_t
| Jacobian size type (pair of values). More...
Public Types inherited from roboptim::GenericFunction< T >
typedef GenericFunctionTraits< T >::value_type | value_type
| Values type. More...
typedef GenericFunctionTraits< T >::vector_t | vector_t
| Basic vector type. More...
typedef GenericFunctionTraits< T >::matrix_t | matrix_t
| Basic matrix type. More...
typedef GenericFunctionTraits< T >::size_type | size_type
| Size type. More...
typedef GenericFunctionTraits< T >::result_t | result_t
| Type of a function evaluation result. More...
typedef GenericFunctionTraits< T >::argument_t | argument_t
| Type of a function evaluation argument. More...
typedef std::pair< value_type, value_type > | interval_t
| Interval type (lower, upper). More...
typedef std::vector< interval_t > | intervals_t
| Vector of intervals. More...
typedef boost::tuple< value_type, value_type, value_type > | discreteInterval_t
| Types representing a discrete interval. More...

## Public Member Functions

| ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ (GenericFunction< T >)
size_type | gradientSize () const throw ()
| Return the gradient size. More...
jacobianSize_t | jacobianSize () const throw ()
| Return the jacobian size as a pair. More...
bool | isValidGradient (const gradient_t &gradient) const throw ()
| Check if the gradient is valid (check size). More...
bool | isValidJacobian (const jacobian_t &jacobian) const throw ()
| Check if the jacobian is valid (check sizes). More...
jacobian_t | jacobian (const argument_t &argument) const throw ()
| Computes the jacobian. More...
void | jacobian (jacobian_t &jacobian, const argument_t &argument) const throw ()
| Computes the jacobian. More...
gradient_t | gradient (const argument_t &argument, size_type functionId=0) const throw ()
| Computes the gradient. More...
void | gradient (gradient_t &gradient, const argument_t &argument, size_type functionId=0) const throw ()
| Computes the gradient. More...
virtual std::ostream & | print (std::ostream &o) const throw ()
| Display the function on the specified output stream. More...
Public Member Functions inherited from roboptim::GenericFunction< T >
bool | isValidResult (const result_t &result) const throw ()
| Check the given result size is valid. More...
GenericFunction< T >::size_type | inputSize () const throw ()
| Return the input size (i.e. More...
GenericFunction< T >::size_type | outputSize () const throw ()
| Return the output size (i.e. More...
virtual | ~GenericFunction () throw ()
| Trivial destructor. More...
result_t | operator() (const argument_t &argument) const throw ()
| Evaluate the function at a specified point. More...
void | operator() (result_t &result, const argument_t &argument) const throw ()
| Evaluate the function at a specified point. More...
const std::string & | getName () const throw ()
| Get function name. More...

## Protected Member Functions

| GenericDifferentiableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) throw ()
| Concrete class constructor should call this constructor. More...
virtual void | impl_jacobian (jacobian_t &jacobian, const argument_t &arg) const throw ()
| Jacobian evaluation. More...
virtual void | impl_gradient (gradient_t &gradient, const argument_t &argument, size_type functionId=0) const =0 throw ()
| Gradient evaluation. More...
template<>
void | impl_jacobian (jacobian_t &jacobian, const argument_t &argument) const throw()
Protected Member Functions inherited from roboptim::GenericFunction< T >
| GenericFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) throw ()
| Concrete class constructor should call this constructor. More...
virtual void | impl_compute (result_t &result, const argument_t &argument) const =0 throw ()
| Function evaluation. More...

## Additional Inherited Members

Static Public Member Functions inherited from roboptim::GenericFunction< T >
static value_type | epsilon () throw ()
| Get the value of the machine epsilon, useful for floating types comparison. More...
static value_type | infinity () throw ()
| Get the value that symbolizes positive infinity. More...
static interval_t | makeInterval (value_type l, value_type u) throw ()
| Construct an interval from a lower and upper bound. More...
static interval_t | makeInfiniteInterval () throw ()
| Construct an infinite interval. More...
static interval_t | makeLowerInterval (value_type l) throw ()
| Construct an interval from a lower bound. More...
static interval_t | makeUpperInterval (value_type u) throw ()
| Construct an interval from an upper bound. More...
static double | getLowerBound (const interval_t &interval) throw ()
| Get the lower bound of an interval. More...
static double | getUpperBound (const interval_t &interval) throw ()
| Get the upper bound of an interval. More...
static discreteInterval_t | makeDiscreteInterval (value_type min, value_type max, value_type step)
| Construct a discrete interval. More...
static discreteInterval_t | makeDiscreteInterval (interval_t interval, value_type step)
| Construct a discrete interval. More...
static double | getLowerBound (const discreteInterval_t &interval) throw ()
| Get the lower bound of a discrete interval. More...
static double | getUpperBound (const discreteInterval_t &interval) throw ()
| Get the upper bound of a discrete interval. More...
static double | getStep (const discreteInterval_t &interval) throw ()
| Get the upper step of a discrete interval. More...
template<typename F >
static void | foreach (const discreteInterval_t interval, F functor)
| Iterate on an interval. More...
template<typename F >
static void | foreach (const interval_t interval, const size_type n, F functor)
| Iterate on an interval. More...
Static Protected Attributes inherited from roboptim::GenericFunction< T >
static log4cxx::LoggerPtr | logger
| Pointer to function logger (see log4cxx documentation). More...

## Detailed Description

### template<typename T>
class roboptim::GenericDifferentiableFunction< T >

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.

Examples:
  finite-difference-gradient.cc.

## Member Typedef Documentation

template<typename T>

typedef GenericFunctionTraits<T>::gradient_t roboptim::GenericDifferentiableFunction< T >::gradient_t

Gradient type.

template<typename T>

typedef GenericFunctionTraits<T>::jacobian_t roboptim::GenericDifferentiableFunction< T >::jacobian_t

Jacobian type.

template<typename T>

typedef std::pair<size_type, size_type> roboptim::GenericDifferentiableFunction< T >::jacobianSize_t

Jacobian size type (pair of values).

## Constructor & Destructor Documentation

template<typename T >

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.

Parameters

  inputSize | input size (argument size)
  outputSize | output size (result size)
  name | function's name

## Member Function Documentation

template<typename T>

gradient_t roboptim::GenericDifferentiableFunction< T >::gradient | ( | const argument_t & | argument,
|  | size_type | functionId = `0`
| ) |  | const
throw | ( |
| ) |  |

inline

Computes the gradient.

Parameters

  argument | point at which the gradient will be computed
  functionId | function id in split representation

Returns
  gradient vector

Examples:
  constant-function.cc, finite-difference-gradient.cc, identity-function.cc, and numeric-quadratic-function.cc.

References roboptim::GenericDifferentiableFunction< T >::gradientSize().

Referenced by roboptim::checkGradient(), roboptim::checkGradientAndThrow(), and roboptim::GenericDifferentiableFunction< T >::isValidGradient().

template<typename T>

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.

Parameters

  gradient | gradient will be stored in this argument
  argument | point at which the gradient will be computed
  functionId | function id in split representation

Returns
  gradient vector

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

References roboptim::GenericFunction< T >::inputSize(), roboptim::GenericDifferentiableFunction< T >::isValidGradient(), and roboptim::GenericFunction< T >::logger.

template<typename T>

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().

template<typename T>

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.

Warning
  Do not call this function directly, call gradient instead.

Parameters

  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::SumOfC1Squares, roboptim::GenericNumericLinearFunction< T >, roboptim::NumericQuadraticFunction, roboptim::IdentityFunction, and roboptim::ConstantFunction.

template<>

void roboptim::GenericDifferentiableFunction< EigenMatrixSparse >::impl_jacobian | ( | jacobian_t & | jacobian,
|  | const argument_t & | argument
| ) |  | const
throw | ( |
| ) |  |

inline protected

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

template<typename T >

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.

Warning
  Do not call this function directly, call jacobian instead.

Parameters

  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.

template<typename T>

bool roboptim::GenericDifferentiableFunction< T >::isValidGradient | ( | const gradient_t & | gradient | ) | const
throw | ( |
| ) |  |

inline

Check if the gradient is valid (check size).

Parameters

  gradient | checked gradient

Returns
  true if valid, false if not

References roboptim::GenericDifferentiableFunction< T >::gradient(), and roboptim::GenericDifferentiableFunction< T >::gradientSize().

Referenced by roboptim::GenericDifferentiableFunction< T >::gradient().

template<typename T>

bool roboptim::GenericDifferentiableFunction< T >::isValidJacobian | ( | const jacobian_t & | jacobian | ) | const
throw | ( |
| ) |  |

inline

Check if the jacobian is valid (check sizes).

Parameters

  jacobian | checked jacobian

Returns
  true if valid, false if not

References roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::GenericDifferentiableFunction< T >::jacobianSize().

Referenced by roboptim::GenericDifferentiableFunction< T >::jacobian().

template<typename T>

jacobian_t roboptim::GenericDifferentiableFunction< T >::jacobian | ( | const argument_t & | argument | ) | const
throw | ( |
| ) |  |

inline

Computes the jacobian.

Parameters

  argument | point at which the jacobian will be computed

Returns
  jacobian matrix

Examples:
  constant-function.cc, numeric-linear-function.cc, and numeric-quadratic-function.cc.

References roboptim::GenericDifferentiableFunction< T >::jacobianSize().

Referenced by roboptim::GenericDifferentiableFunction< T >::isValidJacobian(), roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::visualization::gnuplot::plot_jac().

template<typename T>

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.

Parameters

  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::GenericFunction< T >::inputSize(), roboptim::GenericDifferentiableFunction< T >::isValidJacobian(), roboptim::GenericDifferentiableFunction< T >::jacobian(), and roboptim::GenericFunction< T >::logger.

template<typename T>

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().

template<typename T >

std::ostream & roboptim::GenericDifferentiableFunction< T >::print | ( | std::ostream & | o | ) | const
throw | ( |
| ) |  |

virtual

Display the function on the specified output stream.

Parameters

  o | output stream used for display

Returns
  output stream

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().

template<typename T>

roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ | ( | GenericFunction< T > |  | ) |