Gaussian pseudo-random numbers -- math issues
Mark Smith
lists at futilism.com
Wed Oct 22 21:46:14 EDT 2008
Timothy, the only way I could find of doing what you want is called
'the polar form of the Box-Muller transformation'.
Fortunately, it's not as bad as it sounds. :)
I've copied an ADA implementation, and here it is:
function polarBoxMuller pLength, pMean, pSdev
put false into useLast
repeat pLength
repeat
put ((random(101) - 1) * 0.02) - 1 into x1 -- generate a
random number between -1 and +1
put ((random(101) - 1) * 0.02) - 1 into x2
put (x1 * x1) + (x2 * x2) into w
if w <= 1 then exit repeat
end repeat
if w <> 0 then put ln(w) * -2 into w -- rev barfs if w is zero
if w <> 0 then put sqrt(w) / w into w -- ditto
put x1 * w into y1
put x2 * w into y2
put pMean + y1 * pSdev & comma after tList
put pMean + y2 * pSdev & comma after tList
end repeat
return char 1 to -2 of tList
end polarBoxMuller
This should give you a comma delimited list of (fairly) normally
distributed numbers.
Best,
Mark
ps. I enjoy this sort of thing, so thanks for the question!
On 21 Oct 2008, at 23:03, Timothy Miller wrote:
> Greetings,
>
> I'm interested an a modest statistics demonstration, but I can't
> figure out how do to the math myself.
>
> I'd like to have a few lines of code that produces a sequence of
> numbers. (whole numbers would probably be okay). I'd like to
> specify the number of numbers generated. Let's call that Z.
>
> I'd like also to specify the desired mean and standard deviation.
> I'd like the function (is this a function??) to work in such a way
> that if Z is large, the set of numbers generated, if graphed as a
> frequency distribution, would be normally distributed, i.e., Gaussian.
>
> If Z is rather small, then the mean and standard deviation of the
> numbers produced will would only approximate the desired mean and
> standard deviation. Different runs would produce different actual
> means and standard deviations.
>
> If Z is very small, like 3 or 4, the numbers will look almost random.
>
> I hope I explained that clearly.
>
> Optionally, I might also be able to enter a variable that would
> specify the desired number of digits to the right of the decimal
> point.
>
> No favors are requested. I'd really be rather uncomfortable with a
> generous gesture. However, if someone has some code like this
> sitting around, and you're willing to share it, with a few notes
> about how to use it, I'd appreciate it. If not, it can't be helped.
>
> Hmmmm... I wonder if some website somewhere would do the work for
> me. That could work... I looked around, but didn't find anything.
>
> Thanks in advance.
>
> Tim Miller
>
>
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list