       Re: SetDelayed and Evaluate

• To: mathgroup at smc.vnet.net
• Subject: [mg104504] Re: [mg104477] SetDelayed and Evaluate
• From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
• Date: Sun, 1 Nov 2009 17:58:20 -0500 (EST)
• References: <200911010902.EAA20123@smc.vnet.net>

```Hi,

just check the DownValues and you'll see where you are wrong:

f[z_?NumericQ] :=
Compile[{{x, _Real}}, Gamma[Sin[x] + 3] + (x - 5)^2][z];
g[z_?NumericQ] :=
Evaluate[Compile[{{x, _Real}}, Gamma[Sin[x] + 3] + (x - 5)^2]][z];
hh = Compile[{{x, _Real}}, Gamma[Sin[x] + 3] + (x - 5)^2];
h[z_?NumericQ] := hh[z];
DownValues /@ {f, g, h}

and with

Timing[Do[#[x/10.0^4], {x, 10^5}]] & /@ {f, g, h}

you can see more directly how long an evaluation needs since it is not
clear the NMaximize always uses the same (starting values| method) and
therefore calls the function equally often:

{{6.80443, Null}, {6.64842, Null}, {0.504032, Null}}

Cheers
Patrick

On Sun, 2009-11-01 at 04:02 -0500, Peter wrote:
> Hi group,
>
> after years of experience with Mathematica I've got a simple (?)
> problem:
>
> When answering to a question on the student support forum (http://
> forums.wolfram.com/student-support/topics/21448/) I tried fo myself
> the folowing variants:
> f[z_?NumericQ]:=Compile[{{x,_Real}},x-x^2][z];
> g[z_?NumericQ]:=Evaluate[Compile[{{x,_Real}},x-x^2]][z];
> and got the following results:
> In:= Timing[Do[NMaximize[f[x],x],{1000}]]
> Out= {35.871,Null}
> In:= Timing[Do[NMaximize[g[x],x],{1000}]]
> Out= {35.962,Null}
>
> ~1 ms per NMaximize is OK, because there are background-processes
> running.
>
> But I expect f to compile x-x^2 at every call to f and g to compile
> once on time of definition. Therefore I expected g to be significantly
> faster than f.
>
> Where am I wrong?
>
> TIA,
> Peter Pein
>

```

• Prev by Date: Re: SetDelayed and Evaluate
• Next by Date: Re: SetDelayed and Evaluate
• Previous by thread: SetDelayed and Evaluate
• Next by thread: Re: SetDelayed and Evaluate