There has just got to be an easier way to do the following. The
example is somewhat silly, but if I could understand how to do this
competently, I would learn a lot.
Suppose I want to compute the sum of an integer (z) and a value
chosen from some uniform distribution on the interval 0 to a. I want
to do this interactively and I do NOT want the draw from the random
distribution to change when I change z, just when I change the
parameter a. So, we create the number z as follows:
z=6;SetterBar[Dynamic[z],{6,7,8}]
If I do the following, it does not work as expected because, I
suppose, Dynamic[z] is a FrontEnd object in its heart of hearts (a
DynamicBox) and thus does not add to 2 the way an integer would.
Dynamic[z]+2
So, this can be fixed with Dynamic[z+2]
OK, now instead of adding 2, let's add some random value
a=0.5;Slider[Dynamic[a]];
Dynamic[z+RandomReal[{0,Setting@Dynamic[a]}]] (* setting is added
because if one just uses Dynamic[a] one is referencing a front end
object rather than an actual number*)
This evaluates, but it does not have the desired behavior. Now, when I
change z I also get a new draw from the random distribution. I thought
of trying to blocking the redraw by wrapping Dynamic around the
RandomReal, like this.
Dynamic[z+Dynamic@RandomReal[{0,Setting@Dynamic[a]}]]
But that doesn't work at all. It still redraws when I change z and the
addition no longer works in the desired way since the Dynamic
expression is not "really" a number but just a box.
I can solve the latter problem by wrapping a Setting in front of the
Dynamic
Dynamic[z + Setting@Dynamic[RandomReal[{0, Setting@Dynamic[a]}]]]
Now it adds properly but it still refreshes the random draw every time
I change z.
This doesn't work either and the expression is getting awfully
complicated
Dynamic[z +
Refresh[Setting@Dynamic[RandomReal[{0, Setting@Dynamic[a]}]],
TrackedSymbols -> {a}]]
And this doesn't work either
Dynamic[Setting@Dynamic[z] +
Setting@Dynamic[RandomReal[{0, Setting@Dynamic[a]}]]]
Can someone help!