roboptim::GenericTwiceDifferentiableFunction< T > Class Template Reference

Define an abstract function which is twice-derivable ( \(C^2\)). More...

#include <roboptim/core/twice-differentiable-function.hh>

Inheritance diagram for roboptim::GenericTwiceDifferentiableFunction< T >:
roboptim::GenericDifferentiableFunction< T > roboptim::GenericFunction< T > roboptim::Cos< T > roboptim::GenericQuadraticFunction< T > roboptim::NTimesDerivableFunction< 2 > roboptim::Polynomial< T > roboptim::Sin< T > roboptim::GenericLinearFunction< T > roboptim::GenericNumericQuadraticFunction< T > roboptim::GenericConstantFunction< T > roboptim::GenericIdentityFunction< T > roboptim::GenericNumericLinearFunction< T >

List of all members.

Public Types

typedef std::pair< size_type,
size_type
hessianSize_t
 Hessian size type represented as a pair of values.

Public Member Functions

 ROBOPTIM_DIFFERENTIABLE_FUNCTION_FWD_TYPEDEFS_ (GenericDifferentiableFunction< T >)
 ROBOPTIM_ADD_FLAG (ROBOPTIM_IS_TWICE_DIFFERENTIABLE)
 ROBOPTIM_GENERATE_TRAITS_REFS_ (hessian)
 Hessian type.
hessianSize_t hessianSize () const
 Return the size of a hessian.
bool isValidHessian (const_hessian_ref hessian) const
 Check if the hessian is valid (check sizes).
hessian_t hessian (const_argument_ref argument, size_type functionId=0) const
 Compute the hessian at a given point.
void hessian (hessian_ref hessian, const_argument_ref argument, size_type functionId=0) const
 Compute the hessian at a given point.
virtual std::ostream & print (std::ostream &) const
 Display the function on the specified output stream.

Protected Member Functions

 GenericTwiceDifferentiableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string())
 Concrete class constructor should call this constructor.
virtual void impl_hessian (hessian_ref hessian, const_argument_ref argument, size_type functionId=0) const =0
 Hessian evaluation.
void setZero (hessian_ref symmetric) const
 Set a symmetric matrix to zero.

Detailed Description

template<typename T>
class roboptim::GenericTwiceDifferentiableFunction< T >

Define an abstract function which is twice-derivable ( \(C^2\)).

A twice-derivable function is a derivable function which provides a way to compute its hessian.

\[ f : x \rightarrow f(x) \]

\(x \in \mathbb{R}^n\), \(f(x) \in \mathbb{R}^m\) where \(n\) is the input size and \(m\) is the output size.

Hessian computation is done through the impl_hessian method that has to implemented by the concrete class inheriting this class.

The hessian of a \(\mathbb{R}^n \rightarrow \mathbb{R}^m\) function where \(n > 1\) and \(m > 1\) is a tensor. To avoid this costly representation, the function is split into \(m\) \(\mathbb{R}^n \rightarrow \mathbb{R}\) functions. See DifferentiableFunction documentation for more information.


Member Typedef Documentation

template<typename T >
typedef std::pair<size_type, size_type> roboptim::GenericTwiceDifferentiableFunction< T >::hessianSize_t

Hessian size type represented as a pair of values.


Constructor & Destructor Documentation

template<typename T >
roboptim::GenericTwiceDifferentiableFunction< T >::GenericTwiceDifferentiableFunction ( size_type  inputSize,
size_type  outputSize = 1,
std::string  name = std::string () 
) [protected]

Concrete class constructor should call this constructor.

Parameters:
inputSizeinput size (argument size)
outputSizeoutput size (result size)
namefunction's name
Exceptions:
std::runtime_error

Member Function Documentation

template<typename T >
hessian_t roboptim::GenericTwiceDifferentiableFunction< T >::hessian ( const_argument_ref  argument,
size_type  functionId = 0 
) const [inline]

Compute the hessian at a given point.

Program will abort if the argument size is wrong.

Parameters:
argumentpoint where the hessian will be computed
functionIdevaluated function id in the split representation
Returns:
computed hessian

References roboptim::GenericTwiceDifferentiableFunction< T >::hessianSize(), and roboptim::GenericTwiceDifferentiableFunction< T >::setZero().

template<typename T >
void roboptim::GenericTwiceDifferentiableFunction< T >::hessian ( hessian_ref  hessian,
const_argument_ref  argument,
size_type  functionId = 0 
) const [inline]

Compute the hessian at a given point.

Program will abort if the argument size is wrong.

Parameters:
hessianhessian will be stored here
argumentpoint where the hessian will be computed
functionIdevaluated function id in the split representation

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

References roboptim::GenericTwiceDifferentiableFunction< T >::impl_hessian(), roboptim::is_malloc_allowed(), roboptim::GenericTwiceDifferentiableFunction< T >::isValidHessian(), roboptim::GenericFunction< T >::logger, and roboptim::set_is_malloc_allowed().

template<typename T >
hessianSize_t roboptim::GenericTwiceDifferentiableFunction< T >::hessianSize ( ) const [inline]

Return the size of a hessian.

Hessian size is equal to (input size, input size).

Returns:
hessian's size as a pair

References roboptim::GenericFunction< T >::inputSize().

Referenced by roboptim::GenericTwiceDifferentiableFunction< T >::hessian(), and roboptim::GenericTwiceDifferentiableFunction< T >::isValidHessian().

template<typename T >
virtual void roboptim::GenericTwiceDifferentiableFunction< T >::impl_hessian ( hessian_ref  hessian,
const_argument_ref  argument,
size_type  functionId = 0 
) const [protected, pure virtual]

Hessian evaluation.

Compute the hessian, has to be implemented in concrete classes. The hessian is computed for a specific sub-function which id is passed through the functionId argument.

Warning:
Do not call this function directly, call hessian instead.
Parameters:
hessianhessian will be stored here
argumentpoint where the hessian will be computed
functionIdevaluated function id in the split representation

Implemented in roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::Cos< T >, roboptim::Sin< T >, roboptim::Polynomial< T >, roboptim::Cos< T >, roboptim::Sin< T >, and roboptim::GenericLinearFunction< T >.

Referenced by roboptim::GenericTwiceDifferentiableFunction< T >::hessian().

template<typename T >
bool roboptim::GenericTwiceDifferentiableFunction< T >::isValidHessian ( const_hessian_ref  hessian) const [inline]

Check if the hessian is valid (check sizes).

Parameters:
hessianhessian that will be checked
Returns:
true if valid, false if not

References roboptim::GenericTwiceDifferentiableFunction< T >::hessianSize().

Referenced by roboptim::GenericTwiceDifferentiableFunction< T >::hessian().

Hessian type.

Hessians are symmetric matrices.

template<typename T >
void roboptim::GenericTwiceDifferentiableFunction< T >::setZero ( hessian_ref  symmetric) const [inline, protected]

Set a symmetric matrix to zero.

Note:
there might be an eigen function to do that.

Referenced by roboptim::GenericNumericQuadraticFunction< T >::GenericNumericQuadraticFunction(), and roboptim::GenericTwiceDifferentiableFunction< T >::hessian().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines