
              Apache Commons Math 3.4 RELEASE NOTES

The Apache Commons Math team is pleased to announce the release of commons-math3-3.4-SNAPSHOT

The Apache Commons Math project is a library of lightweight, self-contained mathematics and statistics components addressing the most common practical problems not immediately available in the Java programming language or commons-lang.

This is a minor release: It combines bug fixes and new features.
Changes to existing features were made in a backwards-compatible
way such as to allow drop-in replacement of the v3.3 JAR file.

Most notable among the new features are:
new distributions (Gumbel, Laplace, Logistic, Nakagami), and
improvements on percentiles algorithms (better handling for NaNs
in the regular algorithm, plus a new storeless implementation).
Bicubic splines interpolators have been fixed and new implementations
added. There have been numerous bug fixes and several improvements
on performances or robustness. See below for a full list)

 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. MATH-621): 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. MATH-740 and MATH-901).

Changes in this version include:

New features:
o MATH-1166:  New classes "BicubicInterpolatingFunction" and "BicubicInterpolator" to
        replace "BicubicSplineInterpolatingFunction" and "BicubicSplineInterpolator". 
o           Boundary attributes in regions now provides the BSP tree nodes that
        were used to split the sub-hyperplane forming the boundary part of the facet. 
o MATH-1144:  Interface to allow parameter validation in "o.a.c.m.fitting.leastsquares":
        the point computed by by the optimizer can be modified before evaluation. 
o MATH-1154:  Changed classes in the inference package that instantiate distributions to
        pass null RandomGenerators to avoid initialization overhead for the default
        generator. 
o MATH-1156:  Added all Java 8 StrictMath methods to FastMath, so FastMath remains compatible
        with newer Java versions. 
o MATH-1139:  Added Gumbel, Laplace, Logistic and Nakagami distributions. Thanks to Alexey Volkov. 
o MATH-1120:  Added several different estimation types and NaN handling strategies for Percentile. Thanks to Venkatesha Murthy. 
o MATH-418:  Added implementation of PSquare algorithm to estimate percentiles without
        storing data in memory (i.e. as StorelessUnivariateStatistic). Thanks to Venkatesha Murthy. 

Fixed Bugs:
o MATH-1178:  Fixed example in userguide ("stat" section). Thanks to Dmitriy. 
o MATH-1175:  Fixed inverse cumulative probability of 0 in "LaplaceDistribution". Thanks to Karsten Loesing. 
o MATH-1174:  Fixed a problem with too thin polygons considered to have infinite size. 
o MATH-1162:  Fixed a problem with vanishing cut sub-hyperplanes during BSP tree merging. 
o MATH-1167:  "o.a.c.m.stat.regression.OLSMultipleLinearRegression": Use threshold
        when performing "QRDecomposition". Thanks to Neil Ireson. 
o MATH-1165:  "FuzzyKMeansClusterer" has thrown an exception in case one of the data
        points was equal to a cluster center. Thanks to Pashutan Modaresi. 
o MATH-1160:  Provide access to state derivatives in ContinuousOutputModel. 
o MATH-1138:  Fixed bicubic spline interpolator, using Akima splines. Thanks to Hank Grabowski. 
o MATH-1147:  Added statistics missing from toString method in SummaryStatistics. 
o MATH-1152:  Improved performance of "EnumeratedDistribution#sample()" by caching
        the cumulative probabilities and using binary rather than a linear search. Thanks to Andras Sereny. 
o MATH-1148:  "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. Thanks to Guillaume Marceau. 
o MATH-1151:  Interface "ValueAndJacobianFunction" is a precondition for lazy
        evaluation (in "o.a.c.m.fitting.leastsquares"). 
o MATH-1145:  Fix potential integer overflows in "MannWhitneyUTest" when providing
        large sample arrays. Thanks to Anders Conbere. 
o MATH-1149:  Fixed potential null pointer dereferencing in constructor of
        "DummyStepInterpolator(DummyStepInterpolator)". Thanks to M Kim. 
o MATH-1136:  Fixed BinomialDistribution to deal with degenerate cases correctly. Thanks to Aleksei Dievskii. 
o MATH-1135:  "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. Thanks to Guillaume Marceau. 
o MATH-1131:  Improve performance of "KolmogorovSmirnovTest#kolmogorovSmirnovTest(...)" for
        large samples. Also changed implementation for large n to use Pelz-Good
        approximation. Thanks to Schalk W. Cronjé. 
o MATH-1134:  "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. 
o MATH-984:  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. 
o MATH-1129:  "Percentile": wrong sorting in the presence of NaN. 
o MATH-1127:  Fixed overflow in Precision.equals with ulps (both double and float versions). 
o MATH-1125:  Performance improvements for Student's t-distribution. Thanks to Ajo Fod. 
o MATH-1123:  Fixed NullPointerException when chopping-off a sub-hyperplane
        that is exactly at a region boundary. Thanks to Aurélien Labrosse. 
o MATH-1121:  "BrentOptimizer": increment base class iteration counter. Thanks to Ajo Fod. 

Changes:
o           Spurious vertices in the middle of otherwise straight edges are now
        filtered out when rebuilding polygons boundaries from BSP trees. 
o MATH-1128:  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. 


For complete information on Apache Commons Math, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Math website:

http://commons.apache.org/proper/commons-math/


