roboptim::TwiceDerivableFunction Class Reference

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

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

Inheritance diagram for roboptim::TwiceDerivableFunction:

List of all members.

Public Types

typedef
ublas::symmetric_matrix
< value_type, ublas::lower > 
hessian_t
 Hessian type.
typedef std::pair< size_type,
size_type
hessianSize_t
 Hessian size type represented as a pair of values.

Public Member Functions

hessianSize_t hessianSize () const throw ()
 Return the size of a hessian.
bool isValidHessian (const hessian_t &hessian) const throw ()
 Check if the hessian is valid (check sizes).
hessian_t hessian (const argument_t &argument, size_type functionId=0) const throw ()
 Compute the hessian at a given point.
void hessian (hessian_t &hessian, const argument_t &argument, size_type functionId=0) const throw ()
 Compute the hessian at a given point.
virtual std::ostream & print (std::ostream &) const throw ()
 Display the function on the specified output stream.

Protected Member Functions

 TwiceDerivableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) throw ()
 Concrete class constructor should call this constructor.
virtual void impl_hessian (hessian_t &hessian, const argument_t &argument, size_type functionId=0) const =0 throw ()
 Hessian evaluation.

Detailed Description

Define an abstract function which is derivable twice ( $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 DerivableFunction documentation for more information.


Member Typedef Documentation

typedef ublas::symmetric_matrix<value_type, ublas::lower> roboptim::TwiceDerivableFunction::hessian_t

Hessian type.

Hessians are symmetric matrices.

Hessian size type represented as a pair of values.


Constructor & Destructor Documentation

roboptim::TwiceDerivableFunction::TwiceDerivableFunction ( size_type  inputSize,
size_type  outputSize = 1,
std::string  name = std::string () 
) throw () [protected]

Concrete class constructor should call this constructor.

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

Member Function Documentation

hessian_t roboptim::TwiceDerivableFunction::hessian ( const argument_t argument,
size_type  functionId = 0 
) const throw () [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
Examples:
numeric-quadratic-function.cc.
void roboptim::TwiceDerivableFunction::hessian ( hessian_t hessian,
const argument_t argument,
size_type  functionId = 0 
) const throw () [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

References RoboptimCoreDout.

hessianSize_t roboptim::TwiceDerivableFunction::hessianSize ( ) const throw () [inline]

Return the size of a hessian.

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

Returns:
hessian's size as a pair
virtual void roboptim::TwiceDerivableFunction::impl_hessian ( hessian_t hessian,
const argument_t argument,
size_type  functionId = 0 
) const throw () [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::LinearFunction, roboptim::NTimesDerivableFunction< 2 >, and roboptim::NumericQuadraticFunction.

bool roboptim::TwiceDerivableFunction::isValidHessian ( const hessian_t hessian) const throw () [inline]

Check if the hessian is valid (check sizes).

Parameters:
hessianhessian that will be checked
Returns:
true if valid, false if not
std::ostream & roboptim::TwiceDerivableFunction::print ( std::ostream &  o) const throw () [virtual]

Display the function on the specified output stream.

Parameters:
ooutput stream used for display
Returns:
output stream

Reimplemented from roboptim::DerivableFunction.

Reimplemented in roboptim::ConstantFunction, roboptim::IdentityFunction, roboptim::LinearFunction, roboptim::NTimesDerivableFunction< 2 >, roboptim::NumericLinearFunction, roboptim::NumericQuadraticFunction, and roboptim::QuadraticFunction.