MathGroup Archive 2012

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

Search the Archive

The simple command x=0;Dynamic[x=x+1]

For a long time I thought that the result of the command x=0; 
Dynamic[x=x+1] was easy to explain: at each update the value of x 
changes, so it will be updated again, and so on, so we see a fastly 
increasing counter. Now I start realizing that it is not that trivial. 
At least there are some features that puzzle me and I hope someone can 
come up with an explanation.

The first line of the next commands creates something like a clock. The 
second line gives the command that I am trying to understand. It shows 
that the value of x increases with a speed of about 600 per second (on 
my computer, this is system dependent!), instead of the speed of about 
20 that I would expect, since updating takes place at about that rate. 
Why is it so fast? We are not reading an infinite loop (I think); when x 
has a value, execution of the command x=x+1 is not a problem.

n=0;Dynamic[n=n+1, TrackedSymbols->{}, UpdateInterval->1]
x=0; Dynamic[x=x+1]

Remove the above output and have a look at the following, where we have 
two identical constructions, with different variables. The speed now 
slows down to about 400 per second.

n=0;Dynamic[n=n+1, TrackedSymbols->{}, UpdateInterval->1]
x=0; Dynamic[x=x+1, SynchronousUpdating->True]
y=0; Dynamic[y=y+1, SynchronousUpdating->True]

Again remove the output. In the next commands we set one of the two 
dynamics to queued updating. The effect is remarkable. It slows down the 
synchronized dynamics to a speed of about 100 per second. Moreover, for 
some or other reason the synchronized dynamics seems to be exactly twice 
as fast as the queued one, with a speed of 50 per second.

n=0; Dynamic[n=n+1, TrackedSymbols->{}, UpdateInterval->1]
x=0; Dynamic[x=x+1, SynchronousUpdating->True]
y=0; Dynamic[y=y+1, SynchronousUpdating->False]

Finally, when both are queued, the speed of both decreases to about 30 
per second:

n=0; Dynamic[n=n+1, TrackedSymbols->{}, UpdateInterval->1]
x=0; Dynamic[x=x+1, SynchronousUpdating->False]
y=0; Dynamic[y=y+1, SynchronousUpdating->False]

But in all cases, the speed is higher than the refresh rate. Very likely 
I overlook something simple, but at the moment I have only a very vague 
idea what could be going on here.

All comment on this behaviour is highly appreciated.

Many thanks in advance and kind regards,

Fred Simons
Eindhoven University of Technology

  • Prev by Date: Re: Mathematica question
  • Next by Date: need to find polyhedrons with less than a 24 vertex array in PolyhedronData[]
  • Previous by thread: Re: recursion won't work for some reason
  • Next by thread: Re: The simple command x=0;Dynamic[x=x+1]