| |
| Apache Commons Math 3.3 RELEASE NOTES |
| |
| The Apache Commons Math team is pleased to announce the release of commons-math3-3.3. |
| |
| 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.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, |
| low-discrepancy random generators (sobol, halton), least-squares 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. 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). |
| 3. A few methods/constructors in the package o.a.c.m.geometry.partitioning |
| have changed their signature in a non backwards-compatible way. The respective |
| classes are intended to be package private only and are not supposed to be |
| used for other purposes. |
| |
| Changes in this version include: |
| |
| New features: |
| o N/A: Added an order 6 fixed-step ODE integrator designed by H. A. Luther in 1968. |
| o MATH-1110: Added new constructor to "OLSMultipleLinearRegression" to be able |
| to specify a custom singularity threshold for QR decomposition. Thanks to Edward Segall. |
| o MATH-1119: Added a fast single-step method for fixed-step Runge-Kutta integrators. |
| o MATH-1101: Improved documentation of QR decomposition handling of singular matrices. |
| o MATH-1053: QR decomposition can compute pseudo-inverses for tall matrices. Thanks to Sean Owen. |
| o MATH-820: Field vectors now implement the visitor pattern just like real vectors. |
| o MATH-749: 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. |
| o MATH-1095: Added Emo Welzl algorithm to find the smallest enclosing ball of a collection of points. |
| o MATH-1072: Added a constructor to "AbstractListChromosome" that does not copy the input argument. |
| o MATH-1091: 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. |
| o N/A: Added new geometry sub-packages: spherical.oned which deals with geometry |
| on the 1-sphere (i.e. the circle) and spherical.twod which deals with the |
| 2-sphere (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 ...). |
| o MATH-1090: IntervalsSet now implements Iterable<double[]>, so one can iterate |
| over the sub-intervals without building a full list containing a copy of everything beforehand. |
| o MATH-923: Utilities for creating artificial neural networks (package "o.a.c.m.ml.neuralnet"). |
| Implementation of Kohonen's Self-Organizing Feature Map (SOFM). |
| o MATH-1014: Refactoring of curve fitters (package "o.a.c.m.fitting"). |
| o MATH-970: 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 Two-Phase simplex method has been reached). |
| o MATH-1061: Added InsufficientDataException. |
| o MATH-983: Added a graphical overview of available continuous distributions to the userguide. |
| o MATH-1051: Added Kendall's tau correlation (KendallsCorrelation). Thanks to Matt Adereth,devl. |
| o MATH-1036: 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. Thanks to Ajo Fod. |
| o MATH-1038: Added ConfidenceInterval class and BinomialConfidenceInterval providing several |
| estimators for confidence intervals for binomial probabilities. Thanks to Thorsten Schäfer. |
| o MATH-1004: Added new methods to compute the inverse of a matrix to "DiagonalMatrix" |
| and "MatrixUtils". Thanks to Ajo Fod. |
| o MATH-1041: "Pair": added factory method and "toString" method. Thanks to Sean Owen. |
| o MATH-1002: "AbstractUnivariateStatistic.test(...)" methods have uses outside subclasses; |
| implementation moved to MathArrays.verifyValues(...). |
| o MATH-1034: Added exact binomial test implementation. Thanks to Thorsten Schäfer. |
| o MATH-1018: Added overloaded constructors for subclasses of "RealDistribution" implementations |
| which do not require an explicit "inverseCumulativeAccuracy". The default accuracy will |
| be used instead. Thanks to Ajo Fod. |
| o MATH-1001: Added overloaded methods for "Frequency#incrementValue(Comparable, long)" with |
| int, long and char primitive arguments. Thanks to sebb. |
| o MATH-1030: 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. Thanks to Thorsten Schäfer. |
| o MATH-1028: Added new distance metric "EarthMoversDistance". Thanks to Thorsten Schäfer. |
| o MATH-1025: Added CombinatoricsUtils to the util package, moving binomial |
| coefficients, factorials and Stirling numbers there and adding |
| a combinations iterator. |
| o MATH-991: "PolynomialSplineFunction": added method "isValidPoint" that |
| checks whether a point is within the interpolation range. |
| o MATH-989: "BicubicSplineInterpolatingFunction": added method "isValidPoint" that |
| checks whether a point is within the interpolation range. |
| o MATH-1010: Utility to shuffle an array. |
| o MATH-1008: Created package ("o.a.c.m.fitting.leastsquares") for least-squares |
| fitting, with implementations of "LevenbergMarquardtOptimizer" and |
| "GaussNewtonOptimizer" adapted to a new ("fluent") API. |
| o MATH-1007: Add mode function to StatUtils class. |
| o MATH-1000: Add mode function to Frequency class. |
| o MATH-997: Implemented Gauss-Hermite quadrature scheme (in package "o.a.c.m.analysis.integration.gauss"). |
| o MATH-967: Added midpoint integration method. Thanks to Oleksandr Kornieiev. |
| o MATH-851: Added method "MathArrays#convolve(double[], double[])" to compute the |
| discrete, linear convolution of two sequences. Thanks to Clemens Novak. |
| o MATH-977: Added low-discrepancy random generator "HaltonSequenceGenerator". |
| o MATH-826: Added low-discrepancy random generator "SobolSequenceGenerator". Thanks to Sam Halliday. |
| o MATH-973: Added "GeometricDistribution" to "o.a.c.m.distribution" package. Thanks to Mauro Tortonesi. |
| o MATH-968: Added "ParetoDistribution" to "o.a.c.m.distribution" package. Thanks to Alex Gryzlov. |
| o MATH-898: Added "FuzzyKMeansClusterer" to "o.a.c.m.ml.clustering" package. |
| |
| Fixed Bugs: |
| o N/A: Fixed an issue with noisy functions for ODE events detection. |
| o MATH-1092: Extracted class "LineSearch" from "PowellOptimizer", to be used in |
| "NonLinearConjugateGradientOptimizer" (in place of the implementation that triggered this issue). |
| o MATH-1115: Build properly empty polyhedrons set when given equal min/max boundaries. Also explained |
| better in the javadoc about some wrong usage of PolyhedronsSet constructor. |
| o MATH-1117: Build properly empty polygons set when given equal min/max boundaries. Also explained |
| better in the javadoc about some wrong usage of PolygonsSet constructor. |
| o MATH-1118: "Complex": Fixed compatibility of "equals(Object)" with "hashCode()". |
| Added new methods for testing floating-point equality between the real |
| (resp. imaginary) parts of two complex numbers. |
| o MATH-1107: Prevent penalties to grow multiplicatively in CMAES for out of bounds points. Thanks to Bruce A Johnson. |
| o MATH-875: Un-deprecated RealVector.sparseIterator, documenting explicitly that entries |
| not iterated above are the zero ones. |
| o MATH-821: Relaxed specification for function mapping on vectors, thus allowing straightforward |
| implementation for sparse vectors. |
| o MATH-1065: Calculating the inverse cumulative probability of an "EnumeratedRealDistribution" |
| will now return the correct result according to the selected enumerated probability |
| mass function. Thanks to matteodg. |
| o MATH-976: Create additional artifact "commons-math3-x.y.z-tools.jar" as part of the |
| release process. This artifact contains useful tools, e.g. for performance testing. |
| o MATH-990: Improved performance of "MathArrays#sortInPlace(...)". |
| o MATH-1044: Clarify javadoc of "DecompositionSolver#getInverse()" and corresponding implementations |
| wrt the actually returned inverse. Several decomposition implementations are able |
| to return a pseudo-inverse in case of a singular matrix. Thanks to Sean Owen. |
| o MATH-985: Fixed an indexing problem in "BicubicSplineInterpolatingFunction" which |
| resulted in wrong interpolations. Thanks to Johnathan Kool. |
| o MATH-1089: "Precision#round(double, ...)" will now return negative zero for negative |
| values rounded to zero, similar to the float variant. |
| o MATH-1088: The iterator returned by "MultiDimensionalCounter#iterator()" will now |
| correctly throw a "NoSuchElementException" when calling "next()" and the iterator is already exhausted. |
| o MATH-1082: 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. |
| o MATH-1079: 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. |
| o MATH-842: 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). |
| o MATH-1070: Fix "Precision#round(float, int, int)" when using rounding mode "BigDecimal.ROUND_UP" |
| and the discarded fraction is zero. Thanks to Oleksandr Muliarevych. |
| o MATH-1059: Use "FastMath" instead of "Math" within Commons Math. |
| o MATH-1068: Avoid overflow when calculating Kendall's correlation for large arrays. Thanks to Gal Lalouche. |
| o MATH-1067: Avoid infinite recursion in "Beta.regularizedBeta" (package "o.a.c.m.special"). Thanks to Florian Erhard. |
| o MATH-1056: Fixed unintended integer division error in PoissonDistribution sampling method. Thanks to Sean Owen. |
| o MATH-1057: Fixed failing unit tests for "BOBYQAOptimizer" when executed with a Oracle/Sun JVM 1.5. |
| o MATH-1062: A call to "KalmanFilter#correct(...)" may have resulted in "NonSymmetricMatrixException" |
| as the internally used matrix inversion method was using a too strict symmetry check. |
| o MATH-1058: Precision improvements (for small values of the argument) in "Beta" function |
| and in "LogNormalDistribution" and "WeibullDistribution". Thanks to Sean Owen. |
| o MATH-1055: Fixed some invalid links inside javadoc and added missing deprecated annotations. Thanks to Sean Owen. |
| o MATH-1051: "EigenDecomposition" may have failed to compute the decomposition for certain |
| non-symmetric matrices. Port of the respective bugfix in Jama-1.0.3. |
| o MATH-1047: Check for overflow in methods "pow" (class "o.a.c.m.util.ArithmeticUtils"). |
| o MATH-1045: "EigenDecomposition": Using tolerance for detecting whether a matrix is singular. Thanks to Sean Owen. |
| o MATH-1035: Simplified and improved performance of "ArithmeticUtils#addAndCheck(long, long)". Thanks to derphead. |
| o MATH-1029: The "BigFraction" constructor will throw a "FractionConversionException" |
| also in case negative values are provided which exceed the allowed range (+/- Integer.MAX_VALUE). |
| o MATH-1033: The "KalmanFilter" wrongly enforced a column dimension of 1 for |
| the provided control and measurement noise matrix. Thanks to Yuan Qu. |
| o MATH-1037: 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. Thanks to Aleksei Dievskii. |
| o MATH-996: 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. Thanks to Tim Allison. |
| o MATH-999: Improve performance of "DiagonalMatrix#preMultiply(RealVector)". Thanks to Ajo Fod. |
| o MATH-1021: Fixed overflow in "HypergeometricDistribution". Thanks to Brian Bloniarz. |
| o MATH-1020: Fixed "nextPermutation" method (in "o.a.c.m.random.RandomDataGenerator"). |
| This bug does not affect applications using a previous version of Commons Math. |
| o MATH-1019: Buggy (private) method "shuffle" in "o.a.c.m.random.RandomDataGenerator" |
| superseded by "MathArrays.shuffle" (cf. MATH-1010). |
| o MATH-1012: Created "RandomGeneratorFactory" (package "o.a.c.m.random") to reduce |
| code duplication in "RandomDataGenerator". |
| o MATH-1005: Fixed "MathArrays.linearCombination" when array length is 1. Thanks to Roman Werpachowski. |
| o MATH-993: In "GaussNewtonOptimizer", check for convergence before updating the |
| parameters estimation for the next iteration. |
| o MATH-988: Fixed NullPointerException in 2D and 3D sub-line intersections. Thanks to Andreas Huber. |
| o MATH-962: Added clarification to the javadoc of "VectorFormat" and derived classes |
| in case "," is used as a separator. |
| o MATH-965: Fixed inconsistent dimensions preventing use of secondary states in ODE events. |
| |
| Changes: |
| o N/A: 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. |
| o MATH-437: Added KolmogorovSmirnovTest class, deprecating KolmogorovSmirnovDistribution. |
| o MATH-1099: Make QR the default in GaussNewtonOptimizer. Thanks to Evan Ward. |
| o MATH-1099: Add Cholesky option to GaussNewtonOptimizer. Thanks to Evan Ward. |
| o MATH-1099: Make QR in GaussNewton faster and more accurate. Thanks to Evan Ward. |
| o MATH-870: The sparse vector and matrix classes have been un-deprecated. 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. |
| o MATH-1050: Deprecated "ArithmeticUtils#pow(int, long)" and "ArithmeticUtils#pow(long, long)" |
| in favor of corresponding methods "ArithmeticUtils#pow(..., int)". |
| o MATH-1080: The "LinearConstraintSet" will now return the enclosed collection of "LinearConstraint" |
| objects in the same order as they have been added. |
| o MATH-1031: Added new class "ClusterEvaluator" to evaluate the result of a clustering algorithm |
| and refactored existing evaluation code in "MultiKMeansPlusPlusClusterer" |
| into separate class "SumOfClusterVariances". Thanks to Thorsten Schäfer. |
| o MATH-1039: Added logDensity methods to AbstractReal/IntegerDistribution with naive default |
| implementations and improved implementations for some current distributions. Thanks to Aleksei Dievskii. |
| o MATH-1011: Improved implementation of "sample" method of "UniformIntegerDistribution". |
| o MATH-1006: Enabled LaTeX expressions in javadoc and site docs via MathJax. |
| o MATH-995: Documented limitation of "IterativeLegendreGaussIntegrator" (added warning about potential wrong usage). |
| o MATH-987: Added append method to SimpleRegression, making this class map/reducible. Thanks to Ajo Fod. |
| o MATH-978: Added append method to StorelessCovariance, making this class map/reducible. Thanks to Ajo Fod. |
| |
| |
| 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/ |