Commons Math Release Notes
Release History
Version 
Date 
Description 
3.4 
TBD 
This is a minor release: It combines bug fixes and new features. Changes to existing features were made in a backwardscompatible way such as to allow dropin replacement of the v3.x JAR file. Most notable among the new features are: XXX The minimum version of the Java platform required to compile and use Apache Commons Math is Java 5. Users are encouraged to upgrade to this version as this release not only includes bug fixes but also deprecates numerous classes and methods that will be deleted from the next major release (4.0). Caveat: 1. The implementation of the BOBYQA optimization algorithm is in alpha state (cf. MATH621): Many code paths are untested, and we are looking for volunteers to improve the code readability, robustness and performance and to extend the unit tests suite. 2. A few methods in the FastMath class are in fact slower that their counterpart in either Math or StrictMath (cf. MATH740 and MATH901). 
3.3 
20140505 
This is a minor release: It combines bug fixes and new features. Changes to existing features were made in a backwardscompatible way such as to allow dropin replacement of the v3.x JAR file. Most notable among the new features are: Framework for creating artificial neural nets, self organizing feature maps, computational geometry algorithms (convex hull, enclosing ball), performance improvements of the linear simplex solver, refactoring of curve fitters, lowdiscrepancy random generators (sobol, halton), leastsquares fitting. The minimum version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version as this release not only includes bug fixes but also deprecates numerous classes and methods that will be deleted from the next major release (4.0). Caveat: 1. The implementation of the BOBYQA optimization algorithm is in alpha state (cf. MATH621): Many code paths are untested, and we are looking for volunteers to improve the code readability, robustness and performance and to extend the unit tests suite. 2. A few methods in the FastMath class are in fact slower that their counterpart in either Math or StrictMath (cf. MATH740 and MATH901). 3. A few methods/constructors in the package o.a.c.m.geometry.partitioning have changed their signature in a non backwardscompatible way. The respective classes are intended to be package private only and are not supposed to be used for other purposes. 
3.2 
20130406 
This is a minor release: It combines bug fixes and new features. Changes to existing features were made in a backwardscompatible way such as to allow dropin replacement of the v3.1[.1] JAR file. Most notable among the new features are: Framework for automatic differentiation, Lévy distribution, prime numbers, enumerated distributions, real field allowing to use several algorithms (solvers, linear algebra, 3D geometry) with different reallike classes (high accuracy or automatic differentiation), spherical coordinates with gradients and Hessians, reorganized clustering package with different distance implementations. The minimum version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version as this release not only includes bug fixes but also deprecates numerous classes and methods that will be deleted from the next major release (4.0). Caveat: 1. The implementation of the BOBYQA optimization algorithm is in alpha state (cf. MATH621): Many code paths are untested, and we are looking for volunteers to improve the code readability, robustness and performance and to extend the unit tests suite. 2. A few methods in the FastMath class are in fact slower that their counterpart in either Math or StrictMath (cf. MATH740 and MATH901). 
3.1.1 
20130114 
This is a point release: It fixes a bug that renders version 3.1 unusable in some situations (see details below). 
3.1 
20121223 
This is a minor release: It combines bug fixes and new features. Changes to existing features were made in a backwardscompatible way such as to allow dropin replacement of the v3.0 JAR file. Most notable among the new features are: Framework for automatic differentiation, multivariate mixture model distribution, quaternions, Gauss integration framework, Hermite polynomial interpolation, eigenvalue decomposition of nonsymmetric matrices, DBSCAN clustering. Most notable among the changes are: Greatly improved precision in the implementation of the Gamma and Beta special functions, optimizers API, deprecation of the sparse vector implementation. The minimal version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version as this release not only includes bug fixes but also deprecates numerous classes and methods that will be deleted from the next major release (4.0). Caveat: 1. The implementation of the BOBYQA optimization algorithm is in alpha state (cf. MATH621): Many code paths are untested, and we are looking for volunteers to improve the code readability, robustness and performance and to extend the unit tests suite. 2. A few methods in the FastMath class are in fact slower that their counterpart in either Math or StrictMath (cf. MATH740 and MATH901). 
3.0 
20120307 
This is a major release: It combines bug fixes, new features and changes to existing features. Most notable among the new features are: Iterative solvers, Kalman filter, ISAAC RNG, Illinois and Pegasus root finders, enhanced ODE framework, refactored geometry package, Binary Space Partition trees. Most notable among the changes are: Exclusive use of unchecked exceptions, removal of interfaces for which a single implementation is assumed to exist, improved coding and API consistency across packages, performance (matrix product, FFT) and robustness (SVD). Because of the base package name change, this release can be used together with earlier versions of Commons Math. The minimal version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version as, in addition to new features, this release includes numerous bug fixes. Users of Commons Math 2.02 should recompile their code against the 3.0 JAR file and must adjust the import statements to use the appropriate org.apache.commons.math3 base package. Most of the compilation errors users will encounter after the switch will be due to moved or deleted classes/interfaces resulting from package reorganization. Caveat: 1. The implementation of the BOBYQA optimization algorithm is in alpha state (cf. MATH621): Many code paths are untested, and we are looking for volunteers to improve the code readability, robustness and performance and to extend the unit tests suite. 2. A few methods in the FastMath class are in fact slower that their counterpart in either Math or StrictMath (cf. MATH740). 
2.2 
20110302 
This is primarily a maintenance release, but it also includes new features and enhancements. Users of version 2.1 are encouraged to upgrade to 2.2, as this release includes some important bug fixes. See the detailed list of changes below for full description of all bug fixes and enhancements. This release contains some minor compatibility breaks with version 2.1 in some internal classes but none of them are in APIs likely to be accessed by user code: the MessagesResources_fr class has been removed (replaced by a properties file); the arguments of the EventState.reinitializeBegin method have changed; some protected fields which already had public accessors in AbstractStepInterpolator have been replaced. There is a behavior change that users of the multiple regression classes should be aware of. In version 2.1, there was no way to estimate models without intercept terms, and, while this was not clear from the documentation, design (X) matrices needed to include initial unitary columns. In 2.2, initial unitary columns are not necessary and whether or not models include intercept terms is configurable. See the change log and javadoc for the classes in org.apache.commons.math3.stat.regression for details. The major new features are: a new FastMath class, both faster, more accurate and with a few additional functions than StrictMath and Math; a new package for floating point arbitrary precision computing, including high level functions like exponential, sine, square root ...; new linear and tricubic interpolators; a new Gaussian curve fitter; a new erfc function; characteristic support for distributions; a set of new Well Equidistributed Longperiod Linear (WELL) random generators. 
2.1 
20100402 
This is primarily a maintenance release, but it also includes new features and enhancements. Users of version 2.0 are encouraged to upgrade to 2.1, as this release includes some important bug fixes. See the detailed list of changes below for full description of all bug fixes and enhancements. This release contains some minor API compatibility breaks with version 2.0: the return type of RealVector.copy() has been changed to AbstractRealVector; the noargument constructor of MatrixUtils() has been made private; the mapXxxToSelf methods of OpenMapRealVector have been removed and some method return types have been changed in this class; new methods have been added to the RealVector interface; several fields in AdaptiveStepSizeIntegrator have been made final; DummyStepInterpolator requires an additional argument for one of its constructors; some protected fields have been removed from AbstractLeastSquaresOptimizer, AbstractScalarDifferentiableOptimizer and AbstractLinearOptimizer; and the isOptimal(SimplexTableau) method has been removed from SimplexSolver. 
2.0 
20090803 
This is a major release. It combines bug fixes, new features and changes to existing features. Most notable among the new features are: decomposition algorithms in the linear algebra package (LU, QR, Cholesky, SVD, eigen decomposition) which are based on the popular JAMA API (but much faster); support for sparse matrices and vectors; support for any fieldbased matrix (Complex, Fraction ...); support for genetic algorithms; several new optimization algorithms (Dantzig's simplex for linear constrained problems, conjugate gradient, Brent); support for curve fitting with special cases for harmonic and polynomial functions; support for state derivative in ODE step handlers; new multistep integrators (AdamsBashforth and AdamsMoulton) with variable stepsize; regression algorithms; rank transformations; Mersenne twister pseudo random number generator. This release is NOT source and binary compatible with earlier versions of Commons Math. Starting with version 2.0 of the library, the minimal version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version, as in addition to new features, this release includes numerous bug fixes. Users of Commons Math 1.01.2 should recompile their code against the 2.0 jar. Most of the compilation errors users will encounter after the switch will be due to classes moved due to package reorganization. These errors are simply solved by adjusting the import statements in users code. 
1.2 
20080224 
This release combines bug fixes and new features. Most notable among the new features are the estimation, optimization, geometry and ode packages added from the Mantissa library. Implementations of fast Fourier transform, QR decomposition and several numerical integration algorithms have also been added, along with enhancements and extensions to packages included in Commons Math 1.1. This release is source and binary compatible with earlier versions of Commons Math. 
1.1 
20051217 
This is a maintenance release containing bug fixes and enhancements. All API changes are binary compatible with version 1.0. The enhancements include some new probability distributions, a Fraction class, new matrix and numerical utilities, and a PRNG pluggability framework making it possible to replace the JDKsupplied random number generator in Commons Math (and elsewhere) with alternative PRNG implementations. 
1.0 
20041206 
Apache Commons Math 1.0  Initial Release 
Release 3.4  TBD
Type 
Changes 
By 

Fixed bicubic spline interpolator, using Akima splines. Fixes MATH1138. Thanks to Hank Grabowski. 
luc 

Changed classes in the inference package that instantiate distributions to
pass null RandomGenerators to avoid initialization overhead for the default
generator. Fixes MATH1154. 
psteitz 

Added all Java 8 StrictMath methods to FastMath, so FastMath remains compatible
with newer Java versions. Fixes MATH1156. 
luc 

Added Gumbel, Laplace, Logistic and Nakagami distributions. Fixes MATH1139. Thanks to Alexey Volkov. 
tn 

Added statistics missing from toString method in SummaryStatistics. Fixes MATH1147. 
psteitz 

Improved performance of "EnumeratedDistribution#sample()" by caching
the cumulative probabilities and using binary rather than a linear search. Fixes MATH1152. Thanks to Andras Sereny. 
tn 

"MonotoneChain" did not take the tolerance factor into account when
sorting the input points. In case of collinear points this could result
in a "ConvergenceException" when computing the hull. Fixes MATH1148. Thanks to Guillaume Marceau. 
tn 

Interface "ValueAndJacobianFunction" is a precondition for lazy
evaluation (in "o.a.c.m.fitting.leastsquares"). Fixes MATH1151. 
erans 

Fix potential integer overflows in "MannWhitneyUTest" when providing
large sample arrays. Fixes MATH1145. Thanks to Anders Conbere. 
tn 

Fixed potential null pointer dereferencing in constructor of
"DummyStepInterpolator(DummyStepInterpolator)". Fixes MATH1149. Thanks to M Kim. 
tn 

Fixed BinomialDistribution to deal with degenerate cases correctly. Fixes MATH1136. Thanks to Aleksei Dievskii. 
psteitz 

"MonotoneChain" failed to generate a convex hull if only a minimal hull
shall be created (includeCollinearPoints=false) and collinear hull points
were present in the input. Fixes MATH1135. Thanks to Guillaume Marceau. 
tn 

Improve performance of "KolmogorovSmirnovTest#kolmogorovSmirnovTest(...)" for
large samples. Also changed implementation for large n to use PelzGood
approximation. Fixes MATH1131. Thanks to Schalk W. Cronjé. 
psteitz 

"BicubicSplineInterpolatingFunction": all fields made final and initialized in
the constructor. Added flag to request initialization, or not, of the internal
data needed for partial derivatives. Fixes MATH1134. 
erans 

Constrained EmpiricalDistribution sample/getNextValue methods to return
values within the range of the data; correctly linked RandomGenerator to
superclass so that RealDistribution reseedRandomGenerator method works. Fixes MATH984. 
psteitz 

Added several different estimation types and NaN handling strategies for Percentile. Fixes MATH1120. Thanks to Venkatesha Murthy. 
luc 

Added implementation of PSquare algorithm to estimate percentiles without
storing data in memory (i.e. as StorelessUnivariateStatistic). Fixes MATH418. Thanks to Venkatesha Murthy. 
psteitz 

"Percentile": wrong sorting in the presence of NaN. Fixes MATH1129. 
erans 

Added lazy evaluation to "LeastSquaresFactory" (in "o.a.c.m.fitting.leastsquares")
to avoid evaluating the model when the optimization algorithm does not actually
require it. Fixes MATH1128. 
erans 

Fixed overflow in Precision.equals with ulps (both double and float versions). Fixes MATH1127. 
luc 

Performance improvements for Student's tdistribution. Fixes MATH1125. Thanks to Ajo Fod. 
tn 

Fixed NullPointerException when choppingoff a subhyperplane
that is exactly at a region boundary. Fixes MATH1123. Thanks to Aurélien Labrosse. 
luc 

"BrentOptimizer": increment base class iteration counter. Fixes MATH1121. Thanks to Ajo Fod. 
erans 
Release 3.3  20140505
Type 
Changes 
By 

Added new constructor to "OLSMultipleLinearRegression" to be able
to specify a custom singularity threshold for QR decomposition. Fixes MATH1110. Thanks to Edward Segall. 
tn 

Extracted class "LineSearch" from "PowellOptimizer", to be used in
"NonLinearConjugateGradientOptimizer" (in place of the implementation
that triggered this issue). Fixes MATH1092. 
erans 

Build properly empty polyhedrons set when given equal min/max boundaries. Also explained
better in the javadoc about some wrong usage of PolyhedronsSet constructor. Fixes MATH1115. 
luc 

Build properly empty polygons set when given equal min/max boundaries. Also explained
better in the javadoc about some wrong usage of PolygonsSet constructor. Fixes MATH1117. 
luc 

Added a fast singlestep method for fixedstep RungeKutta integrators. Fixes MATH1119. 
luc 

"Complex": Fixed compatibility of "equals(Object)" with "hashCode()".
Added new methods for testing floatingpoint equality between the real
(resp. imaginary) parts of two complex numbers. Fixes MATH1118. 
erans 

Added an order 6 fixedstep ODE integrator designed by H. A. Luther in 1968. 
luc 

Bracketing utility for univariate root solvers returns a tighter interval than before.
It also allows choosing the search interval expansion rate, supporting both linear
and asymptotically exponential rates. 
luc 

Prevent penalties to grow multiplicatively in CMAES for out of bounds points. Fixes MATH1107. Thanks to Bruce A Johnson. 
luc 

Added KolmogorovSmirnovTest class, deprecating KolmogorovSmirnovDistribution. Fixes MATH437. 
psteitz 

Improved documentation of QR decomposition handling of singular matrices. Fixes MATH1101. 
luc 

QR decomposition can compute pseudoinverses for tall matrices. Fixes MATH1053. Thanks to Sean Owen. 
luc 

Field vectors now implement the visitor pattern just like real vectors. Fixes MATH820. 
luc 

Undeprecated RealVector.sparseIterator, documenting explicitly that entries
not iterated above are the zero ones. Fixes MATH875. 
luc 

Relaxed specification for function mapping on vectors, thus allowing straightforward
implementation for sparse vectors. Fixes MATH821. 
luc 

Make QR the default in GaussNewtonOptimizer. Fixes MATH1099. Thanks to Evan Ward. 
luc 

Add Cholesky option to GaussNewtonOptimizer. Fixes MATH1099. Thanks to Evan Ward. 
luc 

Make QR in GaussNewton faster and more accurate. Fixes MATH1099. Thanks to Evan Ward. 
luc 

The sparse vector and matrix classes have been undeprecated. This is a reversal
of a former decision, as we now think we should adopt a generally accepted
behavior which is ... to ignore the problems of NaNs and infinities in
sparse linear algebra entities. Fixes MATH870. 
luc 

Added MonotoneChain algorithm to compute the convex hull of a collection of
points in 2D. Additionally, the AklToussaintHeuristic can be used to speed up
the generation. Fixes MATH749. 
tn 

Calculating the inverse cumulative probability of an "EnumeratedRealDistribution"
will now return the correct result according to the selected enumerated probability
mass function. Fixes MATH1065. Thanks to matteodg. 
tn 

Deprecated "ArithmeticUtils#pow(int, long)" and "ArithmeticUtils#pow(long, long)"
in favor of corresponding methods "ArithmeticUtils#pow(..., int)". Fixes MATH1050. 
erans 

Create additional artifact "commonsmath3x.y.ztools.jar" as part of the
release process. This artifact contains useful tools, e.g. for performance testing. Fixes MATH976. 
erans 

Improved performance of "MathArrays#sortInPlace(...)". Fixes MATH990. 
erans 

Clarify javadoc of "DecompositionSolver#getInverse()" and corresponding implementations
wrt the actually returned inverse. Several decomposition implementations are able
to return a pseudoinverse in case of a singular matrix. Fixes MATH1044. Thanks to Sean Owen. 
tn 

Added Emo Welzl algorithm to find the smallest enclosing ball of a collection of points. Fixes MATH1095. 
luc 

Fixed an indexing problem in "BicubicSplineInterpolatingFunction" which
resulted in wrong interpolations. Fixes MATH985. Thanks to Johnathan Kool. 
erans 

Added a constructor to "AbstractListChromosome" that does not copy the
input argument. Fixes MATH1072. 
tn 

BSP tree now provides an API to compute a global signed distance from
a test point to the region. The distance is positive if the point is
outside of the region, negative if the point is inside, and zero
when the point is at the boundary. The distance is continuous
everywhere, so it can be used with a root solver to identify accurately
boundary crossings. This API is available for all BSP trees, in
Euclidean and spherical geometries, and in all dimensions. Fixes MATH1091. 
luc 

Added new geometry subpackages: spherical.oned which deals with geometry
on the 1sphere (i.e. the circle) and spherical.twod which deals with the
2sphere (i.e. the regular sphere). BSP trees can be used in these new
spaces, so one can build arcs sets and spherical polygons sets with all
the regular operations (inside/outside/boundary checks, union, intersection,
symetric difference, complement ...). 
luc 

IntervalsSet now implements Iterable<double[]>, so one can iterate
over the subintervals without building a full list containing
a copy of everything beforehand. Fixes MATH1090. 
luc 

"Precision#round(double, ...)" will now return negative zero for negative
values rounded to zero, similar to the float variant. Fixes MATH1089. 
tn 

The iterator returned by "MultiDimensionalCounter#iterator()" will now
correctly throw a "NoSuchElementException" when calling "next()" and the
iterator is already exhausted. Fixes MATH1088. 
erans 

Fixed an issue with noisy functions for ODE events detection. 
luc 

Utilities for creating artificial neural networks (package "o.a.c.m.ml.neuralnet").
Implementation of Kohonen's SelfOrganizing Feature Map (SOFM). Fixes MATH923. 
erans 

The cutOff mechanism of the "SimplexSolver" in package o.a.c.math3.optim.linear
could lead to invalid solutions. The mechanism has been improved in a way that
the tableau does not need to be updated anymore. Additionally, a new check will
prevent impossible solutions to be returned as valid. Fixes MATH1082. 
tn 

Improved performance of "SimplexSolver" in package o.a.c.math3.optim.linear by
directly performing row operations and keeping track of the current basic variables. Fixes MATH1079. 
tn 

The "LinearConstraintSet" will now return the enclosed collection of "LinearConstraint"
objects in the same order as they have been added. Fixes MATH1080. 
tn 

Added support for different pivot selection rules to the "SimplexSolver" by introducing
the new "OptimizationData" class "PivotSelectionRule". Currently supported rules are:
Dantzig (default) and Bland (avoids cycles). Fixes MATH842. 
tn 

Fix "Precision#round(float, int, int)" when using rounding mode "BigDecimal.ROUND_UP"
and the discarded fraction is zero. Fixes MATH1070. Thanks to Oleksandr Muliarevych. 
tn 

Use "FastMath" instead of "Math" within Commons Math. Fixes MATH1059. 
tn 

Avoid overflow when calculating Kendall's correlation for large arrays. Fixes MATH1068. Thanks to Gal Lalouche. 
tn 

Avoid infinite recursion in "Beta.regularizedBeta" (package "o.a.c.m.special"); Fixes MATH1067. Thanks to Florian Erhard. 
erans 

Refactoring of curve fitters (package "o.a.c.m.fitting"). Fixes MATH1014. 
erans 

Added possibility to retrieve the best found solution of the "SimplexSolver" in case
the iteration limit has been reached. The "optimize(OptimizationData...)" method now
supports a "SolutionCallback" which provides access to the best solution if
a feasible solution could be found (phase 2 of the TwoPhase simplex method has been reached). Fixes MATH970. 
tn 

Added new class "ClusterEvaluator" to evaluate the result of a clustering algorithm
and refactored existing evaluation code in "MultiKMeansPlusPlusClusterer"
into separate class "SumOfClusterVariances". Fixes MATH1031. Thanks to Thorsten Schäfer. 
tn 

Added InsufficientDataException. Fixes MATH1061. 
psteitz 

Fixed unintended integer division error in PoissonDistribution sampling method. Fixes MATH1056. Thanks to Sean Owen. 
psteitz 

Fixed failing unit tests for "BOBYQAOptimizer" when executed with a Oracle/Sun JVM 1.5. Fixes MATH1057. 
tn 

A call to "KalmanFilter#correct(...)" may have resulted in "NonSymmetricMatrixException"
as the internally used matrix inversion method was using a too strict symmetry check. Fixes MATH1062. 
tn 

Precision improvements (for small values of the argument) in "Beta" function
and in "LogNormalDistribution" and "WeibullDistribution". Fixes MATH1058. Thanks to Sean Owen. 
erans 

Fixed some invalid links inside javadoc and added missing deprecated annotations. Fixes MATH1055. Thanks to Sean Owen. 
tn 

Added a graphical overview of available continuous distributions to the userguide. Fixes MATH983. 
tn 

Added Kendall's tau correlation (KendallsCorrelation). Fixes MATH1051. Thanks to Matt Adereth,devl. 
tn 

"EigenDecomposition" may have failed to compute the decomposition for certain
nonsymmetric matrices. Port of the respective bugfix in Jama1.0.3. Fixes MATH1051. 
tn 

Check for overflow in methods "pow" (class "o.a.c.m.util.ArithmeticUtils"). Fixes MATH1047. 
erans 

"EigenDecomposition": Using tolerance for detecting whether a matrix is singular. Fixes MATH1045. Thanks to Sean Owen. 
erans 

Added SparseGradient to deal efficiently with first derivatives when the number
of variables is very large but most computations depend only on a few of the
variables. Fixes MATH1036. Thanks to Ajo Fod. 
luc 

Added logDensity methods to AbstractReal/IntegerDistribution with naive default
implementations and improved implementations for some current distributions. Fixes MATH1039. Thanks to Aleksei Dievskii. 
psteitz 

Added ConfidenceInterval class and BinomialConfidenceInterval providing several
estimators for confidence intervals for binomial probabilities. Fixes MATH1038. Thanks to Thorsten Schäfer. 
psteitz 

Simplified and improved performance of "ArithmeticUtils#addAndCheck(long, long)". Fixes MATH1035. Thanks to derphead. 
tn 

Added new methods to compute the inverse of a matrix to "DiagonalMatrix"
and "MatrixUtils". Fixes MATH1004. Thanks to Ajo Fod. 
tn 

The "BigFraction" constructor will throw a "FractionConversionException"
also in case negative values are provided which exceed the allowed range
(+/ Integer.MAX_VALUE). Fixes MATH1029. 
tn 

"Pair": added factory method and "toString" method. Fixes MATH1041. Thanks to Sean Owen. 
erans 

"AbstractUnivariateStatistic.test(...)" methods have uses outside subclasses;
implementation moved to MathArrays.verifyValues(...). Fixes MATH1002. 
sebb 

The "KalmanFilter" wrongly enforced a column dimension of 1 for
the provided control and measurement noise matrix. Fixes MATH1033. Thanks to Yuan Qu. 
tn 

Fix a typo in the test class of "GeometricDistribution" and ensure that a meaningful
tolerance value is used when comparing test results with expected values. Fixes MATH1037. Thanks to Aleksei Dievskii. 
tn 

Added exact binomial test implementation. Fixes MATH1034. Thanks to Thorsten Schäfer. 
psteitz 

Added overloaded constructors for subclasses of "RealDistribution" implementations
which do not require an explicit "inverseCumulativeAccuracy". The default accuracy will
be used instead. Fixes MATH1018. Thanks to Ajo Fod. 
tn 

Added overloaded methods for "Frequency#incrementValue(Comparable, long)" with
int, long and char primitive arguments. Fixes MATH1001. Thanks to sebb. 
tn 

Added a section to the userguide for the new package o.a.c.m.ml with an
overview of available clustering algorithms and a code example. Fixes MATH1030. Thanks to Thorsten Schäfer. 
tn 

Creating a "Fraction" or "BigFraction" object with a maxDenominator parameter
does not throw a "FractionConversionException" anymore in case the value is
very close to fraction. Fixes MATH996. Thanks to Tim Allison. 
tn 

Added new distance metric "EarthMoversDistance". Fixes MATH1028. Thanks to Thorsten Schäfer. 
tn 

Improve performance of "DiagonalMatrix#preMultiply(RealVector)". Fixes MATH999. Thanks to Ajo Fod. 
tn 

Added CombinatoricsUtils to the util package, moving binomial
coefficients, factorials and Stirling numbers there and adding
a combinations iterator. Fixes MATH1025. 
psteitz 

"PolynomialSplineFunction": added method "isValidPoint" that
checks whether a point is within the interpolation range. Fixes MATH991. 
erans 

"BicubicSplineInterpolatingFunction": added method "isValidPoint" that
checks whether a point is within the interpolation range. Fixes MATH989. 
erans 

Fixed overflow in "HypergeometricDistribution". Fixes MATH1021. Thanks to Brian Bloniarz. 
erans 

Fixed "nextPermutation" method (in "o.a.c.m.random.RandomDataGenerator").
This bug does not affect applications using a previous version of
Commons Math. Fixes MATH1020. 
erans 

Buggy (private) method "shuffle" in "o.a.c.m.random.RandomDataGenerator"
superseded by "MathArrays.shuffle" (cf. MATH1010). Fixes MATH1019. 
erans 

Utility to shuffle an array. Fixes MATH1010. 
erans 

Created "RandomGeneratorFactory" (package "o.a.c.m.random") to reduce
code duplication in "RandomDataGenerator". Fixes MATH1012. 
erans 

Created package ("o.a.c.m.fitting.leastsquares") for leastsquares
fitting, with implementations of "LevenbergMarquardtOptimizer" and
"GaussNewtonOptimizer" adapted to a new ("fluent") API. Fixes MATH1008. 
erans 

Improved implementation of "sample" method of "UniformIntegerDistribution". Fixes MATH1011. 
erans 

Add mode function to StatUtils class. Fixes MATH1007. 
sebb 

Enabled LaTeX expressions in javadoc and site docs via MathJax. Fixes MATH1006. 
psteitz 

Add mode function to Frequency class. Fixes MATH1000. 
sebb 

Fixed "MathArrays.linearCombination" when array length is 1. Fixes MATH1005. Thanks to Roman Werpachowski. 
erans 

Implemented GaussHermite quadrature scheme (in package
"o.a.c.m.analysis.integration.gauss"). Fixes MATH997. 
erans 

Documented limitation of "IterativeLegendreGaussIntegrator" (added
warning about potential wrong usage). Fixes MATH995. 
erans 

In "GaussNewtonOptimizer", check for convergence before updating the
parameters estimation for the next iteration. Fixes MATH993. 
erans 

Added midpoint integration method. Fixes MATH967. Thanks to Oleksandr Kornieiev. 
luc 

Fixed NullPointerException in 2D and 3D subline intersections. Fixes MATH988. Thanks to Andreas Huber. 
luc 

Added append method to SimpleRegression, making this class map/reducible. Fixes MATH987. Thanks to Ajo Fod. 
psteitz 

Added append method to StorelessCovariance, making this class map/reducible. Fixes MATH978. Thanks to Ajo Fod. 
psteitz 

Added method "MathArrays#convolve(double[], double[])" to compute the
discrete, linear convolution of two sequences. Fixes MATH851. Thanks to Clemens Novak. 
tn 

Added lowdiscrepancy random generator "HaltonSequenceGenerator". Fixes MATH977. 
tn 

Added lowdiscrepancy random generator "SobolSequenceGenerator". Fixes MATH826. Thanks to Sam Halliday. 
tn 

Added "GeometricDistribution" to "o.a.c.m.distribution" package. Fixes MATH973. Thanks to Mauro Tortonesi. 
tn 

Added "ParetoDistribution" to "o.a.c.m.distribution" package. Fixes MATH968. Thanks to Alex Gryzlov. 
tn 

Added clarification to the javadoc of "VectorFormat" and derived classes
in case "," is used as a separator. Fixes MATH962. 
tn 

Added "FuzzyKMeansClusterer" to "o.a.c.m.ml.clustering" package. Fixes MATH898. 
tn 

Fixed inconsistent dimensions preventing use of secondary states
in ODE events. Fixes MATH965. 
luc 
Release 3.2  20130406
Type 
Changes 
By 

Fixed wrong array dimensions in secondary equations handling in some cases. Fixes MATH961. 
luc 

Fixed missing side effects of secondary equations on main state in
Ordinary Differential Equations integration. Fixes MATH960. 
luc 

Fixed inverse cumulative probability for uniform distribution. Fixes MATH957. Thanks to Evan Ward. 
luc 

All contents of package "o.a.c.m.stat.clustering" refactored into
new package "o.a.c.m.ml.clustering" and added support for additional
distance measures in package "o.a.c.m.ml.distance": "CanberraDistance",
"ChebyshevDistance", "EuclideanDistance" and "ManhattanDistance". Fixes MATH917,MATH918,MATH919,MATH920. Thanks to Reid Hochstedler. 
tn 

"SpearmansCorrelation" now works correctly in case of a provided
"NaturalRanking" with a "NaNStrategy.REMOVED" strategy and the input
data contains NaN values. From version 4.0 onwards this strategy will
not be supported anymore. Fixes MATH891. 
tn 

Replaced hardcoded numbers in "LevenbergMarquardtOptimizer". Fixes MATH956. 
erans 

Fixed loading of test file when path contains a space. Fixes MATH955. Thanks to Evan Ward. 
luc 

Improved speed of FastMath.abs methods for all signatures, by removing branching. Fixes MATH954. Thanks to Charles Cooper. 
luc 

Improved speed of several FastMath methods. Fixes MATH953. Thanks to Charles Cooper. 
luc 

Fixed Complex.reciprocal() for zero argument. Fixes MATH934. 
luc 

Improved speed of FastMath copysign methods. Fixes MATH951. Thanks to Charles Cooper. 
luc 

Added Multivariate Normal Mixture Model Fitting by Expectation Maximization. Fixes MATH817. Thanks to Jared Becksfort. 
erans 

AbstractRealMatrix will now check for rectangular input arrays in
its copySubMatrix methods. Fixes MATH862. 
tn 

Increment iteration counter in optimization algorithms. Fixes MATH949. 
erans 

Added a way to trigger only increasing or decreasing events in ODE integration. Fixes MATH811. 
luc 

Fixed missing update in ODE event handlers, when a RESET_STATE is triggered. Fixes MATH950. 
luc 

Made EmpiricalDisribution smoothing kernel pluggable. Fixes MATH671. 
psteitz 

Added arrayscaling methods to MathArrays. Fixes MATH946. Thanks to Jared Becksfort. 
psteitz 

Allow direct use of SummaryStatistics in oneway ANOVA. Fixes MATH877. Thanks to Peter Andrews. 
luc 

Fixed infinite loop when NaN occurs in singular value decomposition. Fixes MATH947. 
luc 

Added the Lévy distribution. Fixes MATH460. Thanks to Andrew Waterman. 
luc 

Normal distribution now uses a direct implementation of the
inverse error function to compute inverse cumulative probability
instead of relying on a numerical solver. This is much faster,
more accurate and does not need convergence threshold. 
luc 

Implementations for inverse error function and inverse complementary
error functions have been added. Fixes MATH948. 
luc 

Extended ranges for FastMath performance tests. Fixes MATH580. 
luc 

Finalized implementation of diagonal matrix. Fixes MATH925. 
luc 

Added rank revealing QR decomposition. Fixes MATH630. Thanks to Christopher Nix. 
luc 

ArrayFieldVector can now be constructed from any FieldVector. Fixes MATH570. Thanks to Arne Plöse. 
luc 

Improved checking of null vector elements. Fixes MATH861. Thanks to Sébastien Brisard. 
luc 

Added utilities for prime numbers. Fixes MATH845. Thanks to Sébastien Riou. 
luc 

Fixed generation of long random numbers between two bounds. Fixes MATH936. 
luc 

Fixed creation of generic array. Fixes MATH942. Thanks to Piotr Wydrych. 
luc 

Check bounds in multistart vector optimizers. Fixes MATH914. 
luc 

Added discrete distributions. Fixes MATH941. Thanks to Piotr Wydrych. 
luc 

Fixed abstract test class naming that broke ant builds. Fixes MATH940. Thanks to Piotr Wydrych. 
luc 

Allow covariance to be computed for onedimensional variables. Fixes MATH939. Thanks to Piotr Wydrych. 
luc 

Fixed accuracy of 3D Line.revert(). Fixes MATH938. 
luc 

Improved javadoc to explain how switching functions should
behave across events in ODE events detection. Fixes MATH937. 
luc 

Added Hermite interpolator for RealFieldElement instances. 
luc 

Added RealFieldElement interface to represent anything that is
real number like, implemented by both Decimal64, Dfp and DerivativeStructure. 
luc 

Added partial derivatives computation for 3D vectors and rotations. 
luc 

Fixed DerivativeStructure.atan2 for special cases when both arguments are +/0. Fixes MATH935. 
luc 

Added accurate linear combination of DerivativeStructure instances,
avoiding cancellation. 
luc 

Throw "MathUnsupportedOperationException" from optimizers that do
not support constraints (previous behaviour was to silently ignore
the "SimpleBounds" argument). Fixes MATH933. 
erans 

Added conversion of gradients and Hessians from spherical to Cartesian
coordinates in 3D. 
luc 

Greater efficiency in "UnitSphereRandomVectorGenerator". Fixes MATH931. Thanks to Sean Owen. 
erans 

Improved class javadoc wrt convergence criteria and added
additional constructors to override the default epsilon and cutoff
values in class "SimplexSolver". Fixes MATH930. 
tn 

Fixed truncated value in "MultivariateNormalDistribution". Fixes MATH929. Thanks to Piotr Wydrych. 
erans 

Made "BitStreamGenerator" implement the "Serializable" interface. Fixes MATH927. Thanks to Dennis Hendriks. 
erans 
Release 3.1.1  20130114
Type 
Changes 
By 

Added a (minimal) "DiagonalMatrix" implementation, such that the
case of a large number of uncorrelated observations is handled
efficiently. Fixes MATH924. 
erans 
Release 3.1  20121223
Type 
Changes 
By 

All contents of package "o.a.c.m.optimization" refactored into
new packages "o.a.c.m.optimization" and "o.a.c.m.fitting". Fixes MATH874. 
erans 

Added methods to EmpiricalDistribution to implement the RealDistribution
interface. Fixes MATH672. 
psteitz 

DBSCAN clustering algorithm (in package "o.a.c.m.stat.clustering"). Fixes MATH897. Thanks to Reid Hochstedler. 
tn 

Added elementbyelement addition, subtraction, multiplication and division
(in class "o.a.c.m.util.MathArrays"). Fixes MATH910. 
erans 

Fixed "pow" method in class "FastMath". Fixes MATH904. Thanks to Jeff Hain. 
erans 

Created a "maximum number of iterations" stopping criterion in the
convergence checkers (package "o.a.c.m.optimization") that allows the
optimizers to return the "current best point" even if the convergence
criteria are not met. Fixes MATH902. Thanks to Bruce A. Johnson. 
erans 

Fixed overflow in "sinh" and "cosh" methods in class "FastMath". Fixes MATH905. Thanks to Jeff Hain. 
erans 

Accuracy improvements of Gamma.logGamma, and implementation of
Gamma.gamma. Both new implementations are based on the NSWC
Library of Mathematical Functions. Fixes MATH849. 
celestin 

New constructor in the custom checker classes (package
"o.a.c.m.optimization") for passing the number of iterations
after which the "convergence test" will return true.
This allows an algorithm to return the best solution found (after
the userdefined number of iterations) even if it does not meet the
other convergence criteria. Fixes MATH902. 
erans 

Use "NaNStrategy#FAILED" as default strategy in "NaturalRanking". Fixes MATH906. Thanks to Patrick Meyer. 
tn 

Added a new "SynchronizedRandomGenerator" that wraps another
"RandomGenerator" with all methods being synchronized, thus
rendering the code threadsafe (at some efficiency cost). Fixes MATH899. 
erans 

Add new "NaNStrategy": FAILED, used in "RankingAlgorithm" implementations.
Any encountered input value that succeeds a "Double#isNaN" check, results in a
"NotANumberException". Fixes MATH893. Thanks to Patrick Meyer. 
tn 

Add new constructor to "SpearmansCorrelation" class which allows to specify the
"RankingAlgorithm" to be used. Fixes MATH892. 
tn 

Fixed naming inconsistencies between Interval and IntervalsSet classes. Fixes MATH890. 
luc 

Added a method to check points in the Interval class, with a tolerance for boundary. Fixes MATH889. 
luc 

Added Gtest statistics. Fixes MATH878. Thanks to Radoslav Tsvetkov. 
psteitz 

New "getSquareRoot" method in class "EigenDecomposition" (package
"o.a.c.m.linear"). Fixes MATH883. 
erans 

Added "isSymmetric" and "checkSymmetric" in "MatrixUtils" (package
"o.a.c.m.linear"). Fixes MATH884. 
erans 

Moved private array argument validation methods from ChiSquareTest to MathArrays. Fixes MATH885. 
psteitz 

New class for generic multivariate mixture model distributions. Fixes MATH816. Thanks to Jared Becksfort. 
erans 

Use getter/setter methods of super class for access to field "windowSize" in
"ListUnivariateImpl". Fixes MATH759. Thanks to sebb. 
tn 

Improved construction of polygons with an additional constructor, more robust numerically. Fixes MATH880. 
luc 

Added new methods "merge(Frequency)", "merge(Collection<Frequency>)",
"incrementValue(Comparable<?>, long)" and "entrySetIterator()" to the "Frequency" class. Fixes MATH474. Thanks to Dan Checkoway. 
tn 

Allow unlimited input values for "Dfp#multiply(int)". Fixes MATH778. Thanks to Sébastien Brisard. 
tn 

Added distance to point to 2D Line and Segment. Fixes MATH641. Thanks to Curtis Jensen. 
luc 

"PowellOptimizer" (package "o.a.c.m.optimization.direct") uses
"BrentOptimizer" as its internal line search optimizer. The fix
forces the convergence criterion of "BrentOptimizer" to use
function values (instead of domain values). Fixes MATH783. 
erans 

Numerical accuracy problems arose in "CMAESOptimizer" (in package
"o.a.c.m.optimization.direct") when large finite boundaries were
specified, because the interval of allowed values was mapped to
[0, 1]. This mapping was not necessary and its removal allows
finite and infinite boundaries to be used together. Fixes MATH865,MATH867,MATH868. Thanks to Nikolaus Hansen, Frank Hess. 
erans 

Fixed some issues in nth root derivatives at 0. 
luc 

Fixed transformation to a Schur matrix for certain input matrices. Fixes MATH848. 
tn 

Added matrix "block inversion" (in "o.a.c.m.linear.MatrixUtils"). Fixes MATH860. 
erans 

"CMAESOptimizer": Solution was not constrained to lie within the
provided boundaries. Fixes MATH864. Thanks to Frank Hess. 
erans 

New "Quaternion" class (package "o.a.c.m.complex"). Fixes MATH863. Thanks to Julien Anxionnat. 
erans 

Added method to test for floatingpoint numbers equality with a
relative tolerance (class "o.a.c.m.util.Precision"). Fixes MATH866. Thanks to Yannick Tanguy. 
erans 

Deprecated "FieldVector#getData()" in favor of "toArray()". Fixes MATH666. 
tn 

Fixed an error in rectangular Cholesky decomposition. Fixes MATH789. 
luc 

Clarified definition of isSupportXxxBoundInclusive in RealDistribution
interface, made code consistent with the definition, and deprecated
these methods, marking for removal in 4.0. Fixes MATH859. 
psteitz 

Performance improvement in computation of the greatest common divisor
(in class "o.a.c.m.util.ArithmeticUtils"). Fixes MATH841. Thanks to Sebastien Riou. 
erans 

Added a check so that the returned point will always be the best one. Fixes MATH855. 
erans 

Added a NewtonRaphsonSolver that uses the new differentiation package
to define the function to solve. This class is intended to replace the
former NewtonSolver which is deprecated. 
luc 

Added RandomDataGenerator to replace RandomDataImpl and deprecated
RandomData interface and RandomDataImpl class. Deprecated
nextInversionDeviate methods from RandomDataImpl class. Ensured that
all nextXxx methods in RandomDataImpl/RandomDataGenerator use the
configured RandomGenerator. Fixes MATH850. 
psteitz 

Generate an exception for rare illconditioned cases in "HarmonicFitter"
guessing procedure (package "o.a.c.m.optimization.fitting"). Fixes MATH844. 
erans 

New interface for multivariate distributions.
Added multivariate normal distribution. Fixes MATH815. Thanks to Jared Becksfort. 
erans 

Added a utility method to compute Stirling numbers of the second kind. 
luc 

Added a new package dealing with differentials, for one or more free
parameters and derivation order 1 or higher. 
luc 

Added additional crossover policies: "CycleCrossover", "NPointCrossover",
"OrderedCrossover" and "UniformCrossover". Fixes MATH777. Thanks to Reid Hochstedler. 
tn 

Improved numerical stability of "SimplexSolver" by introducing Bland's rule
to prevent cycling and a cutoff threshold to zero out very small values. Fixes MATH828. 
tn 

Fixed overflow detection for negative values in constructor of class "Fraction". Fixes MATH836. Thanks to Baste Nesse Buanes. 
tn 

Fixed overflow in method "percentageValue" in class "Fraction". Fixes MATH835. Thanks to Baste Nesse Buanes. 
erans 

Raised (to 10) the default number of fractional digits to print out. Fixes MATH622. 
erans 

Removed duplicate code. Fixes MATH762. 
erans 

Added a new "RealMatrixFormat" class for input/output of RealMatrix instances.
Default formatter instances for commonsmath and octave have been added to
"MatrixUtils". Fixes MATH831. 
tn 

New "IterativeLegendreGaussIntegrator" that performs the same automatic
subdivision of the integration interval as "LegendreGaussIntegrator",
but uses the classes from package "o.a.c.m.analysis.integration.gauss"
to perform the Gauss integration on the subinterval.
Deprecated "LegendreGaussIntegrator". Fixes MATH827. 
erans 

Improve performance of quantile evaluation in "Percentile" class for cases
with lots of equal values. Fixes MATH578. 
tn 

New framework for Gauss integration schemes (in package
"o.a.c.m.analysis.integration.gauss").
GaussLegendre quadrature rules (of unlimited order) implemented in
double precision, and high precision (using "BigDecimal"). Fixes MATH797. 
erans 

For all distribution classes (in package "o.a.c.m.distribution"), a new
constructor takes a "RandomGenerator" parameter.
The "RandomDataImpl" instance has been superseded by this RNG.
All "sample()" methods have been modified to use this RNG instead of
delegating to the methods in "RandomData". Fixes MATH764,MATH823. 
erans 

Added support for real asymmetric matrices to "EigenDecomposition". Fixes MATH235. 
tn 

Reinstated methods to find all complex roots of a polynomial (class
"LaguerreSolver" in package "o.a.c.m.analysis.solvers"). Fixes MATH768. 
erans 

Added accessors to the "Pair" class (package "o.a.c.m.util"). Fixes MATH810. 
erans 

Added new constructors in "EigenDecomposition" and deprecated two constructors
with unused parameters. Fixes MATH822. Thanks to Jared Becksfort. 
tn 

Added overridden method in "PolynomialFitter" (package
"o.a.c.m.optimization.fitting") to limit the number of evaluations. Fixes MATH798. 
erans 

Added a new constructor to o.a.c.m.utils.IterationManager, allowing
for the specification of a callback function in case the maximum
number of iteration is reached. Fixes MATH807. 
celestin 

A new HermiteInterpolator class allows interpolation of vectorvalued
functions using both values and derivatives of the function at sample
points. 
luc 

Parameterized "CurveFitter" class (package "o.a.c.m.optimization.fitting")
with the type of the fitting function. Updated subclasses "PolynomialFitter",
"HarmonicFitter", "GaussianFitter". Fixes MATH804. 
erans 

Fixed a problem when building rotations from two pairs of vectors. In very rare cases,
due to numerical inaccuracies the computed quaternion was not normalized (some examples
went as high as 1.0e8) and even after normalization, the quaternion was plain wrong. Fixes MATH801. 
luc 

Removed unused fields LocalizedFormats.ALPHA and LocalizedFormats.BETA. This is
an acceptable compatibility break, as these fields are only meant for internal use. Fixes MATH796. 
celestin 

Fix computation of upperCumulativeProbability in "HypergeometricDistribution" and
cleanup of duplicate probability mass function. Fixes MATH644. Thanks to marzieh. 
tn 

In GammaDistribution, deprecated getAlpha() and getBeta(). Replaced with
getShape() and getScale(), respectively. Fixes MATH791. 
celestin 

Use inline computation for OrderedTuple hash code. Fixes MATH793. Thanks to Sebb. 
luc 

Use modified LentzThompson algorithm for continued fraction evaluation to avoid
underflows. Fixes MATH718. 
tn 

Fixed a wrong assumption on BSP tree attributes when boundary collapses to a too
small polygon at a nonleaf node. Fixes MATH780. 
luc 

Put serialization back for PointValuePair and PointVectorValuePair. Fixes MATH787. 
luc 

Avoid superfluous null check when using iterators in RealVector and ArrayRealVector. Fixes MATH627. Thanks to Arne Plöse. 
tn 

Use epsilon instead of ulp in floatingpoint comparison when dropping columns after
phase 1 in SimplexSolver. Fixes MATH781. Thanks to Scheiber Ernő. 
tn 

Added a workaround for an OpenJDK issue on sparc solaris with too small constants. Fixes MATH721. 
luc 

Fixed ListPopulation#iterator to return an unmodifiable iterator. Fixes MATH779. Thanks to Reid Hochstedler. 
tn 

Cleanup of ListPopulation to consistently enforce the population limit. Fixes MATH775. Thanks to Reid Hochstedler. 
tn 

Use same range check in constructor for ElitisticListPopulation as in corresponding setter. Fixes MATH776. Thanks to Reid Hochstedler. 
tn 

Fixed unbalanced use of code tags in javadoc of several classes. Fixes MATH767. Thanks to Dennis Hendriks. 
tn 

Added class FixedElapsedTime (new StoppingCondition for evolution of generations) to genetics package. Fixes MATH773. Thanks to Reid Hochstedler. 
tn 

Added classes Decimal64 and Decimal64Field, which are wrapper classes around primitive doubles.
These classes implement FieldElement and Field, respectively. Fixes MATH756. 
celestin 
Release 3.0  20120307
Type 
Changes 
By 

Added statistical hypothesis tests "MannWhitneyUTest" and
"WilcoxonSignedRankTest". Fixes MATH431. 
mikl 

Classes "CMAESOptimizer" and "BOBYQAOptimizer" inherit from
"BaseAbstractMultivariateSimpleBoundsOptimizer" (in package
"o.a.c.m.optimization.direct"). Fixes MATH698. 
erans 

Added precomputed arrays to speed up initial loading time for FastMath. Fixes MATH650. 
sebb 

Resources for error messages translations have been moved out of METAINF
folder in the jar, to avoid interferences with some build systems. 
luc 

Fixed "doubleValue" and "floatValue" method in "BigFraction" when
numerator and denominator are larger than the range of the
corresponding primitive type. Fixes MATH744. Thanks to Thundre. 
erans 

Removed "MathException" (from package "o.a.c.math"). Fixes MATH488. 
erans 

Removed "MathRuntimeException" (from package "o.a.c.math"). Fixes MATH459. 
erans 

Merged interface and implementation of statistical tests in
o.a.c.m.stat.inference package. Fixes MATH739. 
tn 

Merged interface and implementation of EmpiricalDistribution. Fixes MATH670. 
tn 

Relaxed test for equality in UnivariateStatisticAbstractTest. Fixes MATH588. 
tn 

Modified the genetics package to use localized exception messages. Fixes MATH575. 
tn 

Fixed a faulty test for zero in TridiagonalTransformer. Fixes MATH652. Thanks to Greg Sterijevski. 
tn 

Changed algorithm in computation of the covariance matrix in
"AbstractLeastSquares" (package "optimization.general"), from
"LUDecomposition" to "QRDecomposition". Fixes MATH664. 
erans 

Fixed rounding error in RandomDataImpl nextInt, nextLong methods causing lower
endpoints to be excluded when negative. Also improved robustness of nextUniform
for extreme values and changed its contract to throw IAE when provided bounds
are infinite or NaN. Fixes MATH724. Thanks to Dennis Hendriks. 
psteitz 

Fixed "offset by one" bug in "BOBYQAOptimizer". Fixes MATH728. Thanks to Bruce A. Johnson. 
erans 

Check first step size in embedded RungeKutta integrators, and truncate it if needed. Fixes MATH727. 
luc 

Modified setSeed methods in Bitstream generators (MersenneTwister and Well
generators) to clear the cache of normal deviates used by nextGaussian. Fixes MATH723. 
psteitz 

Fixed bracketing interval balancing in BracketingNthOrderBrentSolver. Fixes MATH716. 
luc 

Removed unused or duplicate utility methods from "MathUtils".
Math functions with "double" arguments were moved to class "FastMath". Fixes MATH690. 
erans 

Broke up bloated "MathUtils" class into "MathArrays", "Precision",
"ArithmeticUtils" classes. Fixes MATH689. 
erans 

Fixed array indexing error in Variance evaluate method for
computing the weighted variance of an array segment. Fixes MATH704. Thanks to Thomas Neidhart. 
psteitz 

Fixed case of unconstrained variables that still occur in the objective function
in simplex solver. Fixes MATH713. Thanks to Thomas Neidhart. 
luc 

The fast cryptographically secure pseudorandom number generator ISAAC has been added. Fixes MATH710. Thanks to Eldar Agalarov. 
luc 

The reset method in StepHandler interface has been renamed init and is provided
more information on the integration by the calling integrator. A similar init method
has been added to the EventHandler interface. Fixes MATH714. 
luc 

Improved accuracy of RungeKutta based step interpolators near step start. Fixes MATH705. 
luc 

Fixed errors in SummaryStatistics addValue causing variance, mean, or
geometric mean statistics not to be updated if they have been overridden
using instances of commonsmath supplied implementations. Fixes MATH691. 
psteitz 

Removed First, Third, Fourth moments from the public API.
These internally used statistics have nonstandard definitions.
The classes remain, but now have package scope. Fixes MATH694. 
psteitz 

Added support for population variance in StatUtils, SummaryStatistics
and DescriptiveStatistics and clarified javadoc to make it clear that
'variance' means sample variance. Fixes MATH693. 
psteitz 

Fixed BigFraction percentage method which did not work at all. Fixes MATH709. 
luc 

Added interface and abstract class for supporting optimizers classes
that can take simple constraints into account. Fixes MATH697. 
erans 

Fixed a bad interaction between step handlers and event handlers in
ODE integrators. Thanks to MATH706. 
luc 

Added array constructor and getter for Vector2D and Vector3D. Thanks to Jan Kotek. 
luc 

Added applyTo and applyInverseTo methods in the Rotation class that
handle directly arrays instead of Vector3D instances. Thanks to Jan Kotek. 
luc 

Added adapters for simple bound constraints optimization that can be
used for all direct optimization methods, including the ones that do not
support constraints by themselves. Fixes MATH196. 
luc 

CMAES optimizer input sigma is now consistent with boundaries range units. Fixes MATH702. 
luc 

Added stable random generator based on ChambersMallowsStuck method. Fixes MATH462. Thanks to Pavel Ryzhof. 
psteitz 

Changed the default seed used for RandomDataImpl, AbstractWell and MersenneTwister
PRNGs to add the system identity hash code of the instance to the current system
time, so generators initialized with default seeds within system clock resolution
will generate different sequences. Changed the default nonsecure generator used
by RandomDataImpl to Well19937c. Fixes MATH701. 
psteitz 

Fixed an event resetting issue in ODE. Fixes MATH695. 
luc 

Default implementation for "addToEntry" and "multiplyEntry" in
"AbstractRealMatrix". Fixes MATH696. 
erans 

Method "addToEntry" in "RealVector". Fixes MATH685. 
erans 

Replaced temporary matrices and entry mutators with double[][] arrays to speed computation
in loops within QRDecomposition, Bi and TriDiagonalTransformer implementations. Fixes MATH612. Thanks to Christopher Nix. 
psteitz 

Fixed an integer overflow in OpenMapRealMatrix. Fixes MATH679. Thanks to Christopher Berner. 
luc 

"FastMath": Use constant fields instead of recomputing them at method
call. Fixes MATH688. 
erans 

Added Jacobi polynomials. Fixes MATH687. Thanks to Romain di Costanzo. 
luc 

Added "shift" method to compute the coefficients of a new polynomial
whose values are the same as those of another polynomial but computed
at a shifted point. Fixes MATH683. Thanks to Romain di Costanzo. 
erans 

Faster "multiply" method in "Array2DRowRealMatrix". Code inspired
from the Jama project. Fixes MATH676. 
erans 

Replaced package.html with packageinfo.java for package documentation. Fixes MATH445. 
luc 

Added a getRuntimeClass method to the Field interface allowing to use a
complete hierarchy of fields sharing a common interface. Fixes MATH284. Thanks to Klaus Hartlage. 
luc 

The last remaining uses of OptimizationException have been replaced by unchecked
exceptions (UnboundSolutionException, NoFeasibleSolutionException,
MaxCountExceededException ...) Fixes MATH457. 
luc 

The checked ConvergenceException has been replaced by an unchecked ConvergenceException. Fixes MATH487. 
luc 

ODE step interpolation with Jacobians is now fully merged with
classical step interpolation. Fixes MATH381. Thanks to Pascal Parraud. 
luc 

Completely revamped the computation of Jacobians in ODE. This computation is now
included in the mainstream class hierarchy, not in a separate package anymore,
and it allows adding other types of equations to a main ODE, not only variational
equations for Jacobians computation. Fixes MATH380. Thanks to Pascal Parraud. 
luc 

SimpleRegression implements UpdatingMultipleLinearRegression interface. Fixes MATH607. 
gregs 

Added isMonotone methods in MathUtils. Optimized checkOrder method. Fixes MATH675. 
gregs 

In class "AbstractLeastSquaresOptimizer": Allow to specify a singularity
threshold in call to "getCovariances" method. Fixes MATH664. 
erans 

Added the ability to suppress the estimation of the intercept in SimpleRegression. Fixes MATH649. 
gregs 

Dead code in FastMath.pow(double, double) and some improvement in test coverage. Fixes MATH658. Thanks to Yannick TANGUY. 
sebb 

Removed "getData()" method from "RealVector" as it was redundant with
"toArray()". Fixes MATH663. 
erans 

Removed completely MathUserException. Fixes MATH195. 
luc 

Use the refactored exceptions framework for ODE. Fixes MATH488. 
luc 

Added a getter to allow retrieving the exception related to an exception context
provider. 
luc 

Added erf(double,double) to Erf and used this to improve tail probability
accuracy in NormalDistributionImpl. Fixes MATH364. Thanks to Christian Winter. 
psteitz 

Enabled reseeding of the random generators used by EmpiricalDistributionImpl
and ValueServer. Modified ValueServer to pass its RandomData instance to
the EmpiricalDistributionImpl that it creates when used in DIGEST_MODE, so
reseeding ValueServer works as expected. Fixes MATH654. 
psteitz 

Renamed "AbstractRealVector" to "RealVector". The interface was removed
in favour of its unique (abstract) implementation. Also removed several
methods with double[] arguments from AbstractRealVector. Fixes MATH653. 
erans 

Unmodifiable view of a "RealVector". Fixes MATH646. Thanks to Sébastien Brisard. 
erans 

Refactored integration API for consistency with solvers API. Now the main convergence
parameters are set in the constructor and remain fixed. Fixes MATH501. 
luc 

Added a maximal number of function evaluations to the integration method, similar
to what is done in the solvers API. Fixes MATH464. 
luc 

Added storeless covariance implementation. Fixes MATH449. Thanks to Patrick Meyer. 
psteitz 

Eliminated extraneous constructor from SimpleRegression. Fixes MATH648. 
psteitz 

Eliminated pluggability of ChiSquaredDistribution used by ChiSquaredDistributionTest. Fixes MATH506. 
psteitz 

Made RandomGenerator configurable and reseedable in EmpiricalDistributionImpl. Fixes MATH634. 
psteitz 

Added a 3D SubLine class. Fixes MATH593. 
luc 

Fixed exceptions generated by "ebeMultiply" and "ebeDivide" in "OpenMapRealVector". Fixes MATH645. 
erans 

In "SingularValueDecompositionImpl", added accessor for the inverse of the condition number. Fixes MATH602. Thanks to Greg Serijevski. 
erans 

Made pseudoinverse consistent with rank computation in SingularValueDecompositionImpl. Fixes MATH601. Thanks to Chris Nix and Greg Serijevski. 
psteitz 

Added methods to solve upper and lower triangular systems to MatrixUtils. Fixes MATH624. Thanks to Greg Sterijevski. 
psteitz 

Improved performance of nextInt(int) in BitsStreamGenerator. Fixes MATH642. 
psteitz 

Fixed a wrong detection of rotation axis versus vectors plane in Rotation constructor
using two vectors pairs. Fixes MATH639. 
luc 

Added a few linearCombination utility methods in MathUtils to compute accurately
linear combinations a1.b1 + a2.b2 + ... + an.bn taking great care to compensate
for cancellation effects. This both improves and simplify several methods in
euclidean geometry classes, including linear constructors, dot product and cross
product. 
luc 

Fixed bugs in AbstractRandomGenerator nextInt() and nextLong() default
implementations. Prior to the fix for this issue, these methods
generated only positive values. Fixes MATH640. 
psteitz 

Simple benchmark utility (new class "PerfTestUtils" added to test sources in src/test). Fixes MATH637. 
erans 

Added a solver for Dfpbased (i.e. high accuracy) functions. Fixes MATH636. 
luc 

Added a Brentlike solver that has higher (user specified) order and does
bracket selection on the result: BracketingNthOrderBrentSolver. Fixes MATH635. 
luc 

Added a few shortcut methods and predicates to Dfp (abs, isZero,
negativeOrNull, strictlyNegative, positiveOrNull, strictlyPositive). 
luc 

"AbstractRealMatrix" inherits from "RealLinearOperator". Fixes MATH633. Thanks to Sébastien Brisard. 
erans 

Linear combination of vectors: "RealVector" interface updated, implemented
in "AbstractRealVector" and "ArrayRealVector". Fixes MATH613. Thanks to Sébastien Brisard. 
erans 

Slightly more efficient implementation of basic operations in
"ArrayRealVector". Fixes MATH623. Thanks to Arne Plöse. 
erans 

Overloaded methods (add, subtract, multiply, divide) to take a "double" parameter
(as a complex number with zero imaginary part).
Code and Javadoc cleanup.
Added "valueOf" methods. Fixes MATH577. Thanks to Arne Plöse. 
erans 

Implemented faster generation of random gamma distributed values with
algorithm from Ahrens and Dieter (1972) for shape < 1 and
Marsaglia and Tsang (2001) otherwise. Fixes MATH585. 
mikl 

Allow discrete events to be detected by ODE solvers also at step start. Fixes MATH605. Thanks to Dennis Hendriks. 
luc 

Rewritten SVD decomposition based on JAMA code. Fixes MATH327,MATH383,MATH465,MATH583,MATH611. Thanks to Christopher Nix. 
luc 

Complex add javadoc says that if either addend has NaN parts, the result
should be Complex.NaN. Prior to the fix for this issue, NaNs were propagated
only in real and imaginary parts individually. Fixes MATH618. Thanks to Arne Plose. 
psteitz 

Framework for iterative linear solvers. Fixes MATH581. Thanks to Sébastien Brisard. 
erans 

Improved efficiency in RandomDataImpl, LaguerreSolver, FastMath and OutlineExtractor by
moving conditional code into blocks where it is needed. Fixes MATH609. Thanks to Dave Brosius. 
psteitz 

Prevent step normalizer to output twice the last point in MULTIPLES mode. Fixes MATH603. Thanks to Dennis Hendriks. 
luc 

Removed the requiresDenseOutput method from the StepHandler interface. Now integrators always
consider dense output is required and set up the appropriate state interpolators, so step
handlers can rely on them. Fixes MATH596,MATH604. 
luc 

Modified "SecantSolver" to comply with the original algorithm. Added several
secantbased solvers. Added a way to select the side of the root with bracketing
solvers. Fixes MATH599. Thanks to Dennis Hendriks. 
erans 

Fixed javadoc for ODEIntegrator interface Fixes MATH600. 
luc 

Extended StepNormalizer with normalization mode and bounds settings. Fixes MATH595. Thanks to Dennis Hendriks. 
luc 

Implemented faster generation of random exponential distributed values with
algorithm from Ahrens and Dieter (1972): Computer methods for sampling
from the exponential and normal distributions. Fixes MATH597. 
mikl 

Kmeans++ clustering can now run multiple trials Fixes MATH548. 
luc 

Added a way to compute sublines intersections, considering sublines either
as open sets or closed sets Fixes MATH591. 
luc 

Added a way to build a subline from its endpoints, and to retrieve the endpoints
from a subline Fixes MATH592. 
luc 

Javadoc fixes in ODE. Fixes MATH594. Thanks to Dennis Hendriks. 
luc 

Added a way to specify a custom root solver to find events in ODE integration. Fixes MATH586. Thanks to Dennis Hendriks. 
luc 

Fixed error in javadoc describing Integer distribution inverse cumulative
probability API. Fixes MATH540. 
psteitz 

Fixed error in javadoc describing the behavior of the Percentile algorithm for
small percentiles in small datasets. Fixes MATH582. Thanks to Christopher Nix. 
psteitz 

New "filter" package. Initial implementation of Kalman filter. Fixes MATH485. Thanks to Thomas Neidhart. 
erans 

Improved kmeans++ clustering performances and initial cluster center choice. Fixes MATH584. Thanks to Randall Scarberry. 
luc 

Fixed tricube function implementation in Loess interpolator. Fixes MATH504. Thanks to X. B.. 
luc 

Fixed documentation of statistics examples. Fixes MATH568. Thanks to Christoph M. Friedrich. 
luc 

Improved documentation of general optimization with a thorough example. Fixes MATH507. Thanks to Ole Ersoy. 
luc 

Replaced NullPointerException by NullArgumentException. Fixes MATH403. 
luc 

Added a consistent classes hierarchy for Euclidean spaces in dimension 1, 2 and 3. 
luc 

Improved javadoc for FastMath explaining the overhead at class loading and
the targeted use cases. Fixes MATH579. 
luc 

Allow outer product of vectors of different sizes. Fixes MATH574. 
erans 

A complete generic implementation of Binary Space Partitioning Trees (BSP trees)
has been added. A few specializations of this implementation are also provided
for 1D, 2D and 3D Euclidean geometry. This allows support for arbitrary
intervals sets (1D), polygons sets (2D) and polyhedrons sets (3D) with all
sets operations (union, intersection, symmetric difference, difference, complement),
with predicates (point inside/outside/on boundary, emptiness, other region contained),
with geometrical computation (barycenter, size, boundary size) and with conversions
from and to boundary representation. Fixes MATH576. 
luc 

Avoid some array copying in add and subtract ArrayFieldVector. Fixes MATH573. 
luc 

Fixed an unused constructor parameter in ArrayFieldVector. Fixes MATH572. 
luc 

Created an "ExceptionContext" class: It provides the customization feature of
"MathRuntimeException" without imposing a singly rooted hierarchy of the Comons
Math exceptions.
Thus, those exceptions now inherit from their Java standard counterparts (e.g.
"MathIllegalArgumentException" inherits from "IllegalArgumentException"). Fixes MATH566. 
erans 

Fixed conversion problems to/from 0 in Decimal Floating Point (Dfp) class. Fixes MATH567. Thanks to Michel. 
luc 

Fixed initialization of multistep ODE integrators. Relying on the interpolation model
of the starter integrator inside only one step was wrong. The model may have a too
low order to compute high degrees derivatives in the Nordsieck vector. Now we use several
steps and use only grid points instead of interpolated points. 
luc 

Added solve methods using double[][] to linear algebra decomposition solvers. Fixes MATH564. 
luc 

Added an interpolator adapter for data with known period. Fixes MATH562. 
erans 

Added a "rectangular" Cholesky decomposition for positive semidefinite matrices. Fixes MATH541. 
luc 

Added setters allowing to change the step size control parameters of adaptive
step size ODE integrators. Fixes MATH563. 
luc 

Added a compareTo method to MathUtils that uses a number of ulps as a
tolerance error, and works well on all numbers, including normals, subnormals,
signed zeroes, infinities and NaNs. Fixes MATH557. 
luc 

Fixed two errors in simplex solver when entries are close together or
when variables are not restricted to nonnegative. Fixes MATH434. Thanks to Thomas Neidhart. 
luc 

Improved robustness of kmeans++ algorithm, by tracking changes in points assignments
to clusters. Fixes MATH547. Thanks to Thomas Neidhart. 
luc 

Changed MathUtils.round(double,int,int) to propagate rather than
wrap runtime exceptions. Instead of MathRuntimeException, this method
now throws IllegalArgumentException or ArithmeticException under
the conditions specified in the javadoc. Fixes MATH555. 
psteitz 

Reduced cancellation errors in Vector3D.crossProduct Fixes MATH554. 
luc 

Fixed bug in "MultidimensionalCounter". Fixes MATH552. Thanks to James Bence. 
erans 

All unit tests have been converted to Junit 4. They need at least Junit 4.5 to run
(the ant and maven build systems are currently set to use Junit 4.8.2) Fixes MATH423. Thanks to Gilles Sadowski. 
luc 

Removed the ConvergingAlgorithm interface and ConvergingAlgorithmImpl class Fixes MATH500. Thanks to Gilles Sadowski. 
luc 

Added a consistency check for number of points with respect to the number
of clusters in Kmeans++ clustering Fixes MATH436. Thanks to Thomas Neidhart. 
luc 

Added two sided KolmogorovSmirnov distribution using modified
Marsaglia et al. (2003) implementation and quick decisions for certain
parameter areas according to Simard et al. (2011). Fixes MATH437. 
mikl 

Added "power" method in "RealMatrix" and "FieldMatrix<T>"
interfaces and their default implementations in "AbstractRealMatrix"
and "AbstractFieldMatrix". Fixes MATH435. 
mikl 

Added "cosine" method in "RealVector" interface and default implementation
in "AbstractRealVector". Fixes MATH545. 
erans 

Fixed bug in "KMeansPlusPlusClusterer". Fixes MATH546. Thanks to Nate Paymer. 
erans 

All exceptions defined in Commons Math provide a context and a compound
message list. Fixes MATH542. 
erans 

Refactored "PolynomialFitter" (in package "optimization.fitting").
Added parametric function in "PolynomialFunction" (in package
"analysis.polynomials"). Fixes MATH534. 
erans 

Removed "HarmonicFunction" (in package "optimization.fitting");
superseded by class "HarmonicOscillator" (in package "analysis.function"). Fixes MATH518. 
erans 

Refactored "HarmonicFitter" (in package "optimization.fitting").
"HarmonicCoefficientsGuesser" removed. Fixes MATH517. 
erans 

Removed "GaussianFunction" and "GaussianDerivativeFunction" (in package
"optimization.fitting"); functionality moved to class "Gaussian" (in
package "analysis.function"). Fixes MATH516. 
erans 

Removed "ParametricGaussianFunction" (in package "optimization.fitting");
functionality moved to class "Gaussian" (in package "analysis.function"). Fixes MATH514. 
erans 

Refactored "GaussianFitter" (in package "optimization.fitting").
The class now really fits a Gaussian function (whereas previously it was
fitting the sum of a constant and a Gaussian). Fixes MATH512. Thanks to Ole Ersoy. 
erans 

Implementation of the CMAES optimization algorithm. Fixes MATH442. Thanks to Dietmar Wolz. 
erans 

The interface "ParametricRealFunction" (in package "optimization.fitting") has
been renamed to "ParametricUnivariateRealFunction" and moved to package "analysis". Fixes MATH513. 
erans 

TestUtils is threadhostile. Remove getters and setters, and make static variables final. Fixes MATH505. 
sebb 

Create FastMath copySign methods Fixes MATH496. 
sebb 

FastMath atan2 does not agree with StrictMath for special cases Fixes MATH494. 
sebb 

Removed checked "MaxIterationsExceededException" (superseded by
"MaxCountExceededException" from package "exception"). Fixes MATH492. 
erans 

Removed checked "DimensionMismatchException". Replaced all occurrences by its
equivalent from package "exception". Fixes MATH491. 
erans 

FastMath acos fails when input abs value is less than about 5.7851920321187236E300  returns NaN Fixes MATH489. 
sebb 

FastMath toRadian and toDegree don't handle large double numbers well Fixes MATH486. 
sebb 

FastMath does not handle all special cases correctly Fixes MATH483. 
sebb 

Fix ulp(Infinity) to return Infinity rather than NaN Fixes MATH480. 
sebb 

FastMath.signum(0.0) does not agree with Math.signum(0.0) Fixes MATH479. 
sebb 

FastMath is not an exact replacement for StrictMath
(partially fixed) Add signum(float), ulp(float) Fixes MATH478. 
sebb 

FastMath.max(50.0f, 50.0f) => 50.0f; should be +50.0f
Fixed FastMath.max(float, float) so it returns correct value. Fixes MATH482. 
sebb 

MATH491 MathUtils.equals(double, double) does not work properly for floats
 add equivalent (float, float) methods and basic tests Fixes MATH471. 
sebb 

Removed "MathException" from the "throws" clause of the "interpolate" method
of the interpolators interfaces (package "analysis.interpolation"). Fixes MATH458. 
erans 

In order to comply with the new runtime exceptions policy, the classes
"RealVectorFormat", "ComplexFormat", "Vector3DFormat" and "CompositeFormat"
do not inherit anymore from the Java standard "Format" class. Failed parsing
will result in the throwing of a "MathParseException".
"CompositeFormat" is now a utility class ("private" constructor). Fixes MATH461. 
erans 

By policy, all Commons Math exceptions must inherit from class
"MathRuntimeException". Fixes MATH447. 
erans 

For optimizers (package "optimization"), the number of allowed function
evaluations is passed as a parameter to the "optimize" method. Fixes MATH454. 
erans 

For solvers (package "analysis.solvers"), the number of allowed function
evaluations is passed as a parameter to the "solve" method. Fixes MATH451. 
erans 

Created a "MathRuntimeException" to serve as a base class for exception
types that need to wrap another (lowerlevel) exception. Fixes MATH447. 
erans 

Replaced "ComposableFunction" and "BinaryFunction" (in package "analysis")
by a set of utilities in the new class "FunctionUtils" together with
independent function objects in the new "analysis.function" package.
Removed redundant "mapXxx" and "mapXxxToSelf" methods in "RealVector" and
"AbstractRealVector" (in package "linear"). Fixes MATH430. 
erans 

Refactoring of the "analysis.solvers" package. Fixes MATH439. 
erans 

Removed the ode.jacobians package. Fixes MATH380. 
luc 

Removed classes "FunctionEvaluationException", "MatrixVisitorException"
and "DerivativeException" (superseded by the new "MathUserException"). Fixes MATH440. 
erans 

Created a generic "Pair" class to replace the "AbstractMap.SimpleEntry"
that is only available in Java 6 and later. Fixes MATH432. 
erans 

Class "DirectSearchOptimizer" (and subclasses "NelderMead"
and "MultiDirectional") was refactored into new classes:
"SimplexOptimizer" and "AbstractSimplex" (and subclasses
"NelderMeadSimplex" and "MultiDirectionalSimplex"). The old
classes were deprecated and removed. Fixes MATH428. 
erans 

Created "MatrixDimensionMismatchException" to replace
"InvalidMatrixException" (when the latter is used to signal that
matrices are not compatible for some operation).
Replaced "MatrixIndexException" with "OutOfRangeException" (when the
former is used to signal a row or column dimension mismatch). Fixes MATH425. 
erans 

Made "sample" methods part of the "IntegerDistribution" and
"ContinuousDistribution" interfaces. Fixes MATH310. 
erans 

All distribution classes (in package "distribution") are immutable. Fixes MATH349. 
erans 

Created an unchecked "FunctionEvaluationException".
Modified the "UnivariateRealFunction" interface: Removed the checked
"FunctionEvaluationException" from the signature of the "value" method. Fixes MATH195. 
erans 

Modified semantics: "equals" methods now consider that NaNs are not
equal (compliant with IEEE754).
Also, two adjacent floating point numbers are considered equal (this
is consistent with the fact that all real numbers between them can be
represented by either of the two). One consequence of that is that
"equals" is not transitive. Fixes MATH370. 
erans 

Removed methods referring to the concept of "iteration".
Removed interface methods to access the number of evaluations of the
gradient and Jacobian.
Added new "Incrementor" utility to be used as a bounded counter for
objective function evaluations.
Removed all references to "OptimizationException" (replaced by
"ConvergenceException"). Fixes MATH397. 
erans 

Modified "AbstractUnivariateRealOptimizer" to make it more similar to
"BaseAbstractScalarOptimizer".
Added utility methods in "ConvergingAlgorithmImpl". Fixes MATH397. 
erans 

Refactoring of some classes in package "optimization.general" to remove
code duplication and to allow the implementation of optimization algorithms
that do not use derivatives.
Created interface "BaseMultivariateRealOptimizer".
Created classes "BaseAbstractScalarOptimizer" and "AbstractScalarOptimizer".
"MultivariateRealOptimizer" and "DifferentiableMultivariateRealOptimizer"
both extend "BaseMultivariateRealOptimizer".
"AbstractScalarOptimizer" extends "BaseAbstractScalarOptimizer" and
"AbstractScalarDifferentiableOptimizer" inherits from "AbstractScalarOptimizer". Fixes MATH389. 
erans 
Release 2.2  20110302
Type 
Changes 
By 

FastMath is not an exact replacement for StrictMath
(partially fixed) added scalb(double, int), scalb(float, int) Fixes MATH498. 
luc 

FastMath is not an exact replacement for StrictMath
(partially fixed) added hypot(double, double), nextAfter(double, double)
and nextAfter(float,double) (beware of the strange double second argument)
so that they handle special values in the way as StrictMath Fixes MATH478. 
luc 

FastMath is not an exact replacement for StrictMath
(partially fixed) added getExponent(double) and getExponent(float) Fixes MATH497. 
luc 

FastMath is not an exact replacement for StrictMath
(partially fixed) Add copySign(double), copySign(float) Fixes MATH496. 
sebb 

separate discrete event detection from adaptive step size handling in ODE solvers,
thus improving robustness, maintainability and speed Fixes MATH484. 
luc 

Fixed an awkward statement that triggered a false positive warning. Fixes MATH467. 
luc 

Added complementary error function, erfc. Fixes MATH364. Thanks to Christian Winter. 
psteitz 

Modified erf (and erfc) to return extreme values for x with abs(x) > 40.
For these arguments, the true value is indistinguishable from an extrema as a double. Fixes MATH456. 
psteitz 

Added characteristic support to distributions, including methods to return numerical
estimates of the mean and variance and upper and lower bounds of support. In version 2.2,
methods returning distribution characteristics have been added only to the implementation
classes. In version 3, supporting methods have been added to the abstract base classes
and distribution interfaces. Fixes MATH385. 
mikkel 

Added a constructor and addValues(double[]) methods allowing DescriptiveStatistics to
be initialized with values from a double[] array. Similarly enhanced
ResizeableDoubleArray. Fixes MATH384. 
mikkel 

Added a getUniqueCount() method to Frequency to return the number of unique
values included in the frequency table. Fixes MATH448. Thanks to Patrick Meyer. 
psteitz 

Modified NormalDistributionImpl.cumulativeProbability to return 0 or 1,
respectively for values more than 40 standard deviations from the mean.
For these values, the actual probability is indistinguishable from 0 or 1
as a double. Top coding improves performance for extreme values and prevents
convergence exceptions. Fixes MATH414. 
psteitz 

Added toString() override to StatisticalSummaryValues. Fixes MATH420. 
psteitz 

Deprecated the whole ode.jacobians package. It is clumsy and difficult to use. It will
be replaced by a completely rewritten implementation in 3.0, which will be more tightly
bound to the top level ode package Fixes MATH380. 
luc 

Added a normalization feature to transform samples so they have zero mean and unit standard deviation Fixes MATH426. Thanks to Erik van Ingen. 
luc 

Created "MathUserException" class to convey cause of failure between
layers of user code separated by a layer of Commons Math code. Deprecated
classes "FunctionEvaluationException", "MatrixVisitorException" and
"DerivativeException". Fixes MATH440. 
erans 

Fixed kmeans++ to add several strategies to deal with empty clusters that
may appear during iterations. Fixes MATH429. 
luc 

Improved Percentile performance by using a selection algorithm instead of a
complete sort, and by allowing caching data array and pivots when several
different percentiles are desired. Fixes MATH417. 
luc 

Fixed an error preventing zero length vectors to be built by some constructors. Fixes MATH391. 
luc 

Fixed an error preventing ODE solvers to be restarted after they have
been stopped by a discrete event. Fixes MATH421. 
luc 

Added new random number generators from the Well Equidistributed
Longperiod Linear (WELL). Fixes MATH419. 
luc 

Made intercept / no intercept configurable in multiple regression
classes. By default, regression models are estimated with an intercept
term. When the "noIntercept" property is set to true, regression models
are estimated without intercepts. Fixes MATH409. 
psteitz 

Fixed lost cause in MathRuntimeException.createInternalError. Note that
the message is still the default message for internal errors asking to
report a bug to Commons Math JIRA tracker. In order to retrieve the
message from the root cause, one has to get the cause itself by getCause(). Fixes MATH415. 
luc 

Modified multiple regression newSample methods to ensure that by default
in all cases, regression models are estimated with intercept terms.
Prior to the fix for this issue, newXSampleData(double[][]),
newSampleData(double[], double[][]) and newSampleData(double[], double[][], double[][])
all required columns of "1's" to be inserted into the x[][] arrays to
create a model with an intercept term; while newSampleData(double[], int, int)
created a model including an intercept term without requiring the
unitary column. All methods have been changed to eliminate the need for
users to add unitary columns to specify regression models.
Users of OLSMultipleLinearRegression or GLSMultipleLinearRegression
versions 2.0 or 2.1 should either verify that their code either does
not use the first set of data loading methods above or set the noIntercept
property on estimated models to get the previous behavior. Fixes MATH411. 
psteitz 

Added the dfp library providing arbitrary precision floating point computation in the spirit of
IEEE 8541987 (not exactly as it uses base 1000 instead of base 10). In addition to finite numbers,
infinities and NaNs are available (but there are no subnormals). All IEEE 8541987 rounding modes and
signaling flags are supported. The available operations are +, , *, / and the available functions
are sqrt, sin, cos, tan, asin, acos, atan, exp, log. Fixes MATH412. Thanks to Bill Rossi. 
luc 

Added faster and more accurate version of traditional mathematical functions in a FastMath
class intended to be a dropin replacement for java.util.Math at sourcelevel. Some functions
still directly delegates to Math but this will improve with time. Some functions like exp
may be twice as fast (even 3 times faster on some processors). Sine, cosine or power functions
show typical speedups of 1.5 times faster or more. Fixes MATH375. Thanks to Bill Rossi. 
luc 

Added Rsquared and adjusted Rsquared statistics to OLSMultipleLinearRegression. Fixes MATH386. 
psteitz 

Corrected the formula used for Y variance returned by calculateYVariance and associated
methods in multiple regression classes (AbstractMultipleLinearRegression,
OLSMultipleLinearRegression, GLSMultipleLinearRegression). These methods previously returned
estimates of the variance in the model error term. New "calulateErrorVariance" methods have
been added to compute what was previously returned by calculateYVariance. Fixes MATH392. Thanks to Mark Devaney. 
psteitz 

Bug fixed in LevenbergMarquardt (handling of weights). Fixes MATH406. 
dimpbx 

Bug fixed in LevenbergMarquardt (consistency of current). Fixes MATH405. 
dimpbx 

Bug fixed in chisquare computation in AbstractLeastSquaresOptimizer. Fixes MATH377. 
dimpbx 

Added support for Gaussian curve fitting. Fixes MATH400. Thanks to J. Lewis Muir. 
luc 

Fixed several bugs in "BrentOptimizer". Fixes MATH395. 
erans 

Fixed inconsistency in return values in "MultiStartUnivariateRealOptimizer". Fixes MATH393. 
erans 

Added a feature allowing error estimation to be computed only on a subset of
Ordinary Differential Equations, considered as the main set, the remaining equations
being considered only as an extension set that should not influence the ODE integration
algorithm Fixes MATH388. 
luc 

Fixed bug in precondition check (method "setMicrosphereElements"). Fixes MATH382. 
erans 

Created "MultidimensionalCounter" class. Fixes MATH379. 
erans 

Created package "exception" to contain the new exceptions hierarchy.
Created package "exception.util": utilities for the exception classes
(e.g. managing the localization of error messages).
Default policy for dealing with invalid null references: raise a
"NullArgumentException" (subclass of "IllegalArgumentException"). Fixes MATH361. 
erans 

Implementation of linear interpolation. Fixes MATH378. Thanks to Matthew Rowles. 
erans 

Improved localization of error messages. Fixes MATH361. 
luc 

Allow multiple optimizations with a default simplex. Fixes MATH376. 
erans 

Added new "equalsIncludingNaN" methods that have the same semantics as the old "equals" methods.
These are deprecated, and their semantics will be modified (in the next major release) such that
NaNs are not considered equal (to be more compliant with IEEE754). Fixes MATH370. 
erans 

Added a setQRRankingThreshold method to LevenbergMarquardt optimizer to improve robustness
of rank determination. Fixes MATH352. 
luc 

Added random data generation methods to RandomDataImpl for the remaining distributions in the
distributions package. Added a generic nextInversionDeviate method that takes a discrete
or continuous distribution as argument and generates a random deviate from the distribution.
Also added sampling methods based on the implementations in RandomDataImpl to distributions. Fixes MATH310. 
psteitz 

Fixed LevenbergMarquardt optimizer that did not use the vectorial convergence checker.
Now this optimizer can use either the general vectorial convergence checker or its own
specialized convergence settings. Fixes MATH362. 
luc 

Fixed loss of significance error in PersonsCorrelation pvalue computation causing pvalues
smaller than the machine epsilon (~1E16) to be reported as 0. Fixes MATH371. Thanks to Kevin Childs. 
psteitz 

Fix NullPointerException in BisectionSolver.solve(f, min, max, initial) Fixes MATH369. Thanks to Sasun Pundev. 
luc 

Fix spelling of getSparcity [sic] method of OpenMapRealVector Fixes MATH368. 
billbarker 

Fix problem with the default sparseIterator when a RealVector has exactly one nonzero entry Fixes MATH367. Thanks to Albert Huang. 
billbarker 

Implementation of tricubic interpolation. Fixes MATH366. 
erans 

Deprecated SmoothingBicubicSplineInterpolator and SmoothingBicubicSplineInterpolatorTest.
Added BicubicSplineInterpolator and BicubicSplineInterpolatorTest.
Added SmoothingPolynomialBicubicSplineInterpolator and SmoothingPolynomialBicubicSplineInterpolatorTest.
Added method to clear the list of observations in PolynomialFitter. Fixes MATH365. 
erans 
Release 2.1  20100402
Type 
Changes 
By 

Fix use of wrong variable in SmoothingBicubicSplineInterpolatorTest.testPreconditions() Fixes MATH360. 
sebb 

Added method to clear the list of observations in CurveFitter. Fixes MATH356. 
erans 

Implementation of bicubic interpolation. Fixes MATH357. 
erans 

Added density functions to remaining continuous distributions (F, T, Weibull, Cauchy).
As of Math 2.1, all continuous distributions implement density functions. The HasDensity
interface has been deprecated and in version 3.0, density(double) will be added to the
ContinuousDistribution interface. Fixes MATH332. Thanks to Mikkel Meyer Andersen. 
psteitz 

Changed equals() methods to use instanceof check rather than catching ClassCastException;
this also allows some null checks to be omitted. Fixes MATH337. 
sebb 

Removed unnecessary null checks in equals methods. Fixes MATH336. 
sebb 

Fraction.hashCode() implementation was not fully consistent with Fraction.equals().
Changed hashCode() to use fields directly to agree with equals(). Fixes MATH335. 
sebb 

Resolved multiple problems leading to inaccuracy and/or failure to compute Normal,
ChiSquare and Poisson probabilities, Erf and Gamma functions. Made Brent solver
absolute accuracy configurable for all continuous distributions. Fixes MATH282. 
psteitz 

Fixed too stringent interval check in Brent solver: initial guess is now
allowed to be at either interval end Fixes MATH347. 
luc 

Added a way to compute both the final state in an Initial Value Problem (IVP)
for Ordinary Differential Equations (ODE) and its derivatives with respect to
initial state and with respect to some problem parameters. This allows wrapping
ODE solvers into optimization or root finding algorithms, which in turn can be
used to solve Boundary Value Problems (BVP). There are no implementations (yet)
of BVP solvers in the library. 
luc 

Fixed an error in events handling in ODE solvers. In some rare cases, events
occurring close to a step start were handled without truncating the step, making
them appear as is they occurred close to the step end Fixes MATH358. 
luc 

Fixed a problem with getInterpolatedDerivatives returning zero derivatives when
an ODE step handler is configured to not use interpolation. It now returns a
constant but nonzero value consistent with at least one point inside the step 
luc 

Fixed wrong return values when enpoints are roots in Brent solver with
a user provided initial guess Fixes MATH344. 
luc 

Fixed a missing bracketing check of initial interval in Brent solver. Fixes MATH343. 
luc 

In SVD, the matrices passed to EigenDecomposition are now symmetric
by construction (rather than simply by definition). In EigenDecomposition,
once the tridiagonal form is obtained, the nonsignificant elements are
set to 0. Fixes MATH342. 
dimpbx 

A EigenDecompositionImpl simplified makes it possible to compute
the SVD of a singular matrix (with the right number of elements in
the diagonal matrix) or a matrix with singular value(s) of multiplicity
greater than 1. Fixes MATH333. 
dimpbx 

Added SemiVariance statistic. Fixes MATH323. Thanks to Larry Diamond. 
psteitz 

Added a warning in the getCoefficients method documentation for
PolynomialFunctionLagrangeForm. Computation may be illconditioned
so this method should be used with care. Fixes MATH341. 
luc 

Fixed an error in BigFraction multiplication for large numerators that don't
fit in a primitive int. Fixes MATH340. 
luc 

Fixed a spurious exception in EigenDecompositionImpl when a 3x3 block
had two identical eigenvalues. 
luc 

Added min/max getters for real vectors (not yet in the RealVector interface for
compatibility purposes, but in the AbstractRealVector abstract class). Fixes MATH334. 
luc 

Fixed automatic step initialization in embedded RungeKutta integrators.
The relative tolerance setting was never used, only the absolute tolerance
was used. Fixes MATH338. Thanks to Vincent Morand. 
luc 

Fixed regression in Frequency.getPct(Object) introduced in 2.0. Cumulative
percent was being returned for Object arguments in place of percent. Fixes MATH329. 
psteitz 

Singular Value Decomposition now computes either the compact SVD (using only
positive singular values) or truncated SVD (using a userspecified maximal
number of singular values). Fixes MATH321. 
luc 

Fixed Singular Value Decomposition solving of singular systems. Fixes MATH320. 
luc 

Added MathUtils methods to compute gcd and lcm for long arguments. Fixes MATH239. Thanks to Christian Semrau. 
psteitz 

Added support for weighted univariate statistics. Fixes MATH287. Thanks to Matthew Rowles. 
psteitz 

Fixed a wrong implementation of the Linf norm in vectors. Fixes MATH326. Thanks to Jake Mannix. 
luc 

Fixed a convergence discrepancy with respect to theory in GraggBulirschStoer
integrator. Fixes MATH324. Thanks to Vincent Morand. 
luc 

Fixed a wrong dimension check in SVD solver. Thanks to Dimitri Pourbaix. 
luc 

Added composition features for real functions. Fixes MATH313. Thanks to Jake Mannix. 
luc 

Added mapping and iteration methods to vectors. Provided a default implementation
for the numerous simple methods in the RealVectorInterface. Fixes MATH312. Thanks to Jake Mannix. 
luc 

Fixed an error in handling very close events in ODE integration. Fixes MATH322. 
luc 

Fixed an overflow error in MathUtils.distance that was causing KMeansPlusPlusClusterer
to fail with a NullPointerException when component distances between points
exceeded Integer.MAXVALUE. Fixes MATH305. Thanks to Erik van Ingen. 
psteitz 

Added generationsEvolved property to GeneticAlgorithm to track the number of generations
evolved by the evolve() method before reaching the StoppingCondition. Fixes MATH315. Thanks to Mikkel Meyer Andersen. 
psteitz 

Fixed an index computation error in eigen decomposition. Once again, kudos to Dimitri
for debugging this. Fixes MATH318. Thanks to Dimitri Pourbaix. 
luc 

Fixed an ArrayIndexOutOfBoundsException in eigen decomposition. Kudos to Dimitri
for debugging this, it was really difficult. Fixes MATH308. Thanks to Dimitri Pourbaix. 
luc 

Fixed parameter test in RandomDataImpl#nextExponential. The method now throws
IllegalArgumentException for mean = 0. Fixes MATH309. Thanks to Mikkel Meyer Andersen. 
psteitz 

Changed probability calculations for Binomial, Poisson, and Hypergeometric
distributions to use Catherine Loader's saddle point approximations. Fixes MATH311. Thanks to Nipun Jawalkar. 
brentworden 

Removed dead code from Complex#divide. Fixes MATH306. Thanks to Joerg Huber. 
psteitz 

Fixed implementation of RandomDataImpl#nextPoisson by implementing an alternative
algorithm for large means. Fixes MATH294. 
psteitz 

Added support for multidimensional interpolation using the robust microsphere algorithm. Fixes MATH300. Thanks to Gilles Sadowski. 
psteitz 

Fixed implementation of EmpiricalDistributionImpl#getUpperBounds to match
interface contract. Added getGeneratorUpperBounds method to
EmpiricalDistributionImpl providing previous behavior. Fixes MATH298. 
psteitz 

Fixed wrong results on Loess interpolation, also added a way to set weights
for smoothing and to ignore zero weights for coefficients computation Fixes MATH296. Thanks to Eugene Kirpichov. 
luc 

Fixed a OutOfBoundException in simplex solver when some constraints are tight. Fixes MATH293. Thanks to Benjamin McCann. 
luc 

Fixed misleading number formats in error messages for adaptive
stepsize integrators. Fixes MATH291. Thanks to Sebb. 
luc 

Added support for weighted descriptive statistics. Fixes MATH287. Thanks to Matthew Rowles. 
psteitz 

Added normalizeArray method to MathUtils. 
psteitz 

Fixed a NullPointerException in simplex solver when no solution is possible
and some constraints are negative. Fixes MATH290. Thanks to Benjamin McCann. 
luc 

Removed an unused argument in a private method in simplex solver. Fixes MATH289. 
luc 

Fixed an error induced by entries set to 0 in simplex solver. Fixes MATH288. Thanks to Benjamin McCann. 
luc 

Fixed an error leading the simplex solver to compute the right solution
but return another one. Fixes MATH286. Thanks to Benjamin McCann. 
luc 

Prevent infinite loops in multidirectional direct optimization method when
the start point is exactly at the optimal point. Fixes MATH283. Thanks to Michael Nischt. 
luc 

Prevent possible zero divides on eigenvectors of indefinite matrices Fixes MATH297. Thanks to Axel Kramer. 
billbarker 
Release 2.0  20090803
Type 
Changes 
By 

Fixed an error in RealMatrix javadoc Fixes MATH281. Thanks to Albert Huang. 
luc 

Added an implementation of the Mersenne twister pseudo random number generator
from Makoto Matsumoto and Takuji Nishimura 
luc 

Changed the return type of the various interpolation algorithms to the
specific implementation of UnivariateRealFunction each one uses Thanks to Gilles Sadowski. 
luc 

The behavior of the bracket method in UnivariateRealSolverUtils has been changed to return successfully
when a tentative bracketing interval has a root exactly at one of its end points. Previously, such intervals
triggered an exception. Fixes MATH280. 
luc 

Added a check for too few rows with respect to the number of predictors in linear regression Fixes MATH279. Thanks to Michael Bjorkegren. 
luc 

Added a getCovariance method to singular value decomposition Thanks to Dimitri Pourbaix. 
luc 

Added robust locally weighted regression (Loess). Fixes MATH278. Thanks to Eugene Kirpichov. 
luc 

Added a scalar multiply to the Complex class Fixes MATH277. Thanks to Mark Anderson. 
luc 

Added curve fitting with a general case and two specific cases (polynomial and harmonic). 
luc 

Optimized Complex isNaN(), isInfinite() by moving computation to constructor. Fixes MATH276. Thanks to Mark Anderson. 
psteitz 

Added Genetic Algorithm implementation. Fixes MATH207. Thanks to David Stefka. 
psteitz 

Fixed detection of not positive definite matrices in Cholesky decomposition Fixes MATH274. 
luc 

Fixed a wrong check for basic variables Fixes MATH273. Thanks to Benjamin McCann. 
luc 

Fixed a problem when setting some variables (several variables were set
instead of only one) Fixes MATH272. Thanks to Benjamin McCann. 
luc 

Added a way to limit the number of functions evaluations in optimizers
(the number of iterations could already be limited) Thanks to Gilles Sadowski. 
luc 

Added digamma function. Fixes MATH267. Thanks to Ted Dunning. 
psteitz 

Added Spearman's rank correlation (SpearmansCorrelation). Fixes MATH136. Thanks to John Gant. 
psteitz 

Added support for rank transformations. 
psteitz 

Completed internationalization of all error messages 
luc 

Added a clustering package with an implementation of the kmeans++ algorithm Fixes MATH266. Thanks to Benjamin McCann. 
luc 

Added distance1, distance and distanceInf utility methods for double and
int arrays in MathUtils Fixes MATH265. Thanks to Benjamin McCann. 
luc 

Added an utility equality method between double numbers using tolerance
in ulps (Units in Last Position) Fixes MATH264. Thanks to Gilles Sadowski. 
luc 

Added getNorm1, getNormInf, distance1 and distanceInf to the Vector3D class Fixes MATH263. 
luc 

Added support for any type of field in linear algebra (FielxMatrix, FieldVector,
FieldLUDecomposition) 
luc 

The RealMatrixImpl implementation classes has been renamed Array2DRowRealMatrix
to reflect its specificities and for consistency with the new implementations. The
previous name is still available but is deprecated 
luc 

Added a blockbased storage type for dense matrices improving speed for large dimensions 
luc 

Added AggregateSummaryStatistics class to support aggregation of SummaryStatistics. Thanks to John Bollinger. 
psteitz 

Added general Field and FieldElement interfaces to allow generic algorithms
to operate on fields. The library already provides several implementations:
Complex, Fraction, BigFraction and BigReal 
luc 

Fixed inconsistent access to multidimensional array in FastFourierTransformer Fixes MATH257. Thanks to Sebb. 
luc 

Greatly improved multiplication speed for sparse matrices Fixes MATH248. 
luc 

Fixed threading issues with MathException and MathRuntimeException Fixes MATH253. Thanks to Sebb. 
luc 

Fixed threading issues with UnivariateRealSolverUtils factory Fixes MATH254. Thanks to Sebb. 
luc 

Reduced visibility of MessagesResources_fr.contents field to private Fixes MATH255. Thanks to Sebb. 
luc 

Added Fraction.toString() Fixes MATH256. 
luc 

Added add/subtract/multiply/divide functions with integer parameters to Fraction 
luc 

Added some utility functions to compute powers with integral types (int, long, BigInteger). 
luc 

Fixed a comparison error when two different fractions evaluate to the
same double due to limited precision. Fixes MATH252. 
luc 

Added a BigFraction class that does not overflow when big numerators or
denominators are used. Fixes MATH251. Thanks to Benjamin Croizet. 
luc 

Added an optimizer for constrained linear problems based on 2phases standard simplex. Fixes MATH246. Thanks to Benjamin McCann. 
luc 

Redesigned the optimization framework for a simpler yet more powerful API.
Added nonlinear conjugate gradient optimizer. Fixes MATH177. 
luc 

Fixed an error in computing gcd and lcm for some extreme values at integer
range boundaries. Fixes MATH243. Thanks to Christian Semrau. 
luc 

Added a MathUtils method to check equality given some error bounds. Fixes MATH247. Thanks to Benjamin McCann. 
luc 

Added PearsonsCorrelation class to compute correlation matrices, standard
errors and pvalues for correlation coefficients. Fixes MATH114. Thanks to John Gant. 
psteitz 

Added Covariance class to compute variancecovariance matrices in new
correlation package. Fixes MATH114. 
psteitz 

Improved fast Fourier transform efficiency. Fixes MATH216. Thanks to Cyril Briquet. 
luc 

Added a SparseRealVector class that implements a sparse vector for the RealVector interface. 
billbarker 

Added factory methods to create Chebyshev, Hermite, Laguerre and Legendre polynomials. 
luc 

Added add, subtract, negate, multiply and toString methods to PolynomialFunction. 
luc 

Changed FractionFormat to extend NumberFormat. Fixes MATH189. 
psteitz 

Forced symmetry in binomialCoefficientLog and added test cases for MathUtils. Fixes MATH242. Thanks to Christian Semrau. 
psteitz 

Fixed error in binomial coefficient computation. Fixes MATH241. Thanks to Christian Semrau. 
psteitz 

Added a LegendreGauss integrator. 
luc 

Fixed error in factorial computation for 17 <= n <= 20. Fixes MATH240. Thanks to Christian Semrau. 
psteitz 

Integration algorithms now can have both relative and absolute
accuracy settings. 
luc 

Added a new univariate subpackage below the optimization package. Fixes MATH177. Thanks to Gilles Sadowski. 
luc 

The analysis package has been reorganized with several subpackages. 
luc 

Fixed an error in gcd computation for large values. Fixes MATH238. Thanks to Christian Semrau. 
luc 

Added method to walk matrix entries with or without changing them in the
visitor design pattern sense. Three different orders can be used, row by row,
column by column or optimized order according to internal storage. Optimized
order should be preferred when no specific order is needed, because it will be
more cache efficient. 
luc 

Added Fast Hadamard Transform. Fixes MATH215. Thanks to Bernhard Grünewaldt. 
luc 

Added nth root computation for complex numbers. Fixes MATH236. Thanks to Bernhard Grünewaldt. 
luc 

Added support for sparse matrix. Fixes MATH230. Thanks to Sujit Pal and Ismael Juma. 
luc 

Added an int/double hash map (OpenIntToDoubleHashMap) with much smaller
memory overhead than standard java.util.Map (open addressing and no boxing). Thanks to Ismael Juma. 
luc 

Added support for multidimensional Fourier transform. Fixes MATH152. Thanks to Remi Arntzen. 
luc 

The root solvers and the integrators now take the function to solve as a
parameter to the solve/integrate methods, thus allowing to reuse the same
solver/integrator for different functions. Fixes MATH218. 
luc 

Added setter methods for rows and columns in matrices. Fixes MATH234. 
luc 

Added Frobenius matrix norm. Fixes MATH232. 
luc 

Added an abstract matrix implementation simplifying extension by users. Fixes MATH231. 
luc 

Added support for the Zipf distribution. Fixes MATH178. Thanks to Paul Cowan. 
luc 

Added support for copying statistics. Changes to stats classes
include copy constructor, static copy(,) and instance copy()
methods. Added copy() to UnivariateStatistic and StorelessUnivariateStatistic
interfaces. Fixes MATH212. Thanks to Jason C. HandUber. 
psteitz 

Added a removal feature for observations in descriptive statistics. Fixes MATH229. Thanks to Cyril Briquet. 
luc 

Added a scalb method in MathUtils. This method is similar to the method
with same name added in java.lang.Math as of Java 6. 
luc 

Fixed F distribution inverse CDF computation for small denominator degrees of freedom. Fixes MATH227. Thanks to Joerg Henning. 
brentworden 

Fixed an error in CorrelatedRandomVectorGenerator leading to a component of
the generated vector being constant. Fixes MATH226. Thanks to Stuart Siegel. 
luc 

Greatly improved QRdecomposition speed using transposed matrices internally. Fixes MATH223. Thanks to John Mulcahy. 
luc 

Fixed an infinite loop encountered in some backward integration cases for ODE solvers. Thanks to Pascal Parraud. 
luc 

Added beta distribution. Fixes MATH222. Thanks to Ted Dunning. 
luc 

Added probability density functions computation for distributions for which
it is feasible. Fixes MATH222. Thanks to Ted Dunning. 
luc 

Changed the Complex.equals() method so that it considers +0 and 0 are equal,
as required by IEEE754 standard. Fixes MATH221. Thanks to Dieter Roth. 
luc 

Added JAMAlike interfaces for eigen/singular problems. The implementation
are based on the very quick dqd/dqds algorithms and some parts of the MRRR
algorithm. This leads to very fast and accurate solutions. Fixes MATH220. 
luc 

Added JAMAlike interfaces for decomposition algorithms. These interfaces
decompose a matrix as a product of several other matrices with predefined
properties and shapes depending on the algorithm. These algorithms allow to
solve the equation A * X = B, either for an exact linear solution
(LUdecomposition, Cholesky decomposition) or an exact or leastsquares
solution (QRdecomposition). Fixes MATH220. 
luc 

Added removeData methods for the SimpleRegression class. This allows
to support regression calculations across a sliding window of (timebased)
observations without having to recalculate for the entire window every time. Fixes MATH219. Thanks to Andrew Berry. 
luc 

Support for one dimensional vectors has been added to the linear algebra
package with a RealVector interface, a RealVectorImpl default implementation
using a single double array to store elements and a RealVectorFormat for
input/output. Thanks to Andreas Rieger. 
luc 

Changed OLS regression implementation added in MATH203 to use
QR decomposition to solve the normal equations. Fixes MATH217. 
psteitz 

New ODE integrators have been added: the explicit AdamsBashforth and implicit
AdamsMoulton multistep methods. As the implementations of these methods are based
on Nordsieck vector rather than a traditional array of previous steps, they both
have been improved to handle adaptive stepsize. These methods provide the same rich
features has the existing ones: continuous output, step handlers, discrete events,
Gstop ... 
luc 

Replaced size adjustment of all steps of fixed steps RungeKutta integrators by
a truncation of the last step only. Fixes MATH214. 
luc 

The ODE integrators now support several step handlers at once, instead of just one.
This is more consistent with event handlers management.
The setStepHandler method has therefore been replaced by addStephandler, the
getStepHandler method has been replaced by getStepHandlers which returns a Collection
and a clearStepHandlers method has been added. 
luc 

All ODE integrators now support setting a maximal number of evaluations of differential
equations function. If this number is exceeded, an exception will be thrown during
integration. This can be used to prevent infinite loops if for example error control or
discrete events create a really large number of extremely small steps. 
luc 

All step interpolators for ODE integrators now provide interpolation for
both the state and its time derivatives. The interpolated derivatives are
the exact derivatives of the interpolated state, thus preserving consistency.
The general step handlers hence do not need to call the derivation function
anymore. The fixed step handlers also get the time derivative of the state
as an additional argument along with the state when they are called. 
luc 

Changed return type for FirstOrderIntegrator.integrate() to double
in order to retrieve exact stop time. This allows to handle properly
integration interruption due to an EventHandler instance asking to
stop the integration when its associated event is triggered. The state
was already set to the current state at interruption time, but it was
difficult to get the corresponding time (it involved setting a step
handler monitoring the last step specially). Fixes MATH213. 
luc 

Events handlers in the ODE package now also provide the switching function
variation (increasing/decreasing) when an event occurs 
luc 

Clarified the ODE package by breaking in into several subpackages and renaming
classes (SwitchingFunctions/EventHandler, SwitchingFunctionsHandler/CombinedEventsManager) 
luc 

Changed return type for FirstOrderIntegrator.getSwitchingFunctions()
to a collection of SwitchingFunction instances. This better suits the
intended use of the method and fixes a visibility error since the
previous return type referenced the package private SwitchState class. Fixes MATH210. 
luc 

Fixed dimension error on output vector for the operate method
in RealMatrixImpl and BigMatrixImpl classes. Fixes MATH209. Thanks to Thomas Chust. 
luc 

The FirstOrderDifferentialEquations, FirstOrderIntegrator and FixedStepHandler
interfaces now extends Serializable, allowing integrators, problems and
handlers to be embedded into users Serializable classes. 
luc 

Added several convenience methods and constants for Vector3D and Rotation. 
luc 

Replaced public no argument constructors with IDENTITY or ZERO
static instances for immutable classes Vector3D and Rotation. 
luc 

Fixed inconsistencies in the naming scheme for static fields in
Vector3D and Rotation with respect to the overall library. 
luc 

Greatly improved RealMatrixImpl and BigMatrixImpl performances,
both in terms of speed and in terms of temporary memory footprint. 
luc 

Added Mauro's patch to support multiple regression. Fixes MATH203. Thanks to Mauro Talevi. 
luc 

Starting with version 2.0 of the library, the minimal version of the Java
platform required to compile and use Commons Math is Java 5. This version
is widely deployed now on many systems. It brings new important features
for specific mathematical developments, for example new functions (log10,
cbrt, ulp, signum, cosh, sinh, tanh, hypot, expm1, log1p), autoboxing,
MathContext or RoundingMode. It also brings important features for general
development, for example enums, generics or annotations. 
luc 

Switching functions can now throw dedicated SwitchException from all their
method. At upper call level, the various ODE integrators handle these new
exceptions and wrap them into IntegratorException instances, hence the
integrators methods signature did not change. 
luc 

Added the getSwitchingFunctions and clearSwitchingFunctions to the
FirstOrderIntegrator interface and all its implementations Fixes MATH202. 
luc 

Removed deprecated features. This includes the following changes. Factorybased
instantiation replaced by setter injection in 1.2 in several classes have been
removed. Protected fields in matrices implementations have been declared final
and private. Identity factory methods moved to MatrixUtils class have been
removed. Complex utilities methods that have been superseded by Complex instance
methods have been removed. 
luc 

Fixed formula in fast cosine transformer javadoc comments. Fixes MATH205. Thanks to Roman Werpachowski. 
luc 

Javadoc and style fixes. Fixes MATH193. Thanks to Michael Heuer and Sebb. 
brentworden 

Added an error detection for missing imaginary character while parsing complex string Fixes MATH198. Thanks to Frederick Salardi. 
luc 

Detect numerical problems in Q.R decomposition for LevenbergMarquardt estimator
and report them appropriately Fixes MATH199. Thanks to Mick. 
luc 

Fixed several crashes in getCovariances() and guessParametersErrors() in
AbstractEstimator when some parameters are bound. The methods now explicitly
give result only about unbound parameters. Fixes MATH200. Thanks to Plamen Petrov. 
luc 

Fixed truncation error in ttest classes for large t values. Fixes MATH201. Thanks to Peter Wyngaard. 
brentworden 

Added root checks for the endpoints. Fixes MATH204. Thanks to Mick. 
brentworden 
Release 1.2  20080224
Type 
Changes 
By 

Fixed numerous warnings in test code. 
luc 

Use the initial guess provided by the user in BrentSolver.solve(), thus
improving speed. Fixes MATH156. Thanks to Tyler Ward. 
luc 

Added the estimation, optimization, geometry and ode packages from the
Mantissa library. 
luc 

Made ComplexFormat format double values with a provided NumberFormat
instance instead of using the real part format for all values. Fixes MATH18. Thanks to Phil Steitz. 
brentworden 

Added Pascal distribution implementation. Fixes MATH120. Thanks to Todd C. Parnell. 
psteitz 

Added QR Decomposition. Fixes MATH148. Thanks to Joni Salonen. 
psteitz 

Modified ProperFractionFormat to reject embedded minus signs. Fixes MATH60. Thanks to Nhung Nnguyen. 
psteitz 

Added a nextAfter method in MathUtils to return the next
machinerepresentable number in a specified direction from a given
floating point number. Used this to ensure that MathUtils.round does
not return incorrect results for numbers with bad IEEE754
representations. Fixes MATH151. Thanks to Luc Maisonobe. 
psteitz 

Added Fast Fourier Transform implementation. Fixes MATH140. Thanks to Xiaogang Zhang. 
psteitz 

Modified getSumSquaredErrors method in SimpleRegression to always
return a nonnegative result. Fixes MATH85. Thanks to Mark Osborn, Luc Maisonobe. 
psteitz 

Corrected nextInt and nextLong to handle wide value ranges. Fixes MATH153. Thanks to Remi Arntzen. 
brentworden 

Increased default precision of Gamma and Beta functions. Fixes MATH166. Thanks to Lukas Theussl. 
psteitz 

Added log function to MathUtils. Fixes MATH158. Thanks to Hasan Diwan. 
psteitz 

Added two sample (binned comparison) ChiSquare test. Fixes MATH160. Thanks to Matthias Hummel. 
psteitz 

Modified NormalDistributionImpl.cumulativeProbablity to catch
MaxIterationsExceededException and return 0 or 1, resp. if the argument
is more than 20 standard deviations from the mean. Fixes MATH167. 
psteitz 

Added SynchronizedDescriptiveStatistics class. Fixes MATH170. Thanks to David J. M. Karlsen. 
brentworden 

Added addAndCheck, mulAndCheck, and subAndCheck MathUtils methods for
long integer arguments. Fixes MATH154. Thanks to Remi Arntzen. 
brentworden 

Merged most functions from ComplexUtils into Complex class, added
static factory method to Complex. Fixes MATH171. Thanks to Niall Pemberton. 
psteitz 

Deprecated abstract factory methods and made DescriptiveStatistics and
and SummaryStatistics concrete classes. Pushed implementations up
from DescriptiveStatisticsImpl, SummaryStatisticsImpl. Made
implementations of statistics configurable via setters. 
psteitz 

Changed Mean.evaluate() to use a twopass algorithm, improving accuracy
by exploiting the the fact that this method has access to the full
array of data values. Fixes MATH174. 
psteitz 

Added check and rescaling of expected counts to sum to sum of expected
counts if necessary in ChiSquare test. Fixes MATH175. Thanks to Carl Anderson. 
psteitz 

Handle multiplication of Complex numbers with infinite parts specially. Fixes MATH164. 
luc 

Add errors guessing to leastsquares estimators. Fixes MATH176. Thanks to Kazuhiro Koshino. 
luc 

Add tests for Fraction constructor using double parameter. Fixes MATH179. Thanks to Niall Pemberton. 
luc 

Added oneway ANOVA implementation. Fixes MATH173. Thanks to Bob MacCallum. 
psteitz 

Add Fraction constructor using max denominator value. Fixes MATH181. Thanks to Niall Pemberton. 
luc 

Add integer overflow checks in Fraction constructor using double parameter. Fixes MATH182. 
luc 

Throw EOFException when using empty files with ValueServer in replay and
digest modes. Fixes MATH185. 
luc 

Added a equals and hash methods in MathUtils to check for double arrays 
luc 

Added an angle normalization method in MathUtils to force angles in some
userdefined interval 
luc 

Added vectorial covariance computation (either sample or population
covariance) 
luc 

Added multivariate summary statistics. 
luc 

Added getSumOfLogs method to SummaryStatistics and made SumOfLogs
instance used by GeometricMean configurable. Fixes MATH191. 
psteitz 

Fixed AbstractIntegerDistribution cumulativeProbablility(,)
to correctly handle double arguments. Fixes MATH184. Thanks to Yegor Bryukhov. 
psteitz 

Made numerator and denominator final in Fraction and
deprecated protected real and imaginary parts fields in Complex,
making Fraction immutable and preparing Complex to become fully
immutable in 2.0. Fixes MATH188. Thanks to Sebastian Bazley. 
psteitz 
Release 1.1  20051217
Type 
Changes 
By 

Made NewtonSolver derivative field transient and implemented readObject to
initialize. Fixes MATH74. 
psteitz 

Made sampleStats field private and changed getUpperBounds to return a fresh
copy in EmpiricalDistributionImpl. Fixes MATH74. 
psteitz 

Added polar2Complex method to ComplexUtils to create Complex numbers
from polar representations. 
psteitz 

Made all serialVersionUIDs private. Fixes MATH49. Thanks to Elliotte Harold. 
psteitz 

Improved documentation and test cases related to handling of infinite
and NaN values in Complex, ComplexUtils classes. Fixes MATH5. 
psteitz 

Fixed incorrect NaN handling in o.a.m.s.d.rank.Min, Max Fixes MATH57. Thanks to Mauro Talevi. 
psteitz 

Changed RealMatrixImpl.equals to use Double.doubleToLongBits to compare
corresponding matrix entries. Fixes MATH74. 
psteitz 

Eliminated floating point equals comparison in Percentile.evaluate. Fixes MATH74. 
psteitz 

Eliminated unnecessary assignment statements in Skewness.getResult
method. Fixes MATH74. 
psteitz 

Synchronized getters in ResizeableDoubleArray. Fixes MATH74. 
psteitz 

Eliminated unnecessary assignment statement in BisectionSolver.solve
method. Fixes MATH74. 
psteitz 

Implemented hashCode in the Complex class and changed the semantics of
equals to make all instances with real or imaginary part NaN equal. Fixes MATH74. 
psteitz 

Fixed bin index overflow problem in EmpiricalDistributionImpl. Fixes MATH12. Thanks to Keith McDonald. 
psteitz 

Added protection against numerical overflow and underflow in the
isBracketing method. Fixes MATH108. Thanks to Xiaogang Zhang. 
brentworden 

Fixed division by zero error in rounding methods. Fixes MATH47. Thanks to Nikhil Gupte. 
brentworden 

Added upper tail cumulative probability method to HypergeometricDistributionImpl. Fixes MATH100. Thanks to Mike Hu. 
brentworden 

Added better handling of numerical overflow and division by zero in
Complex calculations. Fixes MATH22. Thanks to Xiaogang Zhang. 
brentworden 

Changed ContinuedFraction to better handle infinite convergents that
resulted in divergent continued fraction evaluations. Fixes MATH92. Thanks to Mikael Weigelt. 
brentworden 

Changed rounding methods to not rely on BigDecimal conversions which
was causing numerical error. Fixes MATH32. Thanks to Srinivas Vemury. 
brentworden 

Changed Fraction(double) to correctly handle nearintegral arguments. Fixes MATH3. Thanks to Jörg Weimar. 
psteitz 

Changed lcm to throw ArithmeticException (instead of returning bogus
value) if the result is too large to store as an integer. Fixes MATH143. Thanks to Jörg Weimar. 
psteitz 

Added factories for TTest, ChiSquareTest and TestUtils class with
static methods to create instances and execute tests. Fixes MATH70. Thanks to Mary Ellen Foster. 
psteitz 

Eliminated repeated endpoint function evalutations in BrentSolver, SecantSolver. Fixes MATH95. Thanks to Paul Field. 
psteitz 

Added setSubMatrix methods to RealMatrixImpl, BigMatrixImpl. To
Preserve backward compatibility with version 1.0, these methods were
not added to the RealMatrix, BigMatrix interfaces. Fixes MATH137. Thanks to Rodrigo di Lorenzo Lopes. 
psteitz 

Added createXIdentityMatrix methods to MatrixUtils and deprecated
getIdentity methods in RealMatrixImpl, BigMatrixImpl.
Modified RealMatrixImpl, BigMatrixImpl constructors to throw
IllegalArgumentExceptions instead of ArrayIndexOutOfBounds when
dimension arguments are not positive. 
psteitz 

Made PRNG pluggable for classes in the random package. Added
RandomGenerator interface extracted from java.util.random and abstract
implementation, AbstractRandomGenerator providing default
implementations of methods based on nextDouble(). Added a constructor
taking a RandomGenerator as an argument to RandomDataImpl. Changed
ValueServer to use a RandomData in its constructor. Changes to
1.0 classes should be backward compatible (including serialization). 
psteitz 

Added utility methods for overflowchecked integer arithmetic and
improved gcd method in MathUtils. Thanks to C. Scott Ananian. 
psteitz 

Fixed error in TTestImpl.homoscedasticTtest. Implementation was
incorrectly using heteroscedastic t statistic. Also improved
sensitivity of test cases. Fixes MATH79. Thanks to Gilles Gaillard. 
psteitz 

Fixed javadoc errors. Onesided ttest significance adjustment was
reversed in javadoc for booleanvalued test methods. Fixes MATH44. Thanks to Gilles Gaillard. 
psteitz 

Fixed bug in PolynomialSplineFunction to allow evaluation of the
function at the last knot point. Thanks to Ben Litchfield. 
brentworden 

Added Weibull distribution implementation. 
brentworden 

Added Cauchy distribution implementation. 
brentworden 

Added convenience methods for rounding. 
brentworden 

Added Fraction class based on commonslang implementation. With the
fraction class, FractionFormat and ProperFractionFormat classes were
added to provide fraction formatting and parsing. Thanks to C. Scott Ananian. 
brentworden 
Release 1.0  20041206
No changes in this release.
