Title: | Mathematics at DEC |
Moderator: | RUSURE::EDP |
Created: | Mon Feb 03 1986 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 2083 |
Total number of notes: | 14613 |
G'day all! I and a friend are writing a simulation program, and we want to randomize a normal distribution. What is the inverse cumulative function for the normal curve? (In other words, we randomize a uniform variable between 0 and 1, feed it to the function, and get a normal variable as output.) Or would it just be easier to approximate and use a lookup table? Matt
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
1933.1 | RUSURE::EDP | Always mount a scratch monkey. | Thu Feb 09 1995 15:49 | 8 | |
See topic 938. -- edp Public key fingerprint: 8e ad 63 61 ba 0c 26 86 32 0a 7d 28 db e7 6f 75 To find PGP, read note 2688.4 in Humane::IBMPC_Shareware. | |||||
1933.2 | But why two variables? | POLAR::WALSHM | Fri Feb 10 1995 09:52 | 4 | |
Thanks for the pointer. I don't understand, though, why it's necessary to randomize two variables. Is there no single-variable function that would accomplish the same end? Matt | |||||
1933.3 | RTL::GILBERT | Fri Feb 10 1995 11:40 | 3 | ||
The bulk of the computation _isn't_ in the creation of the two (uniform) random variables -- it's in the subsequent calculations, which are apparently simplified when expressed in terms of two random variables. | |||||
1933.4 | WRKSYS::ROTH | Geometry is the real life! | Sat Feb 11 1995 17:38 | 27 | |
Re .2 It isn't necessary to generate two variables, but doing so gives an analytically simple way to generate a pair of normal variates for those two uniforms you generated. A much faster way to approach the problem is to use "rejection", where you generate a uniformly distributed point in two dimensions, and throw it away and try again if it lies outside your desired distribution function curve (as if on a piece of graph paper.) If you break the curve up in simple to approximate pieces, this can be *very* fast. That's the idea behind fast library routines. The book Numerical Recipes discusses this a little, but I don't know if they have a really fast normal variate generator. Note that yet another way is to generate several uniform variates and just add them! The n-fold convolution of the uniforms gives a (binomial) approximation to a Gaussian, or viewed another way, Gaussians arise because of processes where a bunch of other variates are implicitly added together. If your uniform generator is fast, this is not half bad. The approximate distrubtion curve this gives is called a "unform B-spline". - Jim |