1#ifndef __JMATHSUPPORTKIT__
2#define __JMATHSUPPORTKIT__
19namespace JPP {
using namespace JMATH; }
33 inline double gauss(
const double x,
const double sigma)
35 const double u = x / sigma;
52 inline double gauss(
const double x,
const double x0,
const double sigma)
54 return gauss(x - x0, sigma);
65 inline double Gauss(
const double x,
const double sigma)
67 return gauss(x, sigma) / sqrt(2.0*PI) / sigma;
79 inline double Gauss(
const double x,
const double x0,
const double sigma)
81 return Gauss(x - x0, sigma);
96 inline double Gamma(
const double a,
const double x)
100 const int max = 1000000;
105 const double gln = lgamma(a);
118 double sum = 1.0 / a;
121 for (
int i = 0; i != max; ++i) {
127 if (fabs(del) < fabs(sum)*numeric_limits<double>::epsilon()) {
128 return sum*exp(-x + a*log(x) - gln);
136 const double FPMIN = numeric_limits<double>::min() / numeric_limits<double>::epsilon();
138 double b = x + 1.0 - a;
139 double c = 1.0 / FPMIN;
143 for (
int i = 1; i != max; ++i) {
145 const double an = -i * (i-a);
150 if (fabs(d) < FPMIN) {
156 if (fabs(c) < FPMIN) {
162 const double del = d*c;
166 if (fabs(del - 1.0) < numeric_limits<double>::epsilon()) {
167 return 1.0 - exp(-x + a*log(x) - gln) * h;
183 inline double legendre(
const size_t n,
const double x)
199 for (
size_t i = 2; i <= n; ++i) {
202 p2 = ((2*i-1) * x*
p1 - (i-1) * p0) / i;
218 inline double binomial(
const size_t n,
const size_t k)
220 if (n == 0 || n < k) {
224 if (k == 0 || n == k) {
228 const int k1 = std::min(k, n - k);
229 const int k2 = n - k1;
231 double value = k2 + 1;
233 for (
int i = k1; i != 1; --i) {
234 value *= (double) (k2 + i) / (double) i;
248 inline double poisson(
const size_t n,
const double mu)
255 return exp(n*log(mu) - lgamma(n+1) - mu);
258 }
else if (mu == 0.0) {
260 return (n == 0 ? 1.0 : 0.0);
274 inline double Poisson(
const size_t n,
const double mu)
276 return 1.0 -
Gamma(n + 1, mu);
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Exception for accessing a value in a collection that is outside of its range.
Auxiliary classes and methods for mathematical operations.
double Gamma(const double a, const double x)
Incomplete gamma function.
double Gauss(const double x, const double sigma)
Normalised Gauss function.
double poisson(const size_t n, const double mu)
Poisson probability density distribition.
double gauss(const double x, const double sigma)
Gauss function (normalised to 1 at x = 0).
double Poisson(const size_t n, const double mu)
Poisson cumulative density distribition.
double legendre(const size_t n, const double x)
Legendre polynome.
double binomial(const size_t n, const size_t k)
Binomial function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).