Transformation Method: From Uniform Deviates to Linear Deviates

The Math.random() method of the java.lang.Math class generates random deviates with a uniform probability distribution, so that the probability of generating a number between x and x+dx, denoted by p(x)dx, is given by

p(x)dx = dx    for 0<x<1,
0     otherwise

Now suppose we generate a uniform deviate x and then take some prescribed function of it, y(x).  The probability distribution of y, denoted by p(y)dy, is determined by the funadamental transformation law of probabilities, which is simply

|p(y)dy| = |P(x)dx|

or

p(y) = p(x)|dx/dy|

ref.) p.214, Numerical Recipes In C, W.H.Press, B.P.Flannery, S.A.Teukolsky, and W.T.Vetterling, Cambirdge Univ. Press, Cambridge (New York, 1988)

From uniform deviates to linear deviates

Uniform:

p(x)dx  =  dx  for  0<x<1
0   otherwise

Linear:

p(y)dy  =  ydy  for  0<y<y0
0      otherwise

Hence,

ydy = dx,   or   y^2 / 2 = x   or  y = sqrt(2 * x).

Therefore, a Java program which simply converts

double x = Math.random();

to

double y = Math.sqrt( 2.0 * x);

will show the following result.  Here the y axis denotes the frequency of occurence for 0 < x < 0.1, 0.1 < x < 0.2, etc in the first plot, and similarly for the y-distribution in the second plot.