Re:programming competition Correction
- To: mathgroup at smc.vnet.net
- Subject: [mg5031] Re:[mg4904] programming competition Correction
- From: espen.haslund at fys.uio.no (Espen Haslund)
- Date: Sat, 19 Oct 1996 16:40:34 -0400
- Organization: Universitet i Oslo
- Sender: owner-wri-mathgroup at wolfram.com
In article <53a6b6$oa6 at dragonfly.wolfram.com>, hay at haystack.demon.co.uk says...
>
>Please change line 6 in the code that I gave from
> If[n<2, {#1},
>to If[n<1, {#1},
>
>giving
>
>linearInterpolate2[ li_List, m_ ] :=
> Block[{},
> Append[
> Join@@Partition[ li, 2,1,
> ( n=Floor[Sqrt[(#2-#1).(#2-#1)//N]/m];
> If[n<1,
> {#1},
> Table[#1 + k #2, {k,0,n}]&[#1,(#2-#1)/(n+1)],
>
> ]
> )&
> ],
> Last[li]
> ]
> ];
>
>(the error crept in because of changing from Ceiling to Floor)
>
>I time it (and check it!) against the fastest code in Xah Lee's
>posting "[mg4900] Re: programming competition", due to
>espen.haslund at fys.uio.no (Espen Haslund):
>
....
>Allan Hayes
>hay at haystack.demon.co.uk
>URL:haystack.demon.co.uk
>
>
>
Hi Allan;
I have made some improvements on my function, and it now runs
as fast as yours on the random data, and a bit faster
in some other cases.
Note: I think you should have a "n" in your Block (i.e. Block[{n}, )
also note that changing from Ceiling to Floor make a small
difference in special cases (i.e. when the distance
between points is exactly equal to maxLength)
linearInterpolateEH3[ li_List, maxLength_ ]:=
Module[{p1, d, n},
Append[Join @@ Table[
d = N[li[[i+1]] - (p1 = li[[i]])];
n = Ceiling[Sqrt[#.#]&[d]/maxLength];
If[n > 1,
Table[p1 + d*j,{j,0,1-.5/n,1./n}]
,
{p1}
],
{i,Length[li]-1}], Last[li] ]
]
li = Table[{Random[], Random[]},{1000}];
tim1 = Map[First, {
Timing[linearInterpolateEH3[li, .1] ],
Timing[linearInterpolate2[li, .1] ]}];
li = Table[{i,i},{i,100}];
tim2 = Map[First, {
Timing[linearInterpolateEH3[li, 0.02] ],
Timing[linearInterpolate2[li, 0.02] ]}];
li = Table[{i,i},{i,3000}];
tim3 = Map[First, {
Timing[linearInterpolateEH3[li, 2] ],
Timing[linearInterpolate2[li, 2] ]}];
res = {{"linearInterpolateEH3", "linearInterpolate2"},
tim1, tim2, tim3} //TableForm
(*
Out[2]//TableForm= linearInterpolateEH3 linearInterpolate2
15.16 Second 15.77 Second
12.3 Second 18.18 Second
12.58 Second 14.06 Second
*)
-Espen