Re: newbie problem with NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg49806] Re: newbie problem with NIntegrate
- From: "David W. Cantrell" <DWCantrell at sigmaxi.org>
- Date: Sun, 1 Aug 2004 18:48:38 -0400 (EDT)
- References: <cei8o5$2he$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"Xiaoxun" <dbjunxiao at hotmail.com> wrote: > Hi, all, > > Please advices: > > Geom = (200 >=x>= 100 && 50 >= y >= -50 && -20 <= z <= 20); > gr[x_, y_, z_] := 2 /; Geom; > gr[x_, y_, z_] := 0 /; ! (Geom); > N[Integrate[gr[x, y, z], {x, 0, 300}, {y, -100, 100}, {z, -30, 30}] > This gives a result of 799995. > However, if changing the x range to {x,0,600} results 799993. > and {x,0,900} results 0; > > So what could we do to ensure the right answer? First, let me note that in problems like this, it's often good to write the function using UnitStep. For example, in your problem, it can be written as gr[x_, y_, z_] := 2(UnitStep[x - 100] - UnitStep[x - 200])(UnitStep[y + 50] - UnitStep[y - 50])(UnitStep[z + 20] - UnitStep[z - 20]) However, doing that in your problem does not happen to be necessary. Just get rid of the N[...]. (Did you notice the warning messages you were getting?) In other words, the following works fine (regardless of whether the upper limit of integration for x is 300, as shown, or 600 or 900): In[1]:= Geom = (200 >= x >= 100 && 50 >= y >= -50 && -20 <= z <= 20); gr[x_, y_, z_] := 2 /; Geom; gr[x_, y_, z_] := 0 /; ! (Geom); Integrate[gr[x, y, z], {x, 0, 300}, {y, -100, 100}, {z, -30, 30}] Out[1]= 800000 David Cantrell
- Follow-Ups:
- Re: Re: newbie problem with NIntegrate
- From: Garry Helzer <gah@math.umd.edu>
- Re: Re: newbie problem with NIntegrate