Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

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

Search the Archive

Re: Compiling numerical iterations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg129904] Re: Compiling numerical iterations
  • From: Dana DeLouis <dana01 at icloud.com>
  • Date: Mon, 25 Feb 2013 02:19:17 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

Hello.  My ideas are very similar to Ray's ideas.
It seems you are doing a random walk 1,000 times, and adding the positions repeatedly.
I may be wrong, but I interpret a little differently.  Here's what I'm thinking, Your steps are +- 1, but your adding +-.1 each time.  (ie  /10)

tab=Table[0,{1000}];
Do[tab = tab + NestList[#+RandomChoice[{+1,-1}]&,0,1000-1]/10,{1000}];

// Or perhaps without the division

tab=Table[0,{1000}];
Do[tab = tab + NestList[#+RandomChoice[{+.1,-.1}]&,0,1000-1],{1000}];

I like the FoldList idea also.  Perhaps a different approach:

FoldList[Plus,0,RandomInteger[{-1,1},1000-1]] / 10



If I run Ray's excellent code, here are the first 5 items of his corr array using the same Seed Number.

num=1000;
SeedRandom[1234567890]
AbsoluteTiming@Length[
=
tab=FoldList[Plus,0,Total@Sign@Table[Most@RandomReal[{-1,1},num],{1000}]]
]
=
AbsoluteTiming@Length[corr=Table[Take[tab,{k,num*9/10-1+k}],{k,num/10}]. Drop[tab,-num/10]/(num*10*9)]


ray = corr[[1;;5]]
{3019993/1875,  36211327/22500,  7236173/4500,  4018739/2500,  36160711/22500}

I believe the constant is

n=1000/10*9
900

Constant = 1/n,   or 1/900

Ray uses a constant of 1/ 90000.

I may be wrong, but I "think" it should be 1/900.

Here's my idea once the tab array is calculated.  I'll use Ray solution for comparison.
You can skip the initialization of the corr array of all zero's at this point.

CorrMe=Partition[tab,1000/10*9,1]//Most;
CorrMe=Map[Dot[CorrMe[[1]],#]&,CorrMe] / 90000;

me =CorrMe[[1;;5]]
{3019993/1875, 36211327/22500, 7236173/4500, 4018739/2500, 36160711/22500}

me == ray
True

= = = = = = = = = =
HTH  :>)
Dana DeLouis
Mac & Mathematica 9
= = = = = = = = = =





> tab = Table[0, {i, 1, num}];
>
> For[l = 1, l <= 1000, l++,
>  a = 0;
>  For[i = 1, i <= num, i++,
>   tab[[i]] = tab[[i]] + a/10;
>
>   If[RandomReal[{-1, 1}] < 0, a = a + 1, a = a - 1];
>
>   ]
>
>  ]
>


On Saturday, February 23, 2013 7:01:22 AM UTC-5, firlefranz wrote:
> Hi,
>
>
>
> to speed up some calculations I'd like to use this relatively new method of compiling equations or export them to C. But since I'm very new in these things, I have really problems to use this c-compiling function.
>
> Can someone show me on this simple part of code (calculation of a correlation function of a 1D random walk), how it should be implemented?
>
>
>
> num = 1000;
>
> tab = Table[0, {i, 1, num}];
>
> corr = Table[0, {i, 1, num/10}];
>
> For[l = 1, l <= 1000, l++,
>
>  a = 0;
>
>  For[i = 1, i <= num, i++,
>
>   tab[[i]] = tab[[i]] + a/10;
>
>   If[RandomReal[{-1, 1}] < 0, a = a + 1, a = a - 1];
>
>   ]
>
>  ]
>
> For[k = 1, k <= num/10, k++,
>
>  For[n = 1, n <= num/10*9, n++,
>
>    corr[[k]] = corr[[k]] + tab[[n]]*tab[[n + k - 1]]/num*10/9];
>
>  ]
>
> ListPlot[{corr}, Joined -> False]
>
>
>
> Best regards
>
> Cornelius







  • Prev by Date: Re: Hold & Evaluate
  • Next by Date: i^2=1
  • Previous by thread: Re: Compiling numerical iterations
  • Next by thread: Re: Compiling numerical iterations