       Automatic update of variables

• To: mathgroup at smc.vnet.net
• Subject: [mg110340] Automatic update of variables
• From: Antonio De Juárez <adejuarez at gmail.com>
• 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];
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;
Ob[delete]

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?

Antonio

```

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