MathGroup Archive 2010

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

Search the Archive

Automatic update of variables

  • To: mathgroup at
  • Subject: [mg110340] Automatic update of variables
  • From: Antonio De Juárez <adejuarez at>
  • Date: Sun, 13 Jun 2010 18:52:59 -0400 (EDT)

Thanks for your responses. I see now that I was too succint in posing
the problem. The specific situation is a follows. I have written a
module for emulating the behavior of an object that collects the
values of a random variable, and then is able to produce simple
statistics. The code is the following,

statObserver :=
 Module[{s1 = \[Infinity], s2 = \[Infinity], nTrials = 0, out},
  SetAttributes[out, HoldFirst];
  out[AddObs, d_] := (If[nTrials == 0,
     s1 = d;
     s2 = d^2,
     s1 += d;
     s2 += d^2;
     ]; nTrials++;);

  out[stat] := Module[{m, dev, rms},
    m = s1/nTrials;
    dev = (s2 - s1^2/nTrials)/(nTrials - 1) // Sqrt;
    rms = m^2 + dev^2 // Sqrt;
    {nTrials, m, dev, rms}];

  out[reset] := (nTrials = 0);
  out[delete] := Remove[s1, s2, nTrials, out];

Once loaded, this line defines the object

Ob= StatObserver[];

If a is a new trial of the random variable, then Ob[AddObs,a] updates
the module variables s1 and s2, and Ob[stat] returns the number of
trials, mean, deviation, and  RMS.

This is an execution example:

Ob = statObserver;
For[k = 1, k <= 1000, k++, Ob[AddObs, RandomReal[]]];
Ob[stat] // Print;

The printed value is the desired statistics

{1000 , 0.503057 , 0.286419 , 0.57888}

My question is whether I could link symbols a and Ob, so that
Ob[AddObs,a] is automatically executed every time variable a changes.
I know this can be done using Dynamic, but Dynamic must be displayed
in some Notebook cell, in order to work, and I do not think this is a
neat solution. Any idea?

Thanks, I really appreciate your answers,


  • Prev by Date: Re: Using mathematica to read website
  • Previous by thread: Re: Automatic update of variables
  • Next by thread: Re: Automatic update of variables