Central Limit Theorem¶
Here is some Igor code
// An example function that takes a variable in the range (-1, 1)
// and returns a real value. It will be called with random numbers
// uniformly distributed in the range (-1, 1).
Function nop(x)
Variable x // parameters are declared in Igor
return x
End
// SampleN takes a function of a single variable, such as nop, and
// a number of times to sample the function and add the results. It
// does this one-hundred-thousand times, putting the results in the
// wave "accumulator". It then prepares a histogram of the values in
// accumulator, and plots the values, along with uncertainties
// given by the square root of the number in each bin.
Function SampleN(f, ntimes)
FUNCREF nop f
Variable ntimes
Make/O/N=100000 accumulator // create accumulator with 1e5 points
accumulator = 0 // set all values to zero
Variable n
for (n = ntimes ; n > 0; n -= 1) // loop ntimes times
accumulator += f(enoise(1)) // add a new value to each element
endfor
// Prepare the histogram
Make/N=51/O myhisto // create myhisto to hold histogram
// Compute the histogram from accumulator, putting the results
// in myhisto, centering the x-coordinate of each bin (/C flag)
// and computing a wave W_SqrtN holding the square root of the
// number of counts in each bin (/N flag). The width of the bins
// is set using an algorithm described in the documentation (/B=4).
Histogram /B=4 /C/DEST=myhisto/N accumulator
WAVE W_SqrtN // declare wave created by Histogram
DoWindow/F MyGraph // see if we have already made a graph
if (V_flag == 0) // if not,
Display/K=1 myhisto // graph myhisto and then
DoWindow/C MyGraph // rename the window so we can find
HMC#FixGraph() // fix the graph, and add error bars
ErrorBars myhisto Y,wave=(W_SqrtN,W_SqrtN)
SetAxis left 0,* // make sure y axis starts at 0
endif
End