| |
| Apache Commons Math 4.0-beta1 RELEASE NOTES |
| |
| The Apache Commons Math team is pleased to announce the release of commons-math-parent-4.0-beta1 |
| |
| The Apache Commons Math project is a library of lightweight mathematics |
| and statistics components addressing common practical problems. |
| |
| This is a major release that requires source changes in applications. |
| Lower-level functionality has been split off to new components, often |
| with bug-fixes, performance enhancements and improved API: |
| Commons RNG, |
| Commons Numbers, |
| Commons Geometry, |
| Commons Statistics. |
| Functionality still within Commons Math has been modularized and |
| partly refactored. |
| This is a work-in-progress (help welcome). |
| Codes for which the refactoring has not been undertaken (or was |
| deemed incomplete) have been moved to 'legacy' modules. |
| The minimum version of the Java platform required to compile and use |
| Commons Math is Java 8. |
| Users are encouraged to upgrade to this version, and to the new |
| components listed above (they are now Commons Math's dependencies). |
| For code now located in the 'commons-math-legacy' module, upgrading |
| will be a matter of changing the top-level package name: |
| From 'org.apache.commons.math3' to 'org.apache.commons.math4.legacy'. |
| Code in the 'commons-math-legacy-core' module comprise classes that |
| moved from package 'org.apache.commons.math3' and package |
| 'org.apache.commons.math3.util' (e.g. 'MathArrays') to package |
| 'org.apache.commons.math4.legacy.core'. |
| Notes: |
| Class 'FastMath' was renamed 'AccurateMath' (now located in package |
| 'org.apache.commons.math4.legacy.core.jdkmath'). |
| Caveat: |
| Although hundreds of issues have been fixed (see 'git log' and the |
| reports in the bug-tracking system of all the listed components), |
| many remain due to the lack of human resources necessary in order |
| to support the whole codebase (it was one of the main reasons for |
| creating more focused components). |
| |
| Changes in this version include: |
| |
| New features: |
| o MATH-1648: "BicubicInterpolator": Provide partial derivatives of interpolating functions. Thanks to Alessandro Moscatelli. |
| o MATH-1371: Add "ElkanKMeansPlusPlusClusterer" clustering algorithm. Thanks to Artem Barger. |
| o MATH-1622: Update class "SimplexOptimizer" (in package "o.a.c.m.legacy.optim.nonlinear.scalar.noderiv") |
| to support simulated annealing. |
| o MATH-1551: "Percentile": Partial support for weighted data. Thanks to Allen Yu. |
| o MATH-1529: "AkimaSplineInterpolator": Option to use alternative weights. |
| o MATH-1509: Add "MiniBatchKMeansClusterer" clustering algorithm. Thanks to Chen Tao. |
| o MATH-1519: Add "Calinski-Harabsz" clustering evaluator. Thanks to Chen Tao. |
| o MATH-1516: Interface for ranking a list of clusters. |
| o MATH-1477: "MillerUpdatingRegression": Fixed "ArrayIndexOutOfBounds" exception. Thanks to Chee Sing Lee. |
| o MATH-1459: Create a way to automatically calculate a Jacobian matrix using a differentiator. Thanks to Adrian Porter. |
| o MATH-1426: "DescriptiveStatistics": allow "Double[]" as initializer. Thanks to Karl Richter. |
| o MATH-1383: Dependency toward the "Commons Rng" component. |
| o MATH-1015: Gauss-Laguerre quadrature. Thanks to Thomas Neidhart. |
| o MATH-1350: Improved code coverage (unit tests). Thanks to Rob Tompkins. |
| o MATH-1336: New 64-bits RNG implementations. On 64-bits systems, they are ~35% faster than |
| "java.util.Random" for generating "long" or "double" values. They also guarantee |
| much better randomness than "Random" (cf. MATH-1327). |
| o MATH-1335: Refactoring of uniform random number generator functionality: new API |
| implemented in package "o.a.c.m.rng". |
| o MATH-1337: Adaptor class from new API ("o.a.c.m.rng.RandomSource") to old API |
| ("o.a.c.m.random.RandomGenerator"). |
| o MATH-1327: Report on performance and correctness of the new RNG implementations. |
| o MATH-1314: Javadoc of the new RNG API ("o.a.c.m.rng") mentions the "seed problem". |
| o MATH-1158: New interface for sampling from distribution (package "o.a.c.m.distribution"). |
| o MATH-1351: New sampler API for "MultivariateRealDistribution". |
| o MATH-1348: Adaptor for using one of the new RNG implementations where an instance of |
| "java.util.Random" is required. |
| o MATH-1295: "FactorialLog": Cache-based computation of the "log factorial" function (implemented |
| as an inner class of "CombinatoricsUtils" in package "o.a.c.m.util"). Thanks to Aleksei Dievskii. |
| o MATH-1271: Added divideUnsigned and remainderUnsigned to ArithmeticUtils. Thanks to Qualtagh. |
| o Added a fast implementation of IEEEremainder in FastMath. |
| o MATH-945: Added method "T log10()" to interface "RealFieldElement". |
| o MATH-1039: Added logDensity(double) to RealDistribution and logProbability(int) |
| to IntegerDistribution interface. The implementations have already been |
| updated in release 3.3. Thanks to Aleksei Dievskii. |
| |
| Fixed Bugs: |
| o MATH-1647: "HaltonSequenceGenerator": Raise exception when precondition is not met. Thanks to Maksym Bohachov. |
| o MATH-1462: "EmpiricalDistribution": Use constant kernel for bins that contain up to 3 values. |
| o MATH-1379: Fix "LoessInterpolator" (in package "o.a.c.m.legacy.analysis.interpolation"). Thanks to Richard Wilkinson. |
| o MATH-1617: Class "BigReal": Fix equality check. Thanks to Ng Tsz Sum. |
| o MATH-1613: Decrease maximum number of iterations in "SimpsonIntegrator" and |
| "TrapezoidIntegrator" (due to the available range of the internal |
| counter of function evaluations). |
| o MATH-1431: "EmpiricalDistribution" handles empty bin. Thanks to Artem Onuchin. |
| o MATH-1565: Add context to "OutOfRangeException". Thanks to Randy Strauss. |
| o MATH-1558: "MidPointIntegrator": Fix iterative procedure in order to actually benefit |
| from evaluations performed at earlier stages. Thanks to Sam Ritchie. |
| o MATH-1555: "Atan2": Documentation issue. Thanks to Laurent Galluccio. |
| o MATH-1549: "SimplexTableau": Internally "scale down" the problem definition when the |
| constraints are defined with large numbers, in order to avoid spurious |
| exceptions caused by floating-point accuracy errors. Thanks to Mohammad Rezaei. |
| o MATH-1548: Avoid inefficiencies in computing the standard quality measures of a SOFM. |
| o MATH-1537: Clean-up (typos and unused "import" statements). Thanks to Jin Xu. |
| o MATH-1531: "EmpiricalDistribution": Workaround to avoid spurious exception. |
| o MATH-1511: Issue in site generation and developers documentation. |
| o MATH-1518: Remove code duplication by moving method to class "Cluster". |
| o MATH-1388: Avoid overflow. |
| o MATH-1401: "ClopperPearsonInterval": Missing cases. Thanks to Michele De Stefano. |
| o MATH-1463: "IntegerSequence.incrementor": Throw "NoSuchElementException" from "next" method. |
| o MATH-1458: "SimpsonIntegrator": Fixed iteration. Thanks to Alex Herbert. |
| o MATH-1419: "PolynomialSplineFunction": incorrect usage of exception. Thanks to Hang Park. |
| o MATH-1413: add generics to the Frequency class |
| o MATH-1417: "RRQRDecomposition": bug in method "performHouseholderReflection". Thanks to Jean-Francois Lecomte. |
| o MATH-1381: Fix "BinomialTest": P-value larger than 1. Thanks to Kexin Xie. |
| o MATH-1382: "MultivariateNormalDistribution": performance improvement (by |
| removing unnecessary copying). Thanks to Stefan Bunk. |
| o MATH-1405: "KolmogorovSmirnovTest": bug in "fixTies". Thanks to Daniil Finkel. |
| o MATH-1376: "SimplexOptimizer": Wrong value of iteration number was passed to the convergence checker. Thanks to Thomas Weise. |
| o MATH-1319: Major refactoring of package "o.a.c.m.random". |
| o MATH-1366: Removed obsolete RNG API (replaced by classes under "o.a.c.m.rng"). |
| o MATH-1340: Avoid exception swallowing (in class "TestUtils"). |
| o MATH-1339: Avoid redundant object creation. |
| o MATH-1356: "HypergeometricDistribution": Handle special cases that produced NaN. |
| o MATH-1343: "BetaDistribution": Removed unnecessary recomputation. |
| o MATH-1124: "JDKRandomGenerator": Method "nextInt(int)" now throws a "NotStrictlyPositiveException". |
| The class now delegates to (rather inherits from) "java.util.Random". |
| o MATH-1300: "AbstractRandomGenerator" and "BitsStreamGenerator": Remove a redundant call |
| to the random data provider. Thanks to Rostislav Krasny. |
| o MATH-1231: Lifted unnecessary restriction on constructor's argument of |
| "MicrosphereInterpolator" (package "o.a.c.m.analysis.interpolation"). |
| o MATH-1230: The "SimplexSolver" will now throw a "DimensionMismatchException" |
| when calling "optimize(...)" with linear constraints whose dimension |
| does not match the dimension of the objective function. |
| o MATH-1222: Use Double.isNaN rather than x != x in FastMath. Thanks to Benedikt Ritter. |
| o MATH-1143: Added helper methods to FunctionUtils for univariate and multivariate differentiable functions conversion. |
| o MATH-964: Removed unused package private class PollardRho in package primes. |
| o MATH-1221: Improve performance of "ZipfDistribution" by caching the nth generalized harmonic. |
| o MATH-1205: Methods "evaluate(...)" of class "Variance" changed the internal state |
| although it was stated differently in the javadoc. |
| o MATH-1191: Fixed ignored method parameters in QRDecomposition protected methods. |
| o MATH-1212: Changed javadoc as the RandomDataGenerator class does not implement |
| an interface anymore (the previous interface has been deprecated in |
| 3.X and removed in 4.0). |
| |
| Changes: |
| o MATH-1653: Remove class "CombinatoricsUtils" (in package "o.a.c.m.util"). |
| Functionality is in "Commons Numbers" combinatorics package. |
| o MATH-1640: Do not change caller's arguments in "KMeansPlusPlusClusterer": |
| A negative value for "maxIterations" will raise an exception. |
| o MATH-1629: Throw "ArithmeticException" instead of "MathArithmeticException". |
| o MATH-1630: Introduce "JdkMath" class for redirecting calls to either JDK or CM |
| implementations of the functions defined in "java.lang.Math". |
| o Simplify assertions with simpler equivalent. Thanks to Arturo Bernal. |
| o MATH-1573: Remove redundant local variables. Thanks to Arturo Bernal. |
| o MATH-1572: Simplify conditional expressions. Thanks to Arturo Bernal. |
| o MATH-1616: Refactor "EmpiricalDistribution" class (in package "o.a.c.m.legacy.distribution"). |
| o MATH-1595: Clean up "o.a.c.math4.legacy.random" package. |
| o MATH-1615: Remove class "StableRandomGenerator" (in package "o.a.c.m.legacy.random"). |
| o MATH-1614: Refactor "SimplexOptimizer" (in package "o.a.c.m.legacy.optim.nonlinear.scalar.noderiv"). |
| o MATH-1582: Transforms codes moved into a dedicated maven module. |
| o MATH-1578: ANN codes moved into a dedicated maven module. |
| o MATH-1575: Modularization set-up: All codes were moved into a "legacy" maven module. |
| WIP: Functionalities should gradually be moved into dedicated modules. |
| o MATH-1562: Add "Automatic-Module-Name" entry to JAR manifest file. Thanks to Frank Ulbricht. |
| o MATH-1554: Remove package "o.a.c.math4.geometry". |
| o MATH-1547: More flexible ranking of SOFM. |
| o MATH-1530: "SplineInterpolator": Improved performance. Thanks to Yassine Damerdji. |
| o MATH-1524: Code reuse. Thanks to Chen Tao. |
| o MATH-1522: Remove generic parameter in clustering evaluator interfaces. Thanks to Chen Tao. |
| o MATH-1523: Abstract class "ClusterEvaluator" replaced by an interface. |
| o MATH-1408: Do not use exceptions for control flow |
| o MATH-1362: Removed deprecated class "Incrementor" (replaced by "IntegerSequence.Incrementor"). |
| o MATH-1506: Removed class "MultidimensionalCounter" (ported to "Commons Numbers"). |
| o MATH-1504: Removed class "BigFraction" (ported to "Commons Numbers"). |
| o MATH-1446: Removed class "Fraction" (ported to "Commons Numbers"). |
| o MATH-1469: Removed most codes in package "o.a.c.m.geometry". |
| "Commons Math" now depends on "Commons Geometry". |
| o MATH-1481: "SobolSequenceGenerator": Update data file. Thanks to Théophile Charmont. |
| o MATH-1389: Performance improvement for Array2DRowRealMatrix.getSubMatrix() Thanks to Christoph Dibak. |
| o MATH-1377: "SimplexOptimizer": Slight performance improvement. |
| o MATH-1318: "o.a.c.m.special.Gamma.digamma": Improved performance (through the use of |
| the reflection formula for negative arguments). Thanks to Eric Prescott-Gagnon. |
| o MATH-1305: "AbstractRandomGenerator" and "BitsStreamGenerator": Slight performance |
| improvement of the "nextBytes" method (particularly when the number of |
| requested bytes is a multiple of 4). Thanks to Rostislav Krasny. |
| o MATH-853: "MathRuntimeException" is now the base class for all commons-math |
| exceptions (except for "NullArgumentException" which extends |
| "NullPointerException"). |
| o MATH-1205: The abstract class "AbstractStorelessUnivariateStatistic" does not |
| extend anymore from "AbstractUnivariateStatistic". |
| o MATH-1205: Default implementation of |
| "AbstractStorelessUnivariateStatistic#equals(Object)" |
| will only return true if both instances have the same type. Previously |
| different statistics were considered to be equal if their current state |
| happened to be equal. |
| o MATH-1205: Default implementations of "AbstractStorelessUnivariateStatistic#evaluate(...)" |
| do not alter the internal state anymore. Instead a temporary copy of |
| the statistic is created for evaluation purposes. |
| o MATH-1206: Added new API methods in "LeastSquaresProblem.Evaluation" (package |
| "o.a.c.m.fitting.leastsquares"). |
| o MATH-1210: "QRDecomposition": include information about the condition that |
| triggers a "SingularMatrixException". |
| o MATH-757: Removed broken synchronization support in "ResizableDoubleArray". |
| o MATH-869: "SpearmansCorrelation" will now throw an "MathIllegalArgumentException" |
| if provided with a "NaturalRanking" instance that uses "REMOVED" as "NaNStrategy". |
| o MATH-869: "NullArgumentException" extends now "java.lang.NullPointerException" |
| instead of "MathIllegalArgumentException". |
| o MATH-839: Renamed "cumulativeProbability(double, double)" to "probability(double, double)" |
| in "IntegerDistribution" and "RealDistribution". Thanks to Gilles Sadowski. |
| o MATH-1155: WELL type pseudo-random number generators have been refactored: |
| the cached indirection index tables per instance are now stored |
| in a static instance. This reduces the initialization cost when |
| creating a new instance. |
| o MATH-825: Method "LaguerreSolver#laguerre(...)" has been made private. Thanks to Gilles Sadowski. |
| o MATH-760: Field "windowSize" in "DescriptiveStatistics" has been made private. Thanks to sebb. |
| |
| Removed: |
| o MATH-1205: Removed methods "test(...)" from "AbstractUnivariateStatistic". |
| The already existing methods "MathArrays#verifyValues(...)" shall |
| be used instead. |
| o MATH-1050: Removed "ArithmeticUtils#pow(int, long)" and "ArithmeticUtils#pow(long, long)". |
| |
| 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/ |
| |
| |