Art,
See comments in the example below. If you execute the script, you should get:
g->Integral(0,5) = 1.25331 g->Integral(0,1000) = 1.25319 g->IntegralFast(n,x,w,0,5) = 1.25331 g->IntegralFast(n,x,w,0,1000) = 1.25331 g->IntegralFast(n,x,w,0,10000) = 1.25331 g->IntegralFast(n,x,w,0,100000)= 1.253
Rene Brun
void gint() {
TF1 *g = new TF1("g","gaus",-5,5);
g->SetParameters(1,0,1);
//default gaus integration method uses 6 points
//not suitable to intregrate on a large domain
double r1 = g->Integral(0,5);
double r2 = g->Integral(0,1000);
//try with user directives computing more points
Int_t np = 1000; double *x=new double[np]; double *w=new double[np];
double r3 = g->IntegralFast(np,x,w,0,5); double r4 = g->IntegralFast(np,x,w,0,1000); double r5 = g->IntegralFast(np,x,w,0,10000); double r6 = g->IntegralFast(np,x,w,0,100000); printf("g->Integral(0,5) = %g\n",r1); printf("g->Integral(0,1000) = %g\n",r2); printf("g->IntegralFast(n,x,w,0,5) = %g\n",r3); printf("g->IntegralFast(n,x,w,0,1000) = %g\n",r4);printf("g->IntegralFast(n,x,w,0,10000) = %g\n",r5); printf("g->IntegralFast(n,x,w,0,100000)= %g\n",r6); delete [] x;
On Tue, 25
Oct 2005, Arthur E. Snyder wrote:
>
> I find if I do an integral of a positive definite function I get 0 if the
> limits are large. E.g., a simple 1 sigma Gaussian:
>
> root [18] g->Integral(0,5)
> (Double_t)6.26657068657750171e-01
> root [19] g->Integral(0,1000)
> (Double_t)5.47544282673530046e-24
> root [20] g->Integral(0,10000)
> (Double_t)0.00000000000000000e+00
> root [21]
>
> This is not a very sensible or convenient behavior. It appears if the
> limits are set very large the interval used in the nummerical intergration
> are so large that the non-zero regions of the function may be missed
> entirely.
>
> A bug or a feature? Certainly a nuissance when I'm trying to convolute a
> Gaussian with some other function using this numerical integration.
>
> Is there perhaps some way to avoid this problem?
>
> -Art S.
>
> A.E. Snyder, Group EC \!c*p?/
> SLAC Mail Stop #95 ((. .))
> Box 4349 |
> Stanford, Ca, USA, 94309 '\|/`
> e-mail:snyder_at_slac.stanford.edu o
> phone:650-926-2701 _
> http://www.slac.stanford.edu/~snyder BaBar
> FAX:650-926-2657 Collaboration
>
Received on Wed Oct 26 2005 - 12:46:33 MEST
This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:13 MET