[Date Index]
[Thread Index]
[Author Index]
Help with Speeding up a For loop
*To*: mathgroup at smc.vnet.net
*Subject*: [mg98881] Help with Speeding up a For loop
*From*: Adam Dally <adally at wisc.edu>
*Date*: Mon, 20 Apr 2009 19:13:25 -0400 (EDT)
I am using an Intel MacBook with OS X 10.5.6.
I am trying to create 2 lists: "Ideal" and "Resolution". This is basically
a "Monte Carlo Integration" technique. Ideal should simulate the curve.
Resolution should simulate the curve convoluted with a normal distribution.
I want to do this for n=10 000 000 or more, but it takes far too long right
now. I can do n=100 000 in about 1 minute, but 1 000 000 takes more than an
hour. I haven't waited long enough for 10 000 000 to finish (it has been 5
days).
Thank you,
Adam Dally
Here is the code:
ClearAll[E0, Eb1, m, DeltaE, Sigma, k, n, y3, Ideal, Resolution, i,
normalizer, maxE, minE]
Eb1 = 0; k = 0; n = 10000; E0 = 2470; m = 0.2; DeltaE = 50; Sigma = 5; maxE
= E0 - m; minE = E0 - DeltaE; Resolution = {Eb1}; Ideal = {Eb1}; (*Setup
all constants, lists and ranges*)
Eb1 = RandomReal[{minE, maxE}, n]; (*create a list of 'n' random Eb1
values*)
k = -RandomReal[TriangularDistribution[{-2470, 0}, -0.1], n]; (*create a
list of 'n' random k values; triangle distribution gives more successful
results*)
For[i = 0, i < n, i++,
If[k[[i]] < Re[(E0 - Eb1[[i]])^2*Sqrt[1 - m^2/(E0 - Eb1[[i]])^2]], (*check
if the {k,Eb1} value is under the curve*)
AppendTo[Ideal, Eb1[[i]]]; (*Keep events under curve in 'Ideal'*)
y3 = Eb1[[i]]; (*cast element to a number*)
Eb1[[i]] = RandomReal[NormalDistribution[y3, Sigma], 1]; (*choose a
random number from a normal distribution about that point*)
AppendTo[Resolution, Eb1[[i]]]; ]] (*Keep that event in 'Resolution'*)
Prev by Date:
**Re: Plot Axis Unit Conversions**
Next by Date:
**Re: Plot Axis Unit Conversions**
Previous by thread:
**Re: Compositing, 3D graphics, and KDE 4.2**
Next by thread:
**Re: Help with Speeding up a For loop**
| |