Apache Commons Math 3.4 RELEASE NOTES The Apache Commons Math team is pleased to announce the release of commons-math3-3.4 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 and tricubic 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-1066: Added Bessel functions of the first kind, based on NetLib implementation. Thanks to Brian Wignall. o MATH-1180: Method to create a sequence of integers (in "o.a.c.m.util.MathArrays"). o MATH-1172: New class "SimpleCurveFitter": Boiler-plate code to allow fitting of a user-defined parametric function. o MATH-1173: New classes "TricubicInterpolatingFunction" and "TricubicInterpolator" to replace "TricubicSplineInterpolatingFunction" and "TricubicSplineInterpolator". 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-1142: Improve performance of kalman gain calculation in "KalmanFilter" by directly solving a linear system rather than computing the matrix inverse. Thanks to Arne Schwarz. o MATH-1181: Fixed integer overflow in KolmogorovSmirnovTest causing 2-sample test to use exact method when the product of the sample sizes exceeds Integer.MAX_VALUE, resulting in effectively hung execution. 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/