13 #include "msdevstudio/MSconfig.h"
23 #ifdef ITERATOR_MEMBER_DEFECT
32 BrokenPowerLaw::BrokenPowerLaw ( )
37 BrokenPowerLaw::BrokenPowerLaw (
double prefactor,
double index1,
38 double index2,
double x_break)
42 m_parms[0] = prefactor;
48 void BrokenPowerLaw::initialize ()
50 m_name =
"BrokenPowerLaw";
51 m_parm_names.push_back (
"Prefactor" );
52 m_parm_names.push_back (
"Index1" );
53 m_parm_names.push_back (
"Index2" );
54 m_parm_names.push_back (
"Break" );
64 double BrokenPowerLaw::operator () (
double x )
const
67 return m_parms[0]*pow(x/m_parms[3], m_parms[1]);
69 return m_parms[0]*pow(x/m_parms[3], m_parms[2]);
80 max_x = (min_x + max_x)/2.;
86 if (min_y != 0 && max_y != 0) {
87 m_parms[1] = log( max_y/min_y ) / log( max_x/min_x );
88 m_parms[2] = m_parms[1];
90 m_parms[0] = max_y/pow(max_x/m_parms[3], m_parms[1]);
100 m_parms[1] = log( max_y/min_y ) / log( max_x/min_x );
101 m_parms[2] = m_parms[1];
103 m_parms[0] = max_y/pow(max_x/m_parms[3], m_parms[1]);
106 double BrokenPowerLaw::derivByParm (
int i,
double x )
const
110 return operator()(x)/m_parms[0];
114 if (x < m_parms[3]) {
115 return operator()(x)*log(x/m_parms[3]);
122 if (x < m_parms[3]) {
125 return operator()(x)*log(x/m_parms[3]);
130 if (x < m_parms[3]) {
131 return -m_parms[1]*operator()(x)/m_parms[3];
133 return -m_parms[2]*operator()(x)/m_parms[3];