Compiling Random Numbers from a distribution
- To: mathgroup at smc.vnet.net
- Subject: [mg84483] Compiling Random Numbers from a distribution
- From: Asim <maa48 at columbia.edu>
- Date: Fri, 28 Dec 2007 04:11:29 -0500 (EST)
Hi
I am wondering why the following function works in Mathematica 6.01,
(notice, x is not a local variable in the function below)
v = Compile[{{mu, _Real}, {s, _Real}},
Module[
{m},
x = RandomReal[NormalDistribution[0.0, 1.0]];
m = 2 + x;
Clear[x];
m
]
]
In[19]:= v[0.0, 1.0]
Out[19]= 2.59192
but the compilation in the following function which makes the variable
x local to the function does not work
v1 = Compile[{{mu, _Real}, {s, _Real}},
Module[
{m, x},
x = RandomReal[NormalDistribution[0.0, 1.0]];
m = 2 + x;
m
]
]
as can be seen from the output from Mathematica 6.01 on windows
In[20]:= v1[0.0, 1.0]
During evaluation of In[20]:= CompiledFunction::cfse: Compiled \
expression NormalDistribution[0.,1.] should be a machine-size real \
number. >>
During evaluation of In[20]:= CompiledFunction::cfex: Could not \
complete external evaluation at instruction 3; proceeding with \
uncompiled evaluation. >>
Out[20]= 2.78038
I would appreciate it very much if someone can explain why this
happens. I would much prefer if the second function (v1) were able to
compile. I need to use random numbers from the normal distribution to
work in much more complicated functions, and I am not sure whether the
approach in the first function (v) is really fine.
Thanks
Asim Ansari