|
Gaudi Framework, version v21r7 |
| Home | Generated: 22 Jan 2010 |
#include <NumericalDerivative.h>
Public Types | |
| enum | Type { Central, Forward, Backward } |
| the type of numerical differentiation More... | |
Public Member Functions | |
| FUNCTION_OBJECT_DEF (NumericalDerivative) | |
| From CLHEP/GenericFunctions. | |
| NumericalDerivative (const AbsFunction &function, const size_t index, const Type &type=Central) | |
| The standard constructor from AbsFunction and the index of the variable. | |
| NumericalDerivative (const NumericalDerivative &right) | |
| copy constructor | |
| virtual | ~NumericalDerivative () |
| virtual destructor | |
| virtual unsigned int | dimensionality () const |
| dimensionality of the problem | |
| virtual double | operator() (double argument) const |
| Function value. | |
| virtual double | operator() (const Argument &argument) const |
| Function value. | |
| virtual bool | hasAnalyticDerivative () const |
| Does this function have an analytic derivative? | |
| virtual Derivative | partial (unsigned int index) const |
| Derivatives. | |
| const AbsFunction & | function () const |
| access to the function itself | |
| size_t | index () const |
| index | |
| const Type & | type () const |
| type | |
| const Type & | setType (const Type &value) |
| change the type of the adaptive differentiation | |
| double | result () const |
| the result of the last call | |
| double | error () const |
| the absolute error estimate for the last call | |
Protected Member Functions | |
| StatusCode | Exception (const std::string &message, const StatusCode &sc=StatusCode::FAILURE) const |
| Exception. | |
Private Member Functions | |
| NumericalDerivative () | |
| NumericalDerivative & | operator= (const NumericalDerivative &) |
Private Attributes | |
| const AbsFunction * | m_function |
| size_t | m_index |
| size_t | m_DIM |
| Type | m_type |
| Argument | m_argument |
| double | m_result |
| double | m_error |
Definition at line 36 of file NumericalDerivative.h.
| Genfun::GaudiMathImplementation::NumericalDerivative::NumericalDerivative | ( | const AbsFunction & | function, | |
| const size_t | index, | |||
| const Type & | type = Central | |||
| ) |
The standard constructor from AbsFunction and the index of the variable.
The standard constructor from AbsFunction and the index of the variable.
The function, created with this constructor compute the numerical derivatived by finite differencing,. An adaptive algorithm is used to find teh best choice of finite difference and to estimate the error in derivative
gsl_diff_central is used for type = Type::Centralgsl_diff_forward is used for type = Type::Forward. The function is evaluated only at points greater than x_i and x_i itself. This function should be used if f(x) has a singularity or if it is undefined for values less than x_i gsl_diff_backward is used for type = Type::Backward. The function is evaluated only at points smaller than x_i and x_i itself. This function should be used if f(x) has a singularity or if it is undefined for values greater than x_i The adaptime numerical differentiation is used
| function | the function | |
| index | the variable index | |
| function | the function | |
| index | the variable index |
Definition at line 53 of file NumericalDerivative.cpp.
00056 : AbsFunction () 00057 , m_function ( function.clone() ) 00058 , m_index ( index ) 00059 , m_DIM ( function.dimensionality() ) 00060 , m_type ( type ) 00061 , m_argument ( function.dimensionality() ) 00062 , m_result ( GSL_NEGINF ) 00063 , m_error ( GSL_POSINF ) 00064 { 00065 if( m_index >= m_DIM ) 00066 { Exception ( "::constructor invalid variable index " ) ; }; 00067 } ;
| Genfun::GaudiMathImplementation::NumericalDerivative::NumericalDerivative | ( | const NumericalDerivative & | right | ) |
copy constructor
Definition at line 74 of file NumericalDerivative.cpp.
00075 : AbsFunction () 00076 , m_function ( right.m_function->clone() ) 00077 , m_index ( right.m_index ) 00078 , m_DIM ( right.m_DIM ) 00079 , m_type ( right.m_type ) 00080 , m_argument ( right.m_DIM ) 00081 , m_result ( GSL_NEGINF ) 00082 , m_error ( GSL_POSINF ) 00083 {} ;
| Genfun::GaudiMathImplementation::NumericalDerivative::~NumericalDerivative | ( | ) | [virtual] |
virtual destructor
destructor
Definition at line 89 of file NumericalDerivative.cpp.
00090 { if( 0 != m_function ) { delete m_function ; m_function = 0 ; } };
| Genfun::GaudiMathImplementation::NumericalDerivative::NumericalDerivative | ( | ) | [private] |
| Genfun::GaudiMathImplementation::NumericalDerivative::FUNCTION_OBJECT_DEF | ( | NumericalDerivative | ) |
From CLHEP/GenericFunctions.
| virtual unsigned int Genfun::GaudiMathImplementation::NumericalDerivative::dimensionality | ( | ) | const [inline, virtual] |
dimensionality of the problem
Definition at line 98 of file NumericalDerivative.h.
00098 { return m_DIM ; }
| double Genfun::GaudiMathImplementation::NumericalDerivative::operator() | ( | double | argument | ) | const [virtual] |
Function value.
Definition at line 164 of file NumericalDerivative.cpp.
00165 { 00166 // reset the result and the error 00167 m_result = GSL_NEGINF ; 00168 m_error = GSL_POSINF ; 00169 00170 // check the argument 00171 if( 1 != m_DIM ) { Exception ( "operator(): invalid argument size " ); } 00172 00173 Argument arg(1) ; 00174 arg[0] = argument ; 00175 return (*this)( arg ) ; 00176 };
| double Genfun::GaudiMathImplementation::NumericalDerivative::operator() | ( | const Argument & | argument | ) | const [virtual] |
Function value.
copy the argument
use GSL to evaluate the numerical derivative
Definition at line 118 of file NumericalDerivative.cpp.
00119 { 00120 // reset the result and the error 00121 m_result = GSL_NEGINF ; 00122 m_error = GSL_POSINF ; 00123 00124 // check the argument 00125 if( argument.dimension() != m_DIM ) 00126 { Exception ( "::operator():invalid argument size" ) ; }; 00127 00129 {for( size_t i = 0 ; i < m_DIM ; ++i ){ m_argument[i] = argument[i];}} 00130 00131 // create the helper object 00132 GSL_Helper helper( *m_function , m_argument , m_index ); 00133 00135 gsl_function F ; 00136 F.function = &GSL_Adaptor ; 00137 F.params = &helper ; 00138 00139 double x = argument[m_index]; 00140 int ierrno = 0 ; 00141 switch ( type() ) 00142 { 00143 case Central : 00144 ierrno = gsl_diff_central ( &F , x , &m_result , &m_error ) ; break ; 00145 case Forward : 00146 ierrno = gsl_diff_forward ( &F , x , &m_result , &m_error ) ; break ; 00147 case Backward : 00148 ierrno = gsl_diff_backward ( &F , x , &m_result , &m_error ) ; break ; 00149 default: 00150 Exception ( "::operator(): invalid diffrentiation type " ) ; 00151 } 00152 00153 if( ierrno ) 00154 { gsl_error ( " NumericalDerivative:: the error from gsl_diff_XXXX" , 00155 __FILE__ , __LINE__ , ierrno ) ; } 00156 00157 return result() ; 00158 };
| virtual bool Genfun::GaudiMathImplementation::NumericalDerivative::hasAnalyticDerivative | ( | ) | const [inline, virtual] |
Does this function have an analytic derivative?
Definition at line 106 of file NumericalDerivative.h.
| Genfun::Derivative Genfun::GaudiMathImplementation::NumericalDerivative::partial | ( | unsigned int | index | ) | const [virtual] |
Derivatives.
Definition at line 104 of file NumericalDerivative.cpp.
00105 { 00106 if( idx >= m_DIM ) 00107 { Exception ( "::partial(i): invalid variable index" ) ; } 00108 const AbsFunction& aux = 00109 NumericalDerivative( *this , idx , type() ) ; 00110 return FunctionNoop( &aux ) ; 00111 };
| const AbsFunction& Genfun::GaudiMathImplementation::NumericalDerivative::function | ( | ) | const [inline] |
access to the function itself
Definition at line 114 of file NumericalDerivative.h.
00114 { return *m_function ; }
| size_t Genfun::GaudiMathImplementation::NumericalDerivative::index | ( | ) | const [inline] |
| const Type& Genfun::GaudiMathImplementation::NumericalDerivative::type | ( | ) | const [inline] |
| const NumericalDerivative::Type & Genfun::GaudiMathImplementation::NumericalDerivative::setType | ( | const Type & | value | ) |
change the type of the adaptive differentiation
Definition at line 97 of file NumericalDerivative.cpp.
| double Genfun::GaudiMathImplementation::NumericalDerivative::result | ( | ) | const [inline] |
the result of the last call
Definition at line 124 of file NumericalDerivative.h.
00124 { return m_result ; }
| double Genfun::GaudiMathImplementation::NumericalDerivative::error | ( | ) | const [inline] |
the absolute error estimate for the last call
Definition at line 126 of file NumericalDerivative.h.
00126 { return m_error ; }
| StatusCode Genfun::GaudiMathImplementation::NumericalDerivative::Exception | ( | const std::string & | message, | |
| const StatusCode & | sc = StatusCode::FAILURE | |||
| ) | const [protected] |
Exception.
Definition at line 183 of file NumericalDerivative.cpp.
00185 { 00186 throw GaudiException( "NumericalDerivative" + message , 00187 "*GaudiMath*" , sc ) ; 00188 return sc ; 00189 };
| NumericalDerivative& Genfun::GaudiMathImplementation::NumericalDerivative::operator= | ( | const NumericalDerivative & | ) | [private] |
const AbsFunction* Genfun::GaudiMathImplementation::NumericalDerivative::m_function [private] |
Definition at line 142 of file NumericalDerivative.h.
Definition at line 143 of file NumericalDerivative.h.
Definition at line 144 of file NumericalDerivative.h.
Definition at line 145 of file NumericalDerivative.h.
Argument Genfun::GaudiMathImplementation::NumericalDerivative::m_argument [mutable, private] |
Definition at line 147 of file NumericalDerivative.h.
double Genfun::GaudiMathImplementation::NumericalDerivative::m_result [mutable, private] |
Definition at line 148 of file NumericalDerivative.h.
double Genfun::GaudiMathImplementation::NumericalDerivative::m_error [mutable, private] |
Definition at line 149 of file NumericalDerivative.h.