<?xml version="1.0"?> | |

<!-- | |

Copyright 2003-2004 The Apache Software Foundation | |

Licensed under the Apache License, Version 2.0 (the "License"); | |

you may not use this file except in compliance with the License. | |

You may obtain a copy of the License at | |

http://www.apache.org/licenses/LICENSE-2.0 | |

Unless required by applicable law or agreed to in writing, software | |

distributed under the License is distributed on an "AS IS" BASIS, | |

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |

See the License for the specific language governing permissions and | |

limitations under the License. | |

--> | |

<?xml-stylesheet type="text/xsl" href="xdoc.xsl"?> | |

<!-- $Revision$ $Date$ --> | |

<document> | |

<properties> | |

<title>Proposal for math Package</title> | |

<author email="martin@mvdb.net">Robert Burrell Donkin</author> | |

</properties> | |

<body> | |

<section name='Proposal for math Package'> | |

<subsection name='(0) Rationale'> | |

<p>The Java programming language and the math extensions in commons-lang provide implementations | |

for only the most basic mathematical algorithms. Routine development tasks such as computing | |

basic statistics or solving a system of linear equations require components not available in java | |

or commons-lang.</p> | |

<p>Most basic mathematical or statistical algorithms are available in open source implementations, | |

but to assemble a simple set of capabilities one has to use multiple libraries, many of which have | |

more restrictive licensing terms than the ASF. In addition, many of the best open source | |

implementations (e.g. the R statistical package) are either not available in Java or require large | |

support libraries and/or external dependencies to work.</p> | |

<p>A commons-math community will provide a productive environment for aggregation, testing and | |

support of efficient Java implementations of commonly used mathematical and statistical algorithms.</p> | |

</subsection> | |

<subsection name='(1) Scope of the Package'> | |

<p>The Math project shall create and maintain a library of lightweight, self-contained mathematics | |

and statistics components addressing the most common practical problems not immediately available in | |

the Java programming language or commons-lang. The guiding principles for commons-math will be: | |

<ol> | |

<li>Real-world application use cases determine priority</li> | |

<li>Emphasis on small, easily integrated components rather than large libraries with complex | |

dependencies</li> | |

<li>All algorithms are fully documented and follow generally accepted best practices</li> | |

<li>In situations where multiple standard algorithms exist, use the Strategy pattern to support | |

multiple implementations</li> | |

<li>Limited dependencies. No external dependencies beyond Commons components and the JDK</li> | |

</ol> | |

</p> | |

</subsection> | |

<subsection name='(1.5) Interaction With Other Packages'> | |

<p><em>math</em> relies only on standard JDK 1.2 (or later) APIs for | |

production deployment. It utilizes the JUnit unit testing framework for | |

developing and executing unit tests, but this is of interest only to | |

developers of the component.</p> | |

<p>No external configuration files are utilized.</p> | |

</subsection> | |

<subsection name='(2) Initial Source of the Package'> | |

<p>The initial codebase will consist of implementations of basic statistical algorithms such | |

as the following: | |

<ul> | |

<li>Simple univariate statistics (mean, standard deviation, n, confidence intervals)</li> | |

<li>Frequency distributions</li> | |

<li>t-test, chi-square test</li> | |

<li>Random numbers from Gaussian, Exponential, Poisson distributions</li> | |

<li>Random sampling/resampling</li> | |

<li>Bivariate regression, corellation</li> | |

</ul> | |

and mathematical algorithms such as the following: | |

<ul> | |

<li>Basic Complex Number representation with algebraic operations</li> | |

<li>Newton's method for finding roots</li> | |

<li>Binomial coefficients</li> | |

<li>Exponential growth and decay (set up for financial applications)</li> | |

<li>Polynomial Interpolation (curve fitting)</li> | |

<li>Basic Matrix representation with algebraic operations</li> | |

</ul> | |

</p> | |

<p>The proposed package name for the new component is | |

<code>org.apache.commons.math</code>.</p> | |

</subsection> | |

<subsection name='(3) Required Jakarta-Commons Resources'> | |

<ul> | |

<li>CVS Repository - New directory <code>math</code> in the | |

<code>jakarta-commons</code> CVS repository.</li> | |

<li>Mailing List - Discussions will take place on the general | |

<em>commons-dev@jakarta.apache.org</em> mailing list. To help | |

list subscribers identify messages of interest, it is suggested that | |

the message subject of messages about this component be prefixed with | |

[math].</li> | |

<li>Bugzilla - New component "math" under the "Commons" product | |

category, with appropriate version identifiers as needed.</li> | |

<li>Jyve FAQ - New category "commons-math" (when available).</li> | |

</ul> | |

</subsection> | |

<subsection name='(4) Initial Committers'> | |

<p>The initial committers on the math component shall be: | |

<ul> | |

<li><a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a></li> | |

<li><a href="mailto:tobrien@apache.org">Tim O'Brien</a></li> | |

</ul> | |

</p> | |

</subsection> | |

</section> | |

</body> | |

</document> |