235 lines
17 KiB
Plaintext
235 lines
17 KiB
Plaintext
|
|
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/
|