MathGroup Archive 2013

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

Search the Archive

Re: updating a simulation within Manipulate.

  • To: mathgroup at smc.vnet.net
  • Subject: [mg130087] Re: updating a simulation within Manipulate.
  • From: Waclaw Kusnierczyk <waku at idi.ntnu.no>
  • Date: Fri, 8 Mar 2013 16:45:48 -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
  • References: <20130308035142.51AD66799@smc.vnet.net>

Hi Craig,

Looks like you want to dynamically show the progress of a random walk.  
Rather than directly modify your solution, I'd suggest to have a look at 
an alternative using scheduled tasks and buttons.

An example of random walk code:

step[bias_] :=
  Through[{Cos, Sin}[RandomVariate[NormalDistribution[bias, 1]]]]
next[state_, bias_] :=
  state + step[bias]
extend[path_, bias_] :=
  Append[path, next[Last@path, bias]]

An example of random walk plot code:

show[path_] :=
  Show[
   ListLinePlot[path,
    PlotMarkers -> {Graphics[Circle[{0, 0}, 1]], 0.015},
    Axes -> None,
    AspectRatio -> 1,
    PlotRange -> {{-10, 10}, {-10, 10}}],
   Graphics[{Red, Point[Last@path]}]]

An example of dynamic random walk plot:

Module[{path = {{0, 0}}, walk, bias = 0},
  Manipulate[
   show[path],
   Column@{
     Row@{
       Button["start", Quiet@RemoveScheduledTask@walk;
        walk = RunScheduledTask[path = extend[path, bias], 0.5]],
       Button["stop", StopScheduledTask[walk]],
       Button["reset", path = {{0, 0}}]},
     AngularGauge[Dynamic@bias, {-\[Pi], \[Pi]},
      ScaleOrigin -> {-\[Pi], \[Pi]}]}]]

Best,
vQ


On 03/08/2013 04:51 AM, W Craig Carter wrote:
>
> I *think* I've asked this question before, but I can't find it on mathgroup. In any case, I don't know the answer now.
>
> Here is a simple example of a Manipulate that updates a graphic as long as a boolean is true.  This method seems like a kludge to me---is it? If so, what would be a better way to do this.
>
> This is a constructed example, the real case I am looking at is much more involved; but kudos to anyone who can make a reasonable facsimile of their signature by adjusting the random walker's bias....
>
> randomStep[bias_, stepList_] :=
>   Module[{angle = RandomVariate[NormalDistribution[bias, 1]]},
>    Join[stepList, {Last[stepList] + {Cos[angle], Sin[angle]}}]]
>
> walkerGraphic[stepList_, range_] :=
>   Graphics[GraphicsComplex[stepList, Disk /@ Range[Length[stepList]]],
>    PlotRange -> range {{-1, 1}, {-1, 1}}]
>
> DynamicModule[
>   {walkerPath = {{0, 0}}},
>   Manipulate[
>    If[keepWalking,  (*  kludge warning---testing for If[True...] seems inefficient   *)
>     walkerPath = randomStep[bias, walkerPath]
>     ];
>    If[reset,
>     reset = False; keepWalking = False;
>     walkerPath = {{0, 0}}
>     ];
>    walkerGraphic[walkerPath, range],
>    {{keepWalking, False}, {True, False}},
>    {{reset, False}, {True, False}},
>    Delimiter,
>    {{range, 20}, 0, 100},
>    {{a, 0}, -Pi, Pi,
>     AngularGauge[##, ImageSize -> 160 ,
>       ScaleOrigin -> {{-4 Pi, 4 Pi}, 1}] &}
>    ]
>   ]
>
>
>
> W Craig Carter
> Professor of Materials Science, MIT




  • Prev by Date: Re: updating a simulation within Manipulate.
  • Next by Date: Re: Fixed Typo in Code---> Re: updating a simulation
  • Previous by thread: updating a simulation within Manipulate.
  • Next by thread: Re: updating a simulation within Manipulate.