Apache Commons Math 2.2 RELEASE NOTES
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.math.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 Long-period Linear (WELL) random generators.
Changes in this version include:
o MATH-364: Added complementary error function, erfc. Thanks to Christian Winter.
o MATH-385: 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.
o MATH-440: Created "MathUserException" class to convey cause of failure between
layers of user code separated by a layer of Commons-Math code.
o MATH-419: Added new random number generators from the Well Equidistributed Long-period Linear (WELL).
o MATH-412: Added the dfp library providing arbitrary precision floating point computation in the spirit of
IEEE 854-1987 (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 854-1987 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. Thanks to Bill Rossi.
o MATH-375: Added faster and more accurate version of traditional mathematical functions in a FastMath
class intended to be a drop-in replacement for java.util.Math at source-level. 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. Thanks to Bill Rossi.
o MATH-400: Added support for Gaussian curve fitting. Thanks to J. Lewis Muir.
o MATH-388: 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
o MATH-379: Created "MultidimensionalCounter" class.
o MATH-378: Implementation of linear interpolation. Thanks to Matthew Rowles.
o MATH-370: Added new "equalsIncludingNaN" methods that have the same semantics as the old "equals" methods.
The semantics of the old methods will be modified (in the next major release) such that
NaNs are not considered equal (to be more compliant with IEEE754).
o MATH-366: Implementation of tricubic interpolation.
o MATH-505: TestUtils is thread-hostile. Deprecate the getters and setters.
o MATH-471: MathUtils.equals(double, double) does not work properly for floats
- add equivalent (float, float) methods and basic tests
o MATH-467: Fixed an awkward statement that triggered a false positive warning.
o MATH-456: 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.
o MATH-414: 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
o MATH-380: 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
o MATH-426: Added a normalization feature to transform samples so they have zero mean and unit standard deviation Thanks to Erik van Ingen.
o MATH-429: Fixed k-means++ to add several strategies to deal with empty clusters that may appear
o MATH-391: Fixed an error preventing zero length vectors to be built by some constructors
o MATH-421: Fixed an error preventing ODE solvers to be restarted after they have been stopped by a discrete event
o MATH-415: 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().
o MATH-411: 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 to true on estimated models to get the previous behavior.
o MATH-386: Added R-squared and adjusted R-squared statistics to OLSMultipleLinearRegression.
o MATH-392: 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. Thanks to Mark Devaney.
o MATH-406: Bug fixed in Levenberg-Marquardt (handling of weights).
o MATH-405: Bug fixed in Levenberg-Marquardt (consistency of current).
o MATH-377: Bug fixed in chi-square computation in AbstractLeastSquaresOptimizer.
o MATH-395: Fixed several bugs in "BrentOptimizer".
o MATH-393: Fixed inconsistency in return values in "MultiStartUnivariateRealOptimizer".
o MATH-382: Fixed bug in precondition check (method "setMicrosphereElements").
o MATH-361: Improved localization of error messages.
o MATH-376: Allow multiple optimizations with a default simplex.
o MATH-352: Added a setQRRankingThreshold method to Levenberg-Marquardt optimizer to improve robustness
of rank determination.
o MATH-362: Fixed Levenberg-Marquardt 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.
o MATH-371: Fixed loss of significance error in PersonsCorrelation p-value computation causing p-values
smaller than the machine epsilon (~1E-16) to be reported as 0. Thanks to Kevin Childs.
o MATH-369: Fix NullPointerException in BisectionSolver.solve(f, min, max, initial) Thanks to Sasun Pundev.
o MATH-368: Fix spelling of getSparcity [sic] method of OpenMapRealVector
o MATH-367: Fix problem with the default sparseIterator when a RealVector has exactly one non-zero entry Thanks to Albert Huang.
o MATH-384: Added a constructor and addValues(double) methods allowing DescriptiveStatistics to
be initialized with values from a double array. Similarly enhanced
o MATH-448: Added a getUniqueCount() method to Frequency to return the number of unique
values included in the frequency table. Thanks to Patrick Meyer.
o MATH-420: Added toString() override to StatisticalSummaryValues.
o MATH-417: 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
o MATH-409: 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.
o MATH-361: 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").
o MATH-310: 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.
o MATH-365: Deprecated SmoothingBicubicSplineInterpolator and SmoothingBicubicSplineInterpolatorTest.
Added BicubicSplineInterpolator and BicubicSplineInterpolatorTest.
Added SmoothingPolynomialBicubicSplineInterpolator and SmoothingPolynomialBicubicSplineInterpolatorTest.
Added method to clear the list of observations in PolynomialFitter.
For complete information on Commons Math, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Math website: