KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > math > distribution > DistributionFactory


1 /*
2  * Copyright 2003-2005 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.commons.math.distribution;
18
19 import org.apache.commons.discovery.tools.DiscoverClass;
20
21 /**
22  * This factory provids the means to create common statistical distributions.
23  * The following distributions are supported:
24  * <ul>
25  * <li>Binomial</li>
26  * <li>Cauchy</li>
27  * <li>Chi-Squared</li>
28  * <li>Exponential</li>
29  * <li>F</li>
30  * <li>Gamma</li>
31  * <li>HyperGeometric</li>
32  * <li>Poisson</li>
33  * <li>Normal</li>
34  * <li>Student's t</li>
35  * <li>Weibull</li>
36  * </ul>
37  *
38  * Common usage:<pre>
39  * DistributionFactory factory = DistributionFactory.newInstance();
40  *
41  * // create a Chi-Square distribution with 5 degrees of freedom.
42  * ChiSquaredDistribution chi = factory.createChiSquareDistribution(5.0);
43  * </pre>
44  *
45  * @version $Revision$ $Date: 2005-06-26 15:20:57 -0700 (Sun, 26 Jun 2005) $
46  */

47 public abstract class DistributionFactory {
48     /**
49      * Default constructor.
50      */

51     protected DistributionFactory() {
52         super();
53     }
54     
55     /**
56      * Create an instance of a <code>DistributionFactory</code>
57      * @return a new factory.
58      */

59     public static DistributionFactory newInstance() {
60         DistributionFactory factory = null;
61         try {
62             DiscoverClass dc = new DiscoverClass();
63             factory = (DistributionFactory) dc.newInstance(
64                 DistributionFactory.class,
65                 "org.apache.commons.math.distribution.DistributionFactoryImpl");
66         } catch(Throwable JavaDoc t) {
67             return new DistributionFactoryImpl();
68         }
69         return factory;
70     }
71
72     /**
73      * Create a binomial distribution with the given number of trials and
74      * probability of success.
75      *
76      * @param numberOfTrials the number of trials.
77      * @param probabilityOfSuccess the probability of success
78      * @return a new binomial distribution
79      */

80     public abstract BinomialDistribution createBinomialDistribution(
81         int numberOfTrials, double probabilityOfSuccess);
82     
83     /**
84      * Create a new cauchy distribution with the given median and scale.
85      * @param median the median of the distribution
86      * @param scale the scale
87      * @return a new cauchy distribution
88      * @since 1.1
89      */

90     public CauchyDistribution createCauchyDistribution(
91         double median, double scale)
92     {
93         return new CauchyDistributionImpl(median, scale);
94     }
95         
96     /**
97      * Create a new chi-square distribution with the given degrees of freedom.
98      *
99      * @param degreesOfFreedom degrees of freedom
100      * @return a new chi-square distribution
101      */

102     public abstract ChiSquaredDistribution createChiSquareDistribution(
103         double degreesOfFreedom);
104     
105     /**
106      * Create a new exponential distribution with the given degrees of freedom.
107      *
108      * @param mean mean
109      * @return a new exponential distribution
110      */

111     public abstract ExponentialDistribution createExponentialDistribution(
112         double mean);
113     
114     /**
115      * Create a new F-distribution with the given degrees of freedom.
116      *
117      * @param numeratorDegreesOfFreedom numerator degrees of freedom
118      * @param denominatorDegreesOfFreedom denominator degrees of freedom
119      * @return a new F-distribution
120      */

121     public abstract FDistribution createFDistribution(
122         double numeratorDegreesOfFreedom, double denominatorDegreesOfFreedom);
123     
124     /**
125      * Create a new gamma distribution with the given shape and scale
126      * parameters.
127      *
128      * @param alpha the shape parameter
129      * @param beta the scale parameter
130      *
131      * @return a new gamma distribution
132      */

133     public abstract GammaDistribution createGammaDistribution(
134         double alpha, double beta);
135
136     /**
137      * Create a new t distribution with the given degrees of freedom.
138      *
139      * @param degreesOfFreedom degrees of freedom
140      * @return a new t distribution
141      */

142     public abstract TDistribution createTDistribution(double degreesOfFreedom);
143     
144     /**
145      * Create a new hypergeometric distribution with the given the population
146      * size, the number of successes in the population, and the sample size.
147      *
148      * @param populationSize the population size
149      * @param numberOfSuccesses number of successes in the population
150      * @param sampleSize the sample size
151      * @return a new hypergeometric desitribution
152      */

153     public abstract HypergeometricDistribution
154         createHypergeometricDistribution(int populationSize,
155             int numberOfSuccesses, int sampleSize);
156  
157     /**
158      * Create a new normal distribution with the given mean and standard
159      * deviation.
160      *
161      * @param mean the mean of the distribution
162      * @param sd standard deviation
163      * @return a new normal distribution
164      */

165     public abstract NormalDistribution
166         createNormalDistribution(double mean, double sd);
167         
168     /**
169      * Create a new normal distribution with mean zero and standard
170      * deviation one.
171      *
172      * @return a new normal distribution.
173      */

174     public abstract NormalDistribution createNormalDistribution();
175     
176     /**
177      * Create a new Poisson distribution with poisson parameter lambda.
178      *
179      * @param lambda poisson parameter
180      * @return a new poisson distribution.
181      */

182     public abstract PoissonDistribution
183         createPoissonDistribution(double lambda);
184     
185     /**
186      * Create a new Weibull distribution with the given shape and scale
187      * parameters.
188      *
189      * @param alpha the shape parameter.
190      * @param beta the scale parameter.
191      * @return a new Weibull distribution.
192      * @since 1.1
193      */

194     public WeibullDistribution createWeibullDistribution(
195         double alpha, double beta)
196     {
197         return new WeibullDistributionImpl(alpha, beta);
198     }
199 }
200
Popular Tags