Re: random walk visualization
- To: mathgroup at smc.vnet.net
- Subject: [mg105259] Re: random walk visualization
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Wed, 25 Nov 2009 06:21:32 -0500 (EST)
- References: <heimn8$5mc$1@smc.vnet.net>
Alexei Boulbitch schrieb:
> Dear Community,
>
> I am making a demonstration for a lecture on random walk. This should
> show the random walk evolving in 2D. The following works nicely:
>
> x := 0;
> y := 0;
> tab = Table[{x += RandomInteger[{-1, 1}],
> y += RandomInteger[{-1, 1}]}, {1000}];
> imTab = Table[
> Show[{Graphics[{Blue, Line[tab[[1 ;; i]]]}],
> Graphics[{Red, Thick, Arrowheads[0.03],
> Arrow[{tab[[1]], tab[[i]]}]}]},
> PlotRange -> {{-40, 40}, {-40, 40}}], {i, 2, 1000}
> ];
> ListAnimate[imTab]
>
> It however, takes a lot of memory, and few minutes to generate the
> graphics list. That is too long.
>
> If I could directly Animate the graphics instead of generating initially
> a graphics list, it would be much faster. This intends to do such a
> direct animation:
>
> x := 0;
> y := 0;
> tab = Table[{x += RandomInteger[{-1, 1}],
> y += RandomInteger[{-1, 1}]}, {1000}];
> Animate[Show[{Graphics[{Blue, Line[tab[[1 ;; i]]]}],
> Graphics[{Red, Thick, Arrowheads[0.03],
> Arrow[{tab[[1]], tab[[i]]}]}]},
> PlotRange -> {{-40, 40}, {-40, 40}}], {i, 2, 1000}
> ]
>
> But it does not work. I cannot understand the reason. Any idea?
the reason is that Animate has no clue that it should only use integer
values for i, so tab[[1;;i]] will give errors. You should use
tab[[1;;Round[i]]] or, even better, the iterator {i,2,1000,1} instead,
which will increase i in steps of 1.
there are some other things you might want to change, the following
should do what you want:
n = 1000;
points = NestList[# + RandomInteger[{-1, 1}, 2] &, {0, 0}, n];
Animate[Graphics[{
Blue, Dynamic[Line[points[[1 ;; i]]]],
Red, Thick, Arrowheads[0.03], Arrow[points[[{1, i}]]]
},
PlotRange -> Max[Norm /@ points]],
{i, 2, n, 1},
AnimationRepetitions -> 1
]
hth,
albert