Re: HoldAll for Integrate
- To: mathgroup at smc.vnet.net
- Subject: [mg97978] Re: HoldAll for Integrate
- From: dh <dh at metrohm.com>
- Date: Fri, 27 Mar 2009 05:33:40 -0500 (EST)
- References: <gqfknb$kht$1@smc.vnet.net>
Hi Tammo,
what Integrate really does can only somebody from Wolfram explain. But
it completely eludes me why the integration variable in "Integrate" is
not localized. Maybe some can give a reason for this.
For the rest of us, we may define a new Integrate that does localize and
see if it creates troubles.
Here is a possibility, where we use Hold and Replace to protect the
variable by giving it another name:
SetAttributes[myInt, HoldAll];
myInt[integ_, {var_, low_, high_}] := Module[{integ0, var0},
Integrate @@ (Hold[integ, {var, low, high}] /.
HoldPattern[var] -> var0)
];
Here is another one using "With" to protect the integration variable:
SetAttributes[myInt, HoldAll];
myInt[integ_, {var_, low_, high_}] := With[{var = Unevaluated@var},
Integrate[integ, {var, low, high}]];
Daniel
Tammo Jan Dijkema wrote:
> The following commands yield unexpected output:
>
> x=10;
> Integrate[x^2, {x,0,1}]
>
> That is because Integrate does not have attributes HoldAll, so that the
> second command will be interpreted as Integrate[100, {10,0,1}] which is
> not a command that Integrate can work with (so a warning message is
> returned).
>
> However, I can add the attribute HoldAll to Integrate myself:
>
> SetAttributes[Integrate, HoldAll];
>
> I'm not very sure what to expect when now trying the same experiment
> (the correct answer 1/3 would be nice), but the actual output surprised
> me:
>
> x=10;
> Integrate[x^2, {x,0,1}]
>
> Yields as output: 0 (without any warnings). Could anyone explain why I
> should have expected this result?
>
> On a side note, I found a similar in the Tech Support column of the
> Mathematica Journal Volume 6, Issue 2, by Carl Roy. He tried the
> integral without limits:
>
> x=10;
> SetAttributes[Integrate, HoldAll];
> Integrate[x^2, x]
>
> In the journal, the output 1000/3 is mentioned, whereas in Mathematica
> 7.0.1 this outputs 1000.
>
> Again, does anyone understand this?
>
> Regards,
>
> Tammo Jan Dijkema
>
>