Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: newbie problem with NIntegrate

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49841] Re: newbie problem with NIntegrate
  • From: "David W. Cantrell" <DWCantrell at sigmaxi.org>
  • Date: Tue, 3 Aug 2004 01:11:13 -0400 (EDT)
  • References: <cei8o5$2he$1@smc.vnet.net> <cejs90$cpk$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Aug. 2, 2004, Garry Helzer wrote:
> On Aug 1, 2004, David W. Cantrell wrote:
> > "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

> What version are you using? The last expression is returned unevaluated
> on my system ( version 5.0.1, Mac OS 10.3.4).

The fact that I'm using version 5.0.0 is immaterial. I made a mistake.
Sorry! Doing what it _looks_ like I did, the expression is returned
unevaluated on my system too.

I had actually done the work in the midst of a long session. [The
In and Out numbers were really in the thousands.] I had first defined gr
in terms of UnitStep, as noted above, and had seen that the symbolic
integral worked as desired in several cases. (So far, so good.) I then
decided to see if the OP's definition of gr could be used successfully
instead. In doing so, I uncritically copied the OP's code, and then
deleted the N[]. It seemed to work as desired. What I unfortunately failed
to notice was that the OP's code did not in fact change the definition of
gr! It was still defined in terms of UnitStep. I apologize for my
oversight.

Anyway, at least using UnitStep gives an alternative to loading the
Calculus`Integration` package and using Boole.

David Cantrell


  • Prev by Date: Re: ListDensityPlot, ColorFunction, and associated confusions
  • Next by Date: Re: Re: newbie problem with NIntegrate
  • Previous by thread: Re: Re: newbie problem with NIntegrate
  • Next by thread: The Histogram[] command