Integral in TF1

Hi rooters,
I have encounter a problem with TF1::Integral.
here is my code snippet:

//start****
#include <TMath.h>
#include <TF1.h>
double poisson(double *r, double *par);
void bug_integral(){
TF1 tf1=new TF1(“bug”,poisson,0,100,3);
tf1->SetParameters(14.5, 10.2, 1);
for(int n=280; n<300; n++)
cout<<“Integral(0,”<<n<<") = "<Integral(0,n)<<endl;
}
double poisson(double r, double par){
return TMath::Poisson(par[2],par[1]+r[0]par[0]);
}
//end

the output is :
//start******
Processing bug_integral.C…
Integral(0,280) = 2.86932e-05
Integral(0,281) = 2.86937e-05
Integral(0,282) = 2.86941e-05
Integral(0,283) = 2.86946e-05
Integral(0,284) = 2.8695e-05
Integral(0,285) = 2.86954e-05
Integral(0,286) = 2.86958e-05
Integral(0,287) = 2.86962e-05
Integral(0,288) = 2.86966e-05
Integral(0,289) = 2.8697e-05
Integral(0,290) = 9.977e-13
Integral(0,291) = 9.29284e-13
Integral(0,292) = 8.65544e-13
Integral(0,293) = 8.06163e-13
Integral(0,294) = 7.50843e-13
Integral(0,295) = 6.99306e-13
Integral(0,296) = 6.51297e-13
Integral(0,297) = 6.06572e-13
Integral(0,298) = 5.6491e-13
Integral(0,299) = 5.26101e-13
//end******

It seems to me that after n=290, the results of integral are not correctly returned.

can someone point me what’s wrong with it?

Best regards,
Mingshui

Hi,
it is not a bug but a problem of accuracy of the numerical integration.
If you decrease the epsilon value, for example to 1.E-15, by doing as below, you will get a better result

tf1->Integral(0,n,(double *)0,1.E-15)

However, why using a numerical integration for that function ? It is an exponential integral (since par[2] = 1) and you can compute it easily the analytically. See en.wikipedia.org/wiki/List_of_in … _functions

If you have a more complex function to integrate, I would eventually use the adaptive numerical integration algorithm of MathMore (class GSLINtegrator) which is superior. See
root.cern.ch/drupal/content/function-integration

Best Regards

Lorenzo

Hi Lorenzo,

It helps.
Thanks very much for this.

Best regards,
Mingshui

What did you want to solve with these integrals :roll_eyes: What was the challenge?

Hi,
If you have a specific question about TF1::Integral please open a new post.

Lorenzo