Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 7 of 7
  1. #1
    New Coder
    Join Date
    Mar 2011
    Posts
    20
    Thanks
    5
    Thanked 0 Times in 0 Posts

    Generating a random number taken from a normal distribution

    Hello,

    I need help creating a function in javascript that produces random numbers generated from a normal curve distribution with a mean and standard deviation that I can specify (and easily change). I would like only whole numbers and the ability to set reasonable maximum and minimums.

    Thanks,
    Adrian

  • #2
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,992
    Thanks
    203
    Thanked 2,536 Times in 2,514 Posts
    Code:
    <script type = "text/javascript">
    
    function rnd_snd() {
    return (Math.random()*2-1)+(Math.random()*2-1)+(Math.random()*2-1);
    }
    
    // Three random numbers between -1 and 1 added together. That will give a normal distribution with mean = 0 and standard deviation = 1. 
    // The function will return a decimal with an average value of 0.
    
    function rnd(mean, stdev) {
    return Math.round(rnd_snd()*stdev + mean);
    }
    
    // Multiply the result by the standard deviation that you want, then add your desired mean. 
    
    alert (rnd(38,2))  // mean, standard deviation
    
    </script>

    All advice is supplied packaged by intellectual weight, and not by volume. Contents may settle slightly in transit.
    Last edited by Philip M; 01-25-2012 at 05:51 PM.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • Users who have thanked Philip M for this post:

    ac11ca (02-03-2012)

  • #3
    Senior Coder Dormilich's Avatar
    Join Date
    Jan 2010
    Location
    Behind the Wall
    Posts
    3,280
    Thanks
    12
    Thanked 343 Times in 339 Posts
    Quote Originally Posted by Philip M View Post
    Code:
    // Three random numbers between -1 and 1 added together. That will give a normal distribution with mean = 0 and standard deviation = 1. 
    // The function will return a decimal with an average value of 0.
    out of interest, do you have any detailed info about that statement?
    The computer is always right. The computer is always right. The computer is always right. Take it from someone who has programmed for over ten years: not once has the computational mechanism of the machine malfunctioned.
    André Behrens, NY Times Software Developer

  • #4
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,992
    Thanks
    203
    Thanked 2,536 Times in 2,514 Posts
    Quote Originally Posted by Dormilich View Post
    out of interest, do you have any detailed info about that statement?
    Not quite sure what you mean, but all I have done here is added three random numbers between -1 and 1 together. That will give a point (almost +3 to almost -3) on a normal distribution with mean = 0 and standard deviation = 1. This is also called standard normal distribution. Try it yourself:-

    Code:
    <script type = "text/javascript">
    
    var tot = 0;
    var its = 500; // iterations
    for (var i = 0; i<its; i++) {
    var randy = (Math.random()*2-1)+(Math.random()*2-1)+(Math.random()*2-1);
    tot += randy;
    document.write(randy);
    document.write("<br>")
    }
    
    alert (tot/its);   // close to zero, especially if the number of iterations is increased to (say) 10000
    
    </script>
    For more info Google for Box-Muller transform.
    Last edited by Philip M; 01-26-2012 at 08:04 PM.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #5
    Senior Coder Dormilich's Avatar
    Join Date
    Jan 2010
    Location
    Behind the Wall
    Posts
    3,280
    Thanks
    12
    Thanked 343 Times in 339 Posts
    Quote Originally Posted by Philip M View Post
    For more info Google for Box-Muller transform.
    thanks, that was the bit of info I wanted.
    The computer is always right. The computer is always right. The computer is always right. Take it from someone who has programmed for over ten years: not once has the computational mechanism of the machine malfunctioned.
    André Behrens, NY Times Software Developer

  • #6
    New Coder
    Join Date
    Mar 2011
    Posts
    20
    Thanks
    5
    Thanked 0 Times in 0 Posts
    Thank you! Very useful, and I will have a play around with it soon.

    Now things get a little more tricky: What about a chi square distribution (with 3 degrees of freedom)?

    Cheers,
    Adrian

  • #7
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,992
    Thanks
    203
    Thanked 2,536 Times in 2,514 Posts
    Quote Originally Posted by ac11ca View Post
    Now things get a little more tricky: What about a chi square distribution (with 3 degrees of freedom)?
    Well, what about it? Google to find for example

    http://www.fourmilab.ch/rpkp/experim...s/chiCalc.html

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • Users who have thanked Philip M for this post:

    ac11ca (02-06-2012)


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •