1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
// $Id: fermiBaseFunction.C,v 1.1 2005/11/21 19:27:08 anker Exp $
#include <BALL/common.h>
#include <BALL/SCORING/COMMON/fermiBaseFunction.h>
#include <cmath>
using std::exp;
namespace BALL
{
FermiBaseFunction::FermiBaseFunction()
: a_(0.0),
b_(0.0)
{
}
FermiBaseFunction::FermiBaseFunction(float lower,
float upper)
{
// ????? see constructor of BaseFunctionLinear
// BaseFunction::BaseFunction(lower, upper);
lower_ = lower;
upper_ = upper;
computeFermiParameters_();
}
void FermiBaseFunction::setLower(float lower)
{
ScoringBaseFunction::setLower(lower);
// computeFermiParameters_();
}
void FermiBaseFunction::setUpper(float upper)
{
ScoringBaseFunction::setUpper(upper);
// computeFermiParameters_();
}
float FermiBaseFunction::calculate(float x) const
{
return(1.0 / (1.0 + exp(-a_ * x + b_)));
}
float FermiBaseFunction::calculate(float x, float lower,
float upper)
{
setLower(lower);
setUpper(upper);
computeFermiParameters_();
return(calculate(x));
}
void FermiBaseFunction::computeFermiParameters_()
{
a_ = 4.0 / (lower_ - upper_);
b_ = a_ * (lower_ + 0.5 * (upper_ - lower_));
}
}
|