|
"Distribution Functions" |
|
Gamma Distribution Method |
|
PARM X
|
RANDOM DATA
|
DENSITY DISTRIBUTION
|
Results of Gamma Distribution
|
IMPLEMENTATION
Gamma Distribution Method
The gamma distribution is a two-parameter family of continous probability distributions, representing
the sum of exponentially-distributed random variables.
Probability Density Function
The probability density function of the gamma distribution can be expressed in terma of the gamma function:
f(x;r,ç) = çr / T(r) * (xr-1 e-çx)
|
This function is defined in the parameter range r > 0,ç > 0, and x >0
Gamma Random Number Generator
If the parameter r is an integer, the random numbers from the gamma distribution can be
calculated by the random numbers from uniform distribution, using the formula:
Gamma(r,ç) = - 1/ç ∑i=1r ln Ui (0,1)
|
where Ui (0,1) is the random distribution defined in the range of [0,1]
Testing the Gamma Distribution Method
To test the Gamma Distribution method, a new static method has been added. The TestGammaDistribution() method has
been written and executed. No additional code is shown. The user can change variables as desired.
For the test, two parameters were set:
number of bins = 20; (nBins)
number of points = 2000; (nPoints)
|
where the parameter (nBins) is the number of bins in the histogram and (nPoints)
is the number of random points. A random array is created with the gamma distribution. A comparison is made between
the histogram of random data and the theoretical probability density function of the gamma distribution. The number of
random data points cannot be too small. Otherwise, the random distribution will deviate dramatically from the theoretical
probability function.
Running this example generates the results shown above.
static GammaDistribution();
{
int nBins = t2;
int nPoints = t1;
double xmin = 0;
double xmin = 15;
double[] rand = RandomGenerators.NextGamma(2, 0.5, nPoints);
ArrayList aList = RandomGenerators.HistogramData(rand, xmin, xmax, nBins);
double[] xdata = new double[nBins];
double[] ydata = new double[nBins];
double[] ydistribution = new double[nBins];
for (int i = 0; i < nBins; i++)
{
xdata[i] = xmin + (i + 0.5) * (xmax - xmin) / nBins;
ydata[i] = (double)aList[i];
ydistribution[i] = DistributionFunctions.Gamma(xdata[i], 5);
}
double normalizeFactor = RandomGenerators.ArrayMax(ydata) / RandomGenerators.ArrayMax(ydistribution);
for (int i = 0; i < nBins; i++)
{
ListBox1.Items.Add( xdata[i] + ",");
ListBox2.Items.Add(ydata[i] + ",");
ListBox3.Items.Add( Math.Round(ydistribution[i] * normalizeFactor, 0).ToString());
ListBox1.Items.Add("-" + "--------------------------------------");
ListBox2.Items.Add("-" + "--------------------------------------");
ListBox3.Items.Add("-" + "--------------------------------------");
}
}
|
|
|
|