35 #ifndef AIMS_OPTIMIZATION_LMGAMMA_H 36 #define AIMS_OPTIMIZATION_LMGAMMA_H 49 LMGamma( T k=(T)1.0, T ta=(T)4.0, T a=(T)3.0, T b=(T)1.5 );
56 template<
class T >
inline 59 this->
par.push_back( k );
60 this->
par.push_back( ta );
61 this->
par.push_back( a );
62 this->
par.push_back( b );
64 this->
der = std::vector< T >( 4 );
68 template<
class T >
inline 71 if ( x > this->
par[ 1 ] )
74 double k = (double)this->
par[ 0 ];
76 double a = (double)this->
par[ 2 ];
78 double tta = (double)( x - this->
par[ 1 ] );
80 double ltta = log( tta );
82 double ttab = tta / this->
par[ 3 ];
85 double expf = exp( a * ltta - ttab );
91 this->
der[ 0 ] = (T)expf;
94 this->
der[ 1 ] = (T)( k * ( ttab - a ) * exp( ( a - 1 ) * ltta - ttab ) );
97 this->
der[ 2 ] = (T)( k * ltta * expf );
100 double b2 = (double)( this->
par[ 3 ] * this->
par[ 3 ] );
101 this->
der[ 3 ] = (T)( k * exp( ( a + 1 ) * ltta - ttab ) / b2 );
107 this->
der[ 0 ] = this->
der[ 1 ] = this->
der[ 2 ] = this->
der[ 3 ] = (T)0;
114 template<
class T >
inline 117 if ( x > this->
par[ 1 ] )
120 double tta = (double)( x - this->
par[ 1 ] );
122 double ltta = log( tta );
124 double ttab = tta / this->
par[ 3 ];
126 return (T)( this->
par[ 0 ] * exp( this->
par[ 2 ] * ltta - ttab ) );
LMGamma(T k=(T) 1.0, T ta=(T) 4.0, T a=(T) 3.0, T b=(T) 1.5)