MathGroup Archive 2011

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

Search the Archive

Evaluation control in Compile[]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg119309] Evaluation control in Compile[]
  • From: Ben <benp84 at gmail.com>
  • Date: Mon, 30 May 2011 06:34:03 -0400 (EDT)

I'd like to compile a function that estimates (assuming a spherical
earth) the length of a degree of longitude at any particular
latitude.  Here's how I write it up and test its speed:

In[1]:=  radiusOfEarth=6378100.;
latitudeDegreeLength=2*Pi*radiusOfEarth/360
Out[2]= 111319.
In[3]:= X=Table[RandomReal[{0,90}],{100000}];
In[4]:=
GetLongitudeDegreeLength=Compile[{latitude},latitudeDegreeLength*Cos[latitude
Degree]]
Out[4]= CompiledFunction[{latitude},latitudeDegreeLength Cos[latitude
=B0],-CompiledCode-]
In[5]:= Timing[Map[GetLongitudeDegreeLength,X];]
Out[5]:= {0.312,Null}

Since the values of "latitudeDegreeLength" and "Degree" are constant,
I'd prefer to use numerical approximations in the definition so the
compiled code doesn't have to request the values of these global
variables at runtime.  Like this:

In[6]:= GetLongitudeDegreeLength=Compile[{latitude},
111318.*Cos[0.0174532925 latitude]]
Out[6]:= CompiledFunction[{latitude},111318. Cos[0.0174533 latitude],-
CompiledCode-]
In[7]:= Timing[Map[GetLongitudeDegreeLength,X];]
Out[7]:= {0.031,Null}

Is there any way to tell Mathematica that I'd like these symbols to be
evaluated before the compilation so that I don't have to copy and
paste the numerical values into the definition?

Thanks.


  • Prev by Date: Re: Simple question: is it possible to take a derivative and solve for x ?
  • Next by Date: Re: Pure functions and Select[] sequential elements of list
  • Previous by thread: Re: A question about a sphere
  • Next by thread: Re: Evaluation control in Compile[]