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
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to