The Java Random class makes available a few different pseudo-random distribution from which we can extract variables and play with them. Here we are going to use values returned by nextDouble(), method that returns a value picked up from a uniform distribution between 0.0 and 1.0, and nextGaussian(), that refers to a Gaussian ("normal") distribution with mean 0 and standard deviation 1.
To spice things a bit, we will also manipulate the gaussian values to get a square gaussian distribution.
The mean for the variables generated from Random.nextDouble() should tend to 0.5, as we should find out running a few times this function with increasing values of "n":
double expectU(int n) {
double sum =0;
for(int i =0; i < n; ++i)
sum += generator.nextDouble();
return sum/n;
}
Doesn't change much for Random.nextGaussian(), but that it should tend to a mean of 0.0:
double expectG(int n) {
double sum =0;
for(int i =0; i < n; ++i)
sum += generator.nextGaussian();
return sum/n;
}
A bit more interesting the square gaussian case, since we provide an adaptor from Random.nextGaussian():
double squareGaussian() {
return Math.pow(generator.nextGaussian(), 2);
}
double expectSG(int n) {
double sum =0;
for(int i =0; i < n; ++i)
sum += squareGaussian();
return sum/n;
}
In this last test we should see how, for increasing values of n, the resulting expected mean value should tend to 1.0.
No comments:
Post a Comment