Re: Bug in NIntegrate[]?

*To*: mathgroup at smc.vnet.net*Subject*: [mg126892] Re: Bug in NIntegrate[]?*From*: Andrew Moylan <amoylan at wolfram.com>*Date*: Fri, 15 Jun 2012 15:29:30 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com

This part of your definition, f[x_] := 1 applies to *symbolic* values of x such as in f[x]. Therefore the evaluation precedes effectively along these lines: NIntegrate[f[x], {x, -1, 2}] => NIntegrate[1, {x, -1, 2}] => 3. To fix it: One option is to restrict the class of cases where f[x] == 1 to only numbers: Clear[f] f[x_] := 0 /; x < 0 || x > 1 f[x_] := 1 /; Element[x, Reals] This is not ideal (you will see NIntegrate works hard to locate the discontinuities at x==0 and x==1). Better is to use Mathematica's piecewise functions: Piecewise, If, etc. In[5]:= g[x_] := If[x < 0 || x > 1, 0, 1] In[6]:= NIntegrate[g[x], {x, -1, 2}] Out[6]= 1. This is because NIntegrate recognizes such functions as likely sources of discontinuities and uses symbolic processing to split them up / simplify them first. ----- Original Message ----- > From: "GS" <vokaputs at gmail.com> > To: mathgroup at smc.vnet.net > Sent: Friday, June 15, 2012 12:41:03 AM > Subject: Bug in NIntegrate[]? > > I define the function f[x] as follows: > > f[x_] := 0 /; x < 0 || x > 1; > f[x_] := 1 > > It is zero outside of the interval [0,1]. This can be verified by > plotting > Plot[f[x], {x, -1, 2}] > > Now I integrate it from -1 to 2: > In[270]:= NIntegrate[f[x], {x, -1, 2}] > Out[270]= 3. > > The result should be 1, but it is 3. Clearly Mathematica ignores the > fact that f[x] is zero outside of [0,1]. > > This caused a lot of headache for me recently when I encountered such > behavior in one of my research code. > GS > >