Hi Stanislav, Vincent, Martin,
When we introduced the new TF1 functions (thanks Gene Van Buren)
TF1::Moment and CentralMoment, the integral of the function must be evaluated
with the absolute value of the function.
I was supposed to introduce immediatly a flag in TF1::Integral to use
the normal function value or its absolute value. Unfortunately, I forgot
to do it. Apologies.
I have now introduced this flag in the CVS version.
The functions TF1::Integral and TF1::IntegralMultiple have been modified
to use the absolute value of the function when fgAbsValue is TRUE.
The functions TF1::Moment and TF1::CentralMoment set fgAbsValue to kTRUE.
By default fgAbsValue is kFALSE
Rene Brun
Stanislav Nesterov wrote:
>
> Hi,
> You are right. An integral of the absolute value is calculated since
> ver. 1.68 of TF1.cxx (CVS rev.). I don't know why the statistical
> functions required such thing.
> ----------------------------------------------------------------------
> --- TF1.cxx 14 Jul 2003 12:58:22 -0000 1.67
> +++ TF1.cxx 20 Aug 2003 07:00:47 -0000 1.68
> @@ -1,4 +1,4 @@
> -// @(#)root/hist:$Name: $:$Id: TF1.cxx,v 1.67 2003/07/14 12:58:22 brun
> Exp $
> +// @(#)root/hist:$Name: $:$Id: TF1.cxx,v 1.68 2003/08/20 07:00:47 brun
> Exp $
> // Author: Rene Brun 18/08/95
>
> /*************************************************************************
> @@ -1563,18 +1563,18 @@
> for (i=0;i<4;i++) {
> u = c2*x[i];
> xx[0] = c1+u;
> - f1 = EvalPar(xx,params);
> + f1 = TMath::Abs(EvalPar(xx,params));
> xx[0] = c1-u;
> - f2 = EvalPar(xx,params);
> + f2 = TMath::Abs(EvalPar(xx,params));
> s8 += w[i]*(f1 + f2);
> }
> s16 = 0;
> for (i=4;i<12;i++) {
> u = c2*x[i];
> xx[0] = c1+u;
> - f1 = EvalPar(xx,params);
> + f1 = TMath::Abs(EvalPar(xx,params));
> xx[0] = c1-u;
> - f2 = EvalPar(xx,params);
> + f2 = TMath::Abs(EvalPar(xx,params));
> s16 += w[i]*(f1 + f2);
> }
> s16 = c2*s16;
> @@ -1749,14 +1749,14 @@
> sum3 = 0;
> for (j=0;j<n;j++) {
> z[j] = ctr[j] - xl2*wth[j];
> - f2 = EvalPar(z,fParams);
> + f2 = TMath::Abs(EvalPar(z,fParams));
> z[j] = ctr[j] + xl2*wth[j];
> - f2 += EvalPar(z,fParams);
> + f2 += TMath::Abs(EvalPar(z,fParams));
> wthl[j] = xl4*wth[j];
> z[j] = ctr[j] - wthl[j];
> - f3 = EvalPar(z,fParams);
> + f3 = TMath::Abs(EvalPar(z,fParams));
> z[j] = ctr[j] + wthl[j];
> - f3 += EvalPar(z,fParams);
> + f3 += TMath::Abs(EvalPar(z,fParams));
> sum2 += f2;
> sum3 += f3;
> dif = TMath::Abs(7*f2-f3-12*sum1);
> @@ -1777,7 +1777,7 @@
> for (m=0;m<2;m++) {
> wthl[k] = -wthl[k];
> z[k] = ctr[k] + wthl[k];
> - sum4 += EvalPar(z,fParams);
> + sum4 += TMath::Abs(EvalPar(z,fParams));
> }
> }
> z[k] = ctr[k];
> @@ -1791,7 +1791,7 @@
> z[j] = ctr[j] + wthl[j];
> }
> L90:
> - sum5 += EvalPar(z,fParams);
> + sum5 += TMath::Abs(EvalPar(z,fParams));
> for (j=0;j<n;j++) {
> wthl[j] = -wthl[j];
> z[j] = ctr[j] + wthl[j];
> --------------------------------------------------------------
>
> As you can see function value everywhere is replaced by its absolute value.
>
> Best regards,
> Stanislav.
>
> Vincent Roberfroid wrote:
>
> >Yes it's correct !
> >This problem is present with root 3.10/00.
> >It doesn't exist with root 3.05.
> >
> >Vincent
> >
> >On Wednesday 10 December 2003 19:42, Martijn Schellekens wrote:
> >
> >
> >>Dear Rooters,
> >>
> >>I have this strange integral result:
> >> > TH1 func("func","-x",-50,50)
> >> >func.Integral(-1,1)
> >>
> >>result:
> >> 1
> >>Can someone explains this result to me???
> >>(seems to compute the integral of the absolute value: negatif values are
> >>not of this world after all???)
> >>
> >>Thanks a lot,
> >>Martijn Schellekens
> >>
> >>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:17 MET