Re: issues with integrating Boole
- To: mathgroup at smc.vnet.net
- Subject: [mg61894] Re: issues with integrating Boole
- From: Maxim <ab_def at prontomail.com>
- Date: Thu, 3 Nov 2005 05:31:43 -0500 (EST)
- References: <dka05c$6us$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On Wed, 2 Nov 2005 09:16:28 +0000 (UTC), Mark Fisher <mark at markfisher.net> wrote: > I suspect a bug. I'm using 5.2 for Microsoft Windows (June 20, 2005). > > In what follows, boole1 and boole2 describe the same region (which can > be confirmed with a contour plot): a triangle with a base of length 4, a > height of length 2, and thus an area of 4. Although Integrate returns 4 > for boole1, it returns 4/3 for boole2. NIntegrate (using the default > method) returns answers that agree with Integrate. Nevertheless, > NIntegrate with Method -> MonteCarlo returns the correct result (up to > the numerical error). On the other hand, with Method -> QuasiMonteCarlo, > NIntegrate evaluates boole1 but not boole2. > > boole1 = Boole[a+b<1 && b-a<1 && b>-1] > > boole2 = Boole[And@@Thread[Abs[x/.Solve[1 - a x - b x^2 == 0, x]]>1]] > > Integrate[{boole1, boole2}, {a,-2,2}, {b,-1,1}] > > NIntegrate[{boole1, boole2}, {a,-2,2}, {b,-1,1}] > > NIntegrate[{boole1, boole2}, {a,-2,2}, {b,-1,1}, Method -> MonteCarlo] > > NIntegrate[{boole1, boole2}, {a,-2,2}, {b,-1,1}, Method -> > QuasiMonteCarlo] > > FYI, there is a reason for using expressions such as boole2. In > time-series analysis, the stationarity of an autoregressive process > depends on the condition and all of the roots of a certain polynomial > lie outside the unit circle. For first- and second-order autoregressive > processes, it is easy to describe the region of stationarity in more > direct ways (such as boole1), but for higher-order processes it becomes > much harder. So I was just trying this out for a simple case. > > --Mark > The problem is that the argument of Abs may be complex. If we try to evaluate Reduce[boole2[[1]] && -2 < a < 2 && -1 < b < 1] then Mathematica won't be able to do that. But Reduce[boole2[[1]] && -2 < a < 2 && -1 < b < 1, Reals] will work, because here we're solving a different problem -- we have found only the subset where the inequalities hold and all the radicals are real-valued. And this is what Integrate, NIntegrate and InequalityPlot do, considering only this subset: In[2]:= Integrate[ Boole[Reduce[boole2[[1]] && -2 < a < 2 && -1 < b < 1, Reals]], {a, -Infinity, Infinity}, {b, -Infinity, Infinity}] Out[2]= 4/3 We can get the correct answer if we use ComplexExpand first and take care of the two-argument ArcTan: In[3]:= Integrate[ComplexExpand[boole2, TargetFunctions -> {Re, Im}] /. ArcTan[x_, 0] :> Pi*UnitStep[-x], {a, -2, 2}, {b, -1, 1}] Out[3]= 4 QuasiMonteCarlo doesn't work because of the singularity at b = 0. We need to specify the singular points in the iterator of NIntegrate: In[4]:= NIntegrate[boole2, {a, -2, 2}, {b, -1, 0, 1}, Method -> QuasiMonteCarlo] Out[4]= 4.0002448 Maxim Rytin m.r at inbox.ru