MathGroup Archive 2004

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

Search the Archive

Re: Re: Mathematica slows down

  • To: mathgroup at smc.vnet.net
  • Subject: [mg53008] Re: [mg52987] Re: Mathematica slows down
  • From: DrBob <drbob at bigfoot.com>
  • Date: Sun, 19 Dec 2004 06:15:11 -0500 (EST)
  • References: <200412180900.EAA02311@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

Brilliant!! I didn't recognize the repeated differences. Next time, maybe.

The eye-opener is that Prime is incredibly fast; I went into this thinking that was the time-waster, and it isn't. Not even close.

Bobby

On Sat, 18 Dec 2004 04:00:39 -0500 (EST), Bill Rowe <readnewsciv at earthlink.net> wrote:

> On 12/17/04 at 5:20 AM, george at netvision.net.il (George Szpiro)
> wrote:
>
>
>> the following program runs ok for the first 6,000 iterations, then
>> slows down considerably, and then seems to speed up again after
>> 10,000. Does anyone know what is going on?
>
>
>> NumP=15000;
>
>> For[k=1,k<NumP,k++,
>
>> Gap[1]=Prime[k+1]-Prime[k]; Gap[2]=Prime[k+2]-2Prime[k+1]+Prime[k];
>> Gap[3]=Prime[k+3]-3Prime[k+2]+3Prime[k+1]-Prime[k];
>> Gap[4]=Prime[k+4]-4Prime[k+3]+6Prime[k+2]-4Prime[k+1]+Prime[k];
>
>> If[Mod[k,1000]==0, Print[ k]]
>
>> ]
>
> I don't know why you are seeing the slow down you report, but I do know this computation can be speeded up enormously
>
> First, changing your code slightly so as to retain each of the computed gaps and reducing NumP to make the overall execution time of your code smaller
>
> NumP = 5000;
> gaps = {};
> Timing[
>   For[k = 1, k < NumP, k++,
>    gaps =
>      Append[
>        gaps,
>        {Prime[k+1]-Prime[k],
>         Prime[k+2]-2*Prime[k+1]+Prime[k],
>         Prime[k+3]-3*Prime[k+2]+3*Prime[k+1]-Prime[k],
>         Prime[k+4]-4*Prime[k+3]+6*Prime[k+2]-4*Prime[k+1]+Prime[k]}]]; ]
>
> {1.2999999999999972*Second, Null}
>
> Now for a different way to do the same computation
>
> Timing[newGaps =
>    Take[#1, NumP-1]&/@Rest[
>      NestList[
>        ListConvolve[{1, -1},#1]&,Prime/@Range[NumP+3],4]]; ]
>
> {0.020000000000003126*Second, Null}
>
> And finally,
>
> Transpose[newGaps] == gaps
>
> True
>
> Showing both methods do the same thing.
>
> The improved computation speed results from not computing Prime[k] more than needed and replacing the For loop with Mathematica's functional programming constructs.
> --
> To reply via email subtract one hundred and four
>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: An argument pattern problem: ranges and lists
  • Next by Date: Re: Mathematica language issues
  • Previous by thread: Re: Mathematica slows down
  • Next by thread: Re: Re: Re: Mathematica slows down