Commons Math Release Notes

Release History

VersionDateDescription
3.0TBDTBD
2.22011-03-02This is primarily a maintenance release, but it also includes new features and enhancements. Users of version 2.1 are encouraged to upgrade to 2.2, as this release includes some important bug fixes. See the detailed list of changes below for full description of all bug fixes and enhancements. This release contains some minor compatibility breaks with version 2.1 in some internal classes but none of them are in APIs likely to be accessed by user code: the MessagesResources_fr class has been removed (replaced by a properties file); the arguments of the EventState.reinitializeBegin method have changed; some protected fields which already had public accessors in AbstractStepInterpolator have been replaced. There is a behavior change that users of the multiple regression classes should be aware of. In version 2.1, there was no way to estimate models without intercept terms, and, while this was not clear from the documentation, design (X) matrices needed to include initial unitary columns. In 2.2, initial unitary columns are not necessary and whether or not models include intercept terms is configurable. See the change log and javadoc for the classes in org.apache.commons.math.stat.regression for details. The major new features are: a new FastMath class, both faster, more accurate and with a few additional functions than StrictMath and Math; a new package for floating point arbitrary precision computing, including high level functions like exponential, sine, square root ...; new linear and tricubic interpolators; a new Gaussian curve fitter; a new erfc function; characteristic support for distributions; a set of new Well Equidistributed Long-period Linear (WELL) random generators.
2.12010-04-02This is primarily a maintenance release, but it also includes new features and enhancements. Users of version 2.0 are encouraged to upgrade to 2.1, as this release includes some important bug fixes. See the detailed list of changes below for full description of all bug fixes and enhancements. This release contains some minor API compatibility breaks with version 2.0: the return type of RealVector.copy() has been changed to AbstractRealVector; the no-argument constructor of MatrixUtils() has been made private; the mapXxxToSelf methods of OpenMapRealVector have been removed and some method return types have been changed in this class; new methods have been added to the RealVector interface; several fields in AdaptiveStepSizeIntegrator have been made final; DummyStepInterpolator requires an additional argument for one of its constructors; some protected fields have been removed from AbstractLeastSquaresOptimizer, AbstractScalarDifferentiableOptimizer and AbstractLinearOptimizer; and the isOptimal(SimplexTableau) method has been removed from SimplexSolver.
2.02009-08-03This is a major release. It combines bug fixes, new features and changes to existing features. Most notable among the new features are: decomposition algorithms in the linear algebra package (LU, QR, Cholesky, SVD, eigen decomposition) which are based on the popular JAMA API (but much faster); support for sparse matrices and vectors; support for any field-based matrix (Complex, Fraction ...); support for genetic algorithms; several new optimization algorithms (Dantzig's simplex for linear constrained problems, conjugate gradient, Brent); support for curve fitting with special cases for harmonic and polynomial functions; support for state derivative in ODE step handlers; new multistep integrators (Adams-Bashforth and Adams-Moulton) with variable stepsize; regression algorithms; rank transformations; Mersenne twister pseudo random number generator. This release is NOT source and binary compatible with earlier versions of Commons Math. Starting with version 2.0 of the library, the minimal version of the Java platform required to compile and use Commons Math is Java 5. Users are encouraged to upgrade to this version, as in addition to new features, this release includes numerous bug fixes. Users of Commons Math 1.0-1.2 should recompile their code against the 2.0 jar. Most of the compilation errors users will encounter after the switch will be due to classes moved due to package reorganization. These errors are simply solved by adjusting the import statements in users code.
1.22008-02-24This release combines bug fixes and new features. Most notable among the new features are the estimation, optimization, geometry and ode packages added from the Mantissa library. Implementations of fast Fourier transform, QR decomposition and several numerical integration algorithms have also been added, along with enhancements and extensions to packages included in Commons Math 1.1. This release is source and binary compatible with earlier versions of Commons Math.
1.12005-12-17This is a maintenance release containing bug fixes and enhancements. All API changes are binary compatible with version 1.0. The enhancements include some new probability distributions, a Fraction class, new matrix and numerical utilities, and a PRNG pluggability framework making it possible to replace the JDK-supplied random number generator in Commons Math (and elsewhere) with alternative PRNG implementations.
1.02004-12-06Apache Commons Math 1.0 - Initial Release

Release 3.0 - TBD

TypeChangesBy
addMethod "addToEntry" in "RealVector". Fixes MATH-685.erans
updateReplaced temporary matrices and entry mutators with double[][] arrays to speed computation in loops within QRDecomposition, Bi- and TriDiagonalTransformer implementations. Fixes MATH-612. Thanks to Christopher Nix.psteitz
fixFixed an integer overflow in OpenMapRealMatrix. Fixes MATH-679. Thanks to Christopher Berner.luc
fix"FastMath": Use constant fields instead of recomputing them at method call. Fixes MATH-688.erans
addAdded Jacobi polynomials. Fixes MATH-687. Thanks to Romain di Costanzo.luc
addAdded "shift" method to compute the coefficients of a new polynomial whose values are the same as those of another polynomial but computed at a shifted point. Fixes MATH-683. Thanks to Romain di Costanzo.erans
fixFaster "multiply" method in "Array2DRowRealMatrix". Code inspired from the Jama project. Fixes MATH-676.erans
fixReplaced package.html with package-info.java for package documentation. Fixes MATH-445.luc
fixAdded a getRuntimeClass method to the Field interface allowing to use a complete hierarchy of fields sharing a common interface. Fixes MATH-284. Thanks to Klaus Hartlage.luc
fixThe last remaining uses of OptimizationException have been replaced by unchecked exceptions (UnboundSolutionException, NoFeasibleSolutionException, MaxCountExceededException ...) Fixes MATH-457.luc
fixThe checked ConvergenceException has been replaced by an unchecked ConvergenceException. Fixes MATH-487.luc
fixODE step interpolation with Jacobians is now fully merged with classical step interpolation. Fixes MATH-381. Thanks to Pascal Parraud.luc
fixCompletely revamped the computation of Jacobians in ODE. This computation is now included in the mainstream class hierarchy, not in a separate package anymore, and it allows adding other types of equations to a main ODE, not only variational equations for Jacobians computation. Fixes MATH-380. Thanks to Pascal Parraud.luc
updateSimpleRegression implements UpdatingMultipleLinearRegression interface. Fixes MATH-607.gregs
updateAdded isMonotone methods in MathUtils. Optimized checkOrder method. Fixes MATH-675.gregs
fixIn class "AbstractLeastSquaresOptimizer": Allow to specify a singularity threshold in call to "getCovariances" method. Fixes MATH-664.erans
fixAdded the ability to suppress the estimation of the intercept. Fixes MATH-649.gregs
fixDead code in FastMath.pow(double, double) and some improvement in test coverage. Fixes MATH-658. Thanks to Yannick TANGUY.sebb
fixRemoved "getData()" method from "RealVector" as it was redundant with "toArray()". Fixes MATH-663.erans
updateRemoved completely MathUserException. Fixes MATH-195.luc
updateUse the refactored exceptions framework for ODE. Fixes MATH-488.luc
addAdded a getter to allow retrieving the exception related to an exception context provider.luc
updateAdded erf(double,double) to Erf and used this to improve tail probability accuracy in NormalDistributionImpl. Fixes MATH-364. Thanks to Christian Winter.psteitz
fixEnabled reseeding of the random generators used by EmpiricalDistributionImpl and ValueServer. Modified ValueServer to pass its RandomData instance to the EmpiricalDistributionImpl that it creates when used in DIGEST_MODE, so reseeding ValueServer works as expected. Fixes MATH-654.psteitz
fixRenamed "AbstractRealVector" to "RealVector". The interface was removed in favour of its unique (abstract) implementation. Also removed several methods with double[] arguments from AbstractRealVector. Fixes MATH-653.erans
addUnmodifiable view of a "RealVector". Fixes MATH-646. Thanks to Sébastien Brisard.erans
fixRefactored integration API for consistency with solvers API. Now the main convergence parameters are set in the constructor and remain fixed. Fixes MATH-501.luc
fixAdded a maximal number of function evaluations to the integration method, similar to what is done in the solvers API. Fixes MATH-464.luc
updateAdded storeless covariance implementation. Fixes MATH-449. Thanks to Patrick Meyer.psteitz
updateEliminated extraneous constructor from SimpleRegression. Fixes MATH-648.psteitz
updateEliminated pluggability of ChiSquaredDistribution used by ChiSquaredDistributionTest. Fixes MATH-506.psteitz
updateMade RandomGenerator configurable and reseedable in EmpiricalDistributionImpl. Fixes MATH-634.psteitz
addAdded a 3D SubLine class. Fixes MATH-593.luc
fixFixed exceptions generated by "ebeMultiply" and "ebeDivide" in "OpenMapRealVector". Fixes MATH-645.erans
addIn "SingularValueDecompositionImpl", added accessor for the inverse of the condition number. Fixes MATH-602. Thanks to Greg Serijevski.erans
fixMade pseudo-inverse consistent with rank computation in SingularValueDecompositionImpl. Fixes MATH-601. Thanks to Chris Nix and Greg Serijevski.psteitz
updateAdded methods to solve upper and lower triangular systems to MatrixUtils. Fixes MATH-624. Thanks to Greg Sterijevski.psteitz
updateImproved performance of nextInt(int) in BitsStreamGenerator. Fixes MATH-642.psteitz
fixFixed a wrong detection of rotation axis versus vectors plane in Rotation constructor using two vectors pairs. Fixes MATH-639.luc
addAdded a few linearCombination utility methods in MathUtils to compute accurately linear combinations a1.b1 + a2.b2 + ... + an.bn taking great care to compensate for cancellation effects. This both improves and simplify several methods in euclidean geometry classes, including linear constructors, dot product and cross product.luc
fixFixed bugs in AbstractRandomGenerator nextInt() and nextLong() default implementations. Prior to the fix for this issue, these methods generated only positive values. Fixes MATH-640.psteitz
addSimple benchmark utility (new class "PerfTestUtils" added to test sources in src/test). Fixes MATH-637.erans
addAdded a solver for Dfp-based (i.e. high accuracy) functions. Fixes MATH-636.luc
addAdded a Brent-like solver that has higher (user specified) order and does bracket selection on the result: BracketingNthOrderBrentSolver. Fixes MATH-635.luc
addAdded a few shortcut methods and predicates to Dfp (abs, isZero, negativeOrNull, strictlyNegative, positiveOrNull, strictlyPositive).luc
add"AbstractRealMatrix" inherits from "RealLinearOperator". Fixes MATH-633. Thanks to Sébastien Brisard.erans
addLinear combination of vectors: "RealVector" interface updated, implemented in "AbstractRealVector" and "ArrayRealVector". Fixes MATH-613. Thanks to Sébastien Brisard.erans
updateSlightly more efficient implementation of basic operations in "ArrayRealVector". Fixes MATH-623. Thanks to Arne Plöse.erans
addOverloaded methods (add, subtract, multiply, divide) to take a "double" parameter (as a complex number with zero imaginary part). Code and Javadoc cleanup. Added "valueOf" methods. Fixes MATH-577. Thanks to Arne Plöse.erans
fixImplemented faster generation of random gamma distributed values with algorithm from Ahrens and Dieter (1972) for shape < 1 and Marsaglia and Tsang (2001) otherwise. Fixes MATH-585.mikl
fixAllow discrete events to be detected by ODE solvers also at step start. Fixes MATH-605. Thanks to Dennis Hendriks.luc
fixRewritten SVD decomposition based on JAMA code. Fixes MATH-327,MATH-383,MATH-465,MATH-583,MATH-611. Thanks to Christopher Nix.luc
fixComplex add javadoc says that if either addend has NaN parts, the result should be Complex.NaN. Prior to the fix for this issue, NaNs were propagated only in real and imaginary parts individually. Fixes MATH-618. Thanks to Arne Plose.psteitz
addFramework for iterative linear solvers. Fixes MATH-581. Thanks to Sébastien Brisard.erans
updateImproved efficiency in RandomDataImpl, LaguerreSolver, FastMath and OutlineExtractor by moving conditional code into blocks where it is needed. Fixes MATH-609. Thanks to Dave Brosius.psteitz
fixPrevent step normalizer to output twice the last point in MULTIPLES mode. Fixes MATH-603. Thanks to Dennis Hendriks.luc
fixRemoved the requiresDenseOutput method from the StepHandler interface. Now integrators always consider dense output is required and set up the appropriate state interpolators, so step handlers can rely on them. Fixes MATH-596,MATH-604.luc
addModified "SecantSolver" to comply with the original algorithm. Added several secant-based solvers. Added a way to select the side of the root with bracketing solvers. Fixes MATH-599. Thanks to Dennis Hendriks.erans
fixFixed javadoc for ODEIntegrator interface Fixes MATH-600.luc
fixExtended StepNormalizer with normalization mode and bounds settings. Fixes MATH-595. Thanks to Dennis Hendriks.luc
fixImplemented faster generation of random exponential distributed values with algorithm from Ahrens and Dieter (1972): Computer methods for sampling from the exponential and normal distributions. Fixes MATH-597.mikl
addK-means++ clustering can now run multiple trials Fixes MATH-548.luc
addAdded a way to compute sub-lines intersections, considering sub-lines either as open sets or closed sets Fixes MATH-591.luc
addAdded a way to build a sub-line from its endpoints, and to retrieve the endpoints from a sub-line Fixes MATH-592.luc
fixJavadoc fixes in ODE. Fixes MATH-594. Thanks to Dennis Hendriks.luc
fixAdded a way to specify a custom root solver to find events in ODE integration. Fixes MATH-586. Thanks to Dennis Hendriks.luc
fixFixed error in javadoc describing Integer distribution inverse cumulative probability API. Fixes MATH-540.psteitz
fixFixed error in javadoc describing the behavior of the Percentile algorithm for small percentiles in small datasets. Fixes MATH-582. Thanks to Christopher Nix.psteitz
addNew "filter" package. Initial implementation of Kalman filter. Fixes MATH-485. Thanks to Thomas Neidhart.erans
fixImproved k-means++ clustering performances and initial cluster center choice. Fixes MATH-584. Thanks to Randall Scarberry.luc
fixFixed tricube function implementation in Loess interpolator. Fixes MATH-504. Thanks to X. B..luc
fixFixed documentation of statistics examples. Fixes MATH-568. Thanks to Christoph M. Friedrich.luc
fixImproved documentation of general optimization with a thorough example. Fixes MATH-507. Thanks to Ole Ersoy.luc
fixReplaced NullPointerException by NullArgumentException. Fixes MATH-403.luc
addAdded a consistent classes hierarchy for Euclidean spaces in dimension 1, 2 and 3.luc
fixImproved javadoc for FastMath explaining the overhead at class loading and the targeted use cases. Fixes MATH-579.luc
fixAllow outer product of vectors of different sizes. Fixes MATH-574.erans
addA complete generic implementation of Binary Space Partitioning Trees (BSP trees) has been added. A few specializations of this implementation are also provided for 1D, 2D and 3D Euclidean geometry. This allows support for arbitrary intervals sets (1D), polygons sets (2D) and polyhedrons sets (3D) with all sets operations (union, intersection, symmetric difference, difference, complement), with predicates (point inside/outside/on boundary, emptiness, other region contained), with geometrical computation (barycenter, size, boundary size) and with conversions from and to boundary representation. Fixes MATH-576.luc
fixAvoid some array copying in add and subtract ArrayFieldVector. Fixes MATH-573.luc
fixFixed an unused constructor parameter in ArrayFieldVector. Fixes MATH-572.luc
addCreated an "ExceptionContext" class: It provides the customization feature of "MathRuntimeException" without imposing a singly rooted hierarchy of the Comons Math exceptions. Thus, those exceptions now inherit from their Java standard counterparts (e.g. "MathIllegalArgumentException" inherits from "IllegalArgumentException"). Fixes MATH-566.erans
addFixed conversion problems to/from 0 in Decimal Floating Point (Dfp) class. Fixes MATH-567. Thanks to Michel.luc
fixFixed initialization of multistep ODE integrators. Relying on the interpolation model of the starter integrator inside only one step was wrong. The model may have a too low order to compute high degrees derivatives in the Nordsieck vector. Now we use several steps and use only grid points instead of interpolated points.luc
addAdded solve methods using double[][] to linear algebra decomposition solvers. Fixes MATH-564.luc
addAdded an interpolator adapter for data with known period. Fixes MATH-562.erans
addAdded a "rectangular" Cholesky decomposition for positive semidefinite matrices. Fixes MATH-541.luc
addAdded setters allowing to change the step size control parameters of adaptive step size ODE integrators. Fixes MATH-563.luc
addAdded a compareTo method to MathUtils that uses a number of ulps as a tolerance error, and works well on all numbers, including normals, subnormals, signed zeroes, infinities and NaNs. Fixes MATH-557.luc
fixFixed two errors in simplex solver when entries are close together or when variables are not restricted to non-negative. Fixes MATH-434. Thanks to Thomas Neidhart.luc
fixImproved robustness of k-means++ algorithm, by tracking changes in points assignments to clusters. Fixes MATH-547. Thanks to Thomas Neidhart.luc
updateChanged MathUtils.round(double,int,int) to propagate rather than wrap runtime exceptions. Instead of MathRuntimeException, this method now throws IllegalArgumentException or ArithmeticException under the conditions specified in the javadoc. Fixes MATH-555.psteitz
fixReduced cancellation errors in Vector3D.crossProduct Fixes MATH-554.luc
fixFixed bug in "MultidimensionalCounter". Fixes MATH-552. Thanks to James Bence.erans
fixAll unit tests have been converted to Junit 4. They need at least Junit 4.5 to run (the ant and maven build systems are currently set to use Junit 4.8.2) Fixes MATH-423. Thanks to Gilles Sadowski.luc
fixRemoved the ConvergingAlgorithm interface and ConvergingAlgorithmImpl class Fixes MATH-500. Thanks to Gilles Sadowski.luc
addAdded a consistency check for number of points with respect to the number of clusters in Kmeans++ clustering Fixes MATH-436. Thanks to Thomas Neidhart.luc
addAdded two sided Kolmogorov-Smirnov distribution using modified Marsaglia et al. (2003) implementation and quick decisions for certain parameter areas according to Simard et al. (2011). Fixes MATH-437.mikl
addAdded "power" method in "RealMatrix" and "FieldMatrix<T>" interfaces and their default implementations in "AbstractRealMatrix" and "AbstractFieldMatrix". Fixes MATH-435.mikl
updateAdded "cosine" method in "RealVector" interface and default implementation in "AbstractRealVector". Fixes MATH-545.erans
fixFixed bug in "KMeansPlusPlusClusterer". Fixes MATH-546. Thanks to Nate Paymer.erans
updateAll exceptions defined in Commons Math provide a context and a compound message list. Fixes MATH-542.erans
updateRefactored "PolynomialFitter" (in package "optimization.fitting"). Added parametric function in "PolynomialFunction" (in package "analysis.polynomials"). Fixes MATH-534.erans
fixRemoved "HarmonicFunction" (in package "optimization.fitting"); superseded by class "HarmonicOscillator" (in package "analysis.function"). Fixes MATH-518.erans
updateRefactored "HarmonicFitter" (in package "optimization.fitting"). "HarmonicCoefficientsGuesser" removed. Fixes MATH-517.erans
fixRemoved "GaussianFunction" and "GaussianDerivativeFunction" (in package "optimization.fitting"); functionality moved to class "Gaussian" (in package "analysis.function"). Fixes MATH-516.erans
fixRemoved "ParametricGaussianFunction" (in package "optimization.fitting"); functionality moved to class "Gaussian" (in package "analysis.function"). Fixes MATH-514.erans
updateRefactored "GaussianFitter" (in package "optimization.fitting"). The class now really fits a Gaussian function (whereas previously it was fitting the sum of a constant and a Gaussian). Fixes MATH-512. Thanks to Ole Ersoy.erans
fixImplementation of the CMA-ES optimization algorithm. Fixes MATH-442. Thanks to Dietmar Wolz.erans
fixThe interface "ParametricRealFunction" (in package "optimization.fitting") has been renamed to "ParametricUnivariateRealFunction" and moved to package "analysis". Fixes MATH-513.erans
fixTestUtils is thread-hostile. Remove getters and setters, and make static variables final. Fixes MATH-505.sebb
updateCreate FastMath copySign methods Fixes MATH-496.sebb
fixFastMath atan2 does not agree with StrictMath for special cases Fixes MATH-494.sebb
fixRemoved checked "MaxIterationsExceededException" (superseded by "MaxCountExceededException" from package "exception"). Fixes MATH-492.erans
fixRemoved checked "DimensionMismatchException". Replaced all occurrences by its equivalent from package "exception". Fixes MATH-491.erans
fixFastMath acos fails when input abs value is less than about 5.7851920321187236E-300 - returns NaN Fixes MATH-489.sebb
fixFastMath toRadian and toDegree don't handle large double numbers well Fixes MATH-486.sebb
fixFastMath does not handle all special cases correctly Fixes MATH-483.sebb
fixFix ulp(Infinity) to return Infinity rather than NaN Fixes MATH-480.sebb
fixFastMath.signum(-0.0) does not agree with Math.signum(-0.0) Fixes MATH-479.sebb
fixFastMath is not an exact replacement for StrictMath (partially fixed) Add signum(float), ulp(float) Fixes MATH-478.sebb
fixFastMath.max(50.0f, -50.0f) => -50.0f; should be +50.0f Fixed FastMath.max(float, float) so it returns correct value. Fixes MATH-482.sebb
fixMATH-491 MathUtils.equals(double, double) does not work properly for floats - add equivalent (float, float) methods and basic tests Fixes MATH-471.sebb
fixRemoved "MathException" from the "throws" clause of the "interpolate" method of the interpolators interfaces (package "analysis.interpolation"). Fixes MATH-458.erans
fixIn order to comply with the new runtime exceptions policy, the classes "RealVectorFormat", "ComplexFormat", "Vector3DFormat" and "CompositeFormat" do not inherit anymore from the Java standard "Format" class. Failed parsing will result in the throwing of a "MathParseException". "CompositeFormat" is now a utility class ("private" constructor). Fixes MATH-461.erans
fixBy policy, all Commons Math exceptions must inherit from class "MathRuntimeException". Fixes MATH-447.erans
fixFor optimizers (package "optimization"), the number of allowed function evaluations is passed as a parameter to the "optimize" method. Fixes MATH-454.erans
fixFor solvers (package "analysis.solvers"), the number of allowed function evaluations is passed as a parameter to the "solve" method. Fixes MATH-451.erans
fixCreated a "MathRuntimeException" to serve as a base class for exception types that need to wrap another (lower-level) exception. Fixes MATH-447.erans
updateReplaced "ComposableFunction" and "BinaryFunction" (in package "analysis") by a set of utilities in the new class "FunctionUtils" together with independent function objects in the new "analysis.function" package. Removed redundant "mapXxx" and "mapXxxToSelf" methods in "RealVector" and "AbstractRealVector" (in package "linear"). Fixes MATH-430.erans
updateRefactoring of the "analysis.solvers" package. Fixes MATH-439.erans
fixRemoved the ode.jacobians package. Fixes MATH-380.luc
updateRemoved classes "FunctionEvaluationException", "MatrixVisitorException" and "DerivativeException" (superseded by the new "MathUserException"). Fixes MATH-440.erans
fixCreated a generic "Pair" class to replace the "AbstractMap.SimpleEntry" that is only available in Java 6 and later. Fixes MATH-432.erans
fixClass "DirectSearchOptimizer" (and subclasses "NelderMead" and "MultiDirectional") was refactored into new classes: "SimplexOptimizer" and "AbstractSimplex" (and subclasses "NelderMeadSimplex" and "MultiDirectionalSimplex"). The old classes were deprecated and removed. Fixes MATH-428.erans
updateCreated "MatrixDimensionMismatchException" to replace "InvalidMatrixException" (when the latter is used to signal that matrices are not compatible for some operation). Replaced "MatrixIndexException" with "OutOfRangeException" (when the former is used to signal a row or column dimension mismatch). Fixes MATH-425.erans
updateMade "sample" methods part of the "IntegerDistribution" and "ContinuousDistribution" interfaces. Fixes MATH-310.erans
fixAll distribution classes (in package "distribution") are immutable. Fixes MATH-349.erans
updateCreated an unchecked "FunctionEvaluationException". Modified the "UnivariateRealFunction" interface: Removed the checked "FunctionEvaluationException" from the signature of the "value" method. Fixes MATH-195.erans
updateModified semantics: "equals" methods now consider that NaNs are not equal (compliant with IEEE754). Also, two adjacent floating point numbers are considered equal (this is consistent with the fact that all real numbers between them can be represented by either of the two). One consequence of that is that "equals" is not transitive. Fixes MATH-370.erans
updateRemoved methods referring to the concept of "iteration". Removed interface methods to access the number of evaluations of the gradient and Jacobian. Added new "Incrementor" utility to be used as a bounded counter for objective function evaluations. Removed all references to "OptimizationException" (replaced by "ConvergenceException"). Fixes MATH-397.erans
updateModified "AbstractUnivariateRealOptimizer" to make it more similar to "BaseAbstractScalarOptimizer". Added utility methods in "ConvergingAlgorithmImpl". Fixes MATH-397.erans
updateRefactoring of some classes in package "optimization.general" to remove code duplication and to allow the implementation of optimization algorithms that do not use derivatives. Created interface "BaseMultivariateRealOptimizer". Created classes "BaseAbstractScalarOptimizer" and "AbstractScalarOptimizer". "MultivariateRealOptimizer" and "DifferentiableMultivariateRealOptimizer" both extend "BaseMultivariateRealOptimizer". "AbstractScalarOptimizer" extends "BaseAbstractScalarOptimizer" and "AbstractScalarDifferentiableOptimizer" inherits from "AbstractScalarOptimizer". Fixes MATH-389.erans

Release 2.2 - 2011-03-02

TypeChangesBy
fixFastMath is not an exact replacement for StrictMath (partially fixed) added scalb(double, int), scalb(float, int) Fixes MATH-498.luc
fixFastMath is not an exact replacement for StrictMath (partially fixed) added hypot(double, double), nextAfter(double, double) and nextAfter(float,double) (beware of the strange double second argument) so that they handle special values in the way as StrictMath Fixes MATH-478.luc
fixFastMath is not an exact replacement for StrictMath (partially fixed) added getExponent(double) and getExponent(float) Fixes MATH-497.luc
fixFastMath is not an exact replacement for StrictMath (partially fixed) Add copySign(double), copySign(float) Fixes MATH-496.sebb
fixseparate discrete event detection from adaptive step size handling in ODE solvers, thus improving robustness, maintainability and speed Fixes MATH-484.luc
fixFixed an awkward statement that triggered a false positive warning. Fixes MATH-467.luc
updateAdded complementary error function, erfc. Fixes MATH-364. Thanks to Christian Winter.psteitz
fixModified erf (and erfc) to return extreme values for x with abs(x) > 40. For these arguments, the true value is indistinguishable from an extrema as a double. Fixes MATH-456.psteitz
updateAdded characteristic support to distributions, including methods to return numerical estimates of the mean and variance and upper and lower bounds of support. In version 2.2, methods returning distribution characteristics have been added only to the implementation classes. In version 3, supporting methods have been added to the abstract base classes and distribution interfaces. Fixes MATH-385.mikkel
updateAdded a constructor and addValues(double[]) methods allowing DescriptiveStatistics to be initialized with values from a double[] array. Similarly enhanced ResizeableDoubleArray. Fixes MATH-384.mikkel
updateAdded a getUniqueCount() method to Frequency to return the number of unique values included in the frequency table. Fixes MATH-448. Thanks to Patrick Meyer.psteitz
fixModified NormalDistributionImpl.cumulativeProbability to return 0 or 1, respectively for values more than 40 standard deviations from the mean. For these values, the actual probability is indistinguishable from 0 or 1 as a double. Top coding improves performance for extreme values and prevents convergence exceptions. Fixes MATH-414.psteitz
updateAdded toString() override to StatisticalSummaryValues. Fixes MATH-420.psteitz
fixDeprecated the whole ode.jacobians package. It is clumsy and difficult to use. It will be replaced by a completely rewritten implementation in 3.0, which will be more tightly bound to the top level ode package Fixes MATH-380.luc
fixAdded a normalization feature to transform samples so they have zero mean and unit standard deviation Fixes MATH-426. Thanks to Erik van Ingen.luc
addCreated "MathUserException" class to convey cause of failure between layers of user code separated by a layer of Commons Math code. Deprecated classes "FunctionEvaluationException", "MatrixVisitorException" and "DerivativeException". Fixes MATH-440.erans
fixFixed k-means++ to add several strategies to deal with empty clusters that may appear during iterations. Fixes MATH-429.luc
updateImproved Percentile performance by using a selection algorithm instead of a complete sort, and by allowing caching data array and pivots when several different percentiles are desired. Fixes MATH-417.luc
fixFixed an error preventing zero length vectors to be built by some constructors. Fixes MATH-391.luc
fixFixed an error preventing ODE solvers to be restarted after they have been stopped by a discrete event. Fixes MATH-421.luc
addAdded new random number generators from the Well Equidistributed Long-period Linear (WELL). Fixes MATH-419.luc
updateMade intercept / no intercept configurable in multiple regression classes. By default, regression models are estimated with an intercept term. When the "noIntercept" property is set to true, regression models are estimated without intercepts. Fixes MATH-409.psteitz
fixFixed lost cause in MathRuntimeException.createInternalError. Note that the message is still the default message for internal errors asking to report a bug to Commons Math JIRA tracker. In order to retrieve the message from the root cause, one has to get the cause itself by getCause(). Fixes MATH-415.luc
fixModified multiple regression newSample methods to ensure that by default in all cases, regression models are estimated with intercept terms. Prior to the fix for this issue, newXSampleData(double[][]), newSampleData(double[], double[][]) and newSampleData(double[], double[][], double[][]) all required columns of "1's" to be inserted into the x[][] arrays to create a model with an intercept term; while newSampleData(double[], int, int) created a model including an intercept term without requiring the unitary column. All methods have been changed to eliminate the need for users to add unitary columns to specify regression models. Users of OLSMultipleLinearRegression or GLSMultipleLinearRegression versions 2.0 or 2.1 should either verify that their code either does not use the first set of data loading methods above or set the noIntercept property on estimated models to get the previous behavior. Fixes MATH-411.psteitz
fixAdded the dfp library providing arbitrary precision floating point computation in the spirit of IEEE 854-1987 (not exactly as it uses base 1000 instead of base 10). In addition to finite numbers, infinities and NaNs are available (but there are no subnormals). All IEEE 854-1987 rounding modes and signaling flags are supported. The available operations are +, -, *, / and the available functions are sqrt, sin, cos, tan, asin, acos, atan, exp, log. Fixes MATH-412. Thanks to Bill Rossi.luc
fixAdded faster and more accurate version of traditional mathematical functions in a FastMath class intended to be a drop-in replacement for java.util.Math at source-level. Some functions still directly delegates to Math but this will improve with time. Some functions like exp may be twice as fast (even 3 times faster on some processors). Sine, cosine or power functions show typical speedups of 1.5 times faster or more. Fixes MATH-375. Thanks to Bill Rossi.luc
fixAdded R-squared and adjusted R-squared statistics to OLSMultipleLinearRegression. Fixes MATH-386.psteitz
fixCorrected the formula used for Y variance returned by calculateYVariance and associated methods in multiple regression classes (AbstractMultipleLinearRegression, OLSMultipleLinearRegression, GLSMultipleLinearRegression). These methods previously returned estimates of the variance in the model error term. New "calulateErrorVariance" methods have been added to compute what was previously returned by calculateYVariance. Fixes MATH-392. Thanks to Mark Devaney.psteitz
fixBug fixed in Levenberg-Marquardt (handling of weights). Fixes MATH-406.dimpbx
fixBug fixed in Levenberg-Marquardt (consistency of current). Fixes MATH-405.dimpbx
fixBug fixed in chi-square computation in AbstractLeastSquaresOptimizer. Fixes MATH-377.dimpbx
addAdded support for Gaussian curve fitting. Fixes MATH-400. Thanks to J. Lewis Muir.luc
fixFixed several bugs in "BrentOptimizer". Fixes MATH-395.erans
fixFixed inconsistency in return values in "MultiStartUnivariateRealOptimizer". Fixes MATH-393.erans
addAdded a feature allowing error estimation to be computed only on a subset of Ordinary Differential Equations, considered as the main set, the remaining equations being considered only as an extension set that should not influence the ODE integration algorithm Fixes MATH-388.luc
fixFixed bug in precondition check (method "setMicrosphereElements"). Fixes MATH-382.erans
addCreated "MultidimensionalCounter" class. Fixes MATH-379.erans
addCreated package "exception" to contain the new exceptions hierarchy. Created package "exception.util": utilities for the exception classes (e.g. managing the localization of error messages). Default policy for dealing with invalid null references: raise a "NullArgumentException" (subclass of "IllegalArgumentException"). Fixes MATH-361.erans
addImplementation of linear interpolation. Fixes MATH-378. Thanks to Matthew Rowles.erans
fixImproved localization of error messages. Fixes MATH-361.luc
fixAllow multiple optimizations with a default simplex. Fixes MATH-376.erans
updateAdded new "equalsIncludingNaN" methods that have the same semantics as the old "equals" methods. These are deprecated, and their semantics will be modified (in the next major release) such that NaNs are not considered equal (to be more compliant with IEEE754). Fixes MATH-370.erans
fixAdded a setQRRankingThreshold method to Levenberg-Marquardt optimizer to improve robustness of rank determination. Fixes MATH-352.luc
updateAdded random data generation methods to RandomDataImpl for the remaining distributions in the distributions package. Added a generic nextInversionDeviate method that takes a discrete or continuous distribution as argument and generates a random deviate from the distribution. Also added sampling methods based on the implementations in RandomDataImpl to distributions. Fixes MATH-310.psteitz
fixFixed Levenberg-Marquardt optimizer that did not use the vectorial convergence checker. Now this optimizer can use either the general vectorial convergence checker or its own specialized convergence settings. Fixes MATH-362.luc
fixFixed loss of significance error in PersonsCorrelation p-value computation causing p-values smaller than the machine epsilon (~1E-16) to be reported as 0. Fixes MATH-371. Thanks to Kevin Childs.psteitz
fixFix NullPointerException in BisectionSolver.solve(f, min, max, initial) Fixes MATH-369. Thanks to Sasun Pundev.luc
fixFix spelling of getSparcity [sic] method of OpenMapRealVector Fixes MATH-368.billbarker
fixFix problem with the default sparseIterator when a RealVector has exactly one non-zero entry Fixes MATH-367. Thanks to Albert Huang.billbarker
addImplementation of tricubic interpolation. Fixes MATH-366.erans
updateDeprecated SmoothingBicubicSplineInterpolator and SmoothingBicubicSplineInterpolatorTest. Added BicubicSplineInterpolator and BicubicSplineInterpolatorTest. Added SmoothingPolynomialBicubicSplineInterpolator and SmoothingPolynomialBicubicSplineInterpolatorTest. Added method to clear the list of observations in PolynomialFitter. Fixes MATH-365.erans

Release 2.1 - 2010-04-02

TypeChangesBy
fixFix use of wrong variable in SmoothingBicubicSplineInterpolatorTest.testPreconditions() Fixes MATH-360.sebb
updateAdded method to clear the list of observations in CurveFitter. Fixes MATH-356.erans
addImplementation of bicubic interpolation. Fixes MATH-357.erans
updateAdded density functions to remaining continuous distributions (F, T, Weibull, Cauchy). As of Math 2.1, all continuous distributions implement density functions. The HasDensity interface has been deprecated and in version 3.0, density(double) will be added to the ContinuousDistribution interface. Fixes MATH-332. Thanks to Mikkel Meyer Andersen.psteitz
updateChanged equals() methods to use instanceof check rather than catching ClassCastException; this also allows some null checks to be omitted. Fixes MATH-337.sebb
updateRemoved unnecessary null checks in equals methods. Fixes MATH-336.sebb
fixFraction.hashCode() implementation was not fully consistent with Fraction.equals(). Changed hashCode() to use fields directly to agree with equals(). Fixes MATH-335.sebb
fixResolved multiple problems leading to inaccuracy and/or failure to compute Normal, ChiSquare and Poisson probabilities, Erf and Gamma functions. Made Brent solver absolute accuracy configurable for all continuous distributions. Fixes MATH-282.psteitz
fixFixed too stringent interval check in Brent solver: initial guess is now allowed to be at either interval end Fixes MATH-347.luc
addAdded a way to compute both the final state in an Initial Value Problem (IVP) for Ordinary Differential Equations (ODE) and its derivatives with respect to initial state and with respect to some problem parameters. This allows wrapping ODE solvers into optimization or root finding algorithms, which in turn can be used to solve Boundary Value Problems (BVP). There are no implementations (yet) of BVP solvers in the library.luc
fixFixed an error in events handling in ODE solvers. In some rare cases, events occurring close to a step start were handled without truncating the step, making them appear as is they occurred close to the step end Fixes MATH-358.luc
fixFixed a problem with getInterpolatedDerivatives returning zero derivatives when an ODE step handler is configured to not use interpolation. It now returns a constant but non-zero value consistent with at least one point inside the stepluc
fixFixed wrong return values when enpoints are roots in Brent solver with a user provided initial guess Fixes MATH-344.luc
fixFixed a missing bracketing check of initial interval in Brent solver. Fixes MATH-343.luc
fixIn SVD, the matrices passed to EigenDecomposition are now symmetric by construction (rather than simply by definition). In EigenDecomposition, once the tridiagonal form is obtained, the non-significant elements are set to 0. Fixes MATH-342.dimpbx
fixA EigenDecompositionImpl simplified makes it possible to compute the SVD of a singular matrix (with the right number of elements in the diagonal matrix) or a matrix with singular value(s) of multiplicity greater than 1. Fixes MATH-333.dimpbx
addAdded SemiVariance statistic. Fixes MATH-323. Thanks to Larry Diamond.psteitz
addAdded a warning in the getCoefficients method documentation for PolynomialFunctionLagrangeForm. Computation may be ill-conditioned so this method should be used with care. Fixes MATH-341.luc
addFixed an error in BigFraction multiplication for large numerators that don't fit in a primitive int. Fixes MATH-340.luc
fixFixed a spurious exception in EigenDecompositionImpl when a 3x3 block had two identical eigenvalues.luc
addAdded min/max getters for real vectors (not yet in the RealVector interface for compatibility purposes, but in the AbstractRealVector abstract class). Fixes MATH-334.luc
fixFixed automatic step initialization in embedded Runge-Kutta integrators. The relative tolerance setting was never used, only the absolute tolerance was used. Fixes MATH-338. Thanks to Vincent Morand.luc
fixFixed regression in Frequency.getPct(Object) introduced in 2.0. Cumulative percent was being returned for Object arguments in place of percent. Fixes MATH-329.psteitz
addSingular Value Decomposition now computes either the compact SVD (using only positive singular values) or truncated SVD (using a user-specified maximal number of singular values). Fixes MATH-321.luc
fixFixed Singular Value Decomposition solving of singular systems. Fixes MATH-320.luc
updateAdded MathUtils methods to compute gcd and lcm for long arguments. Fixes MATH-239. Thanks to Christian Semrau.psteitz
updateAdded support for weighted univariate statistics. Fixes MATH-287. Thanks to Matthew Rowles.psteitz
fixFixed a wrong implementation of the Linf norm in vectors. Fixes MATH-326. Thanks to Jake Mannix.luc
fixFixed a convergence discrepancy with respect to theory in Gragg-Bulirsch-Stoer integrator. Fixes MATH-324. Thanks to Vincent Morand.luc
fixFixed a wrong dimension check in SVD solver. Thanks to Dimitri Pourbaix.luc
fixAdded composition features for real functions. Fixes MATH-313. Thanks to Jake Mannix.luc
fixAdded mapping and iteration methods to vectors. Provided a default implementation for the numerous simple methods in the RealVectorInterface. Fixes MATH-312. Thanks to Jake Mannix.luc
fixFixed an error in handling very close events in ODE integration. Fixes MATH-322.luc
fixFixed an overflow error in MathUtils.distance that was causing KMeansPlusPlusClusterer to fail with a NullPointerException when component distances between points exceeded Integer.MAXVALUE. Fixes MATH-305. Thanks to Erik van Ingen.psteitz
updateAdded generationsEvolved property to GeneticAlgorithm to track the number of generations evolved by the evolve() method before reaching the StoppingCondition. Fixes MATH-315. Thanks to Mikkel Meyer Andersen.psteitz
fixFixed an index computation error in eigen decomposition. Once again, kudos to Dimitri for debugging this. Fixes MATH-318. Thanks to Dimitri Pourbaix.luc
fixFixed an ArrayIndexOutOfBoundsException in eigen decomposition. Kudos to Dimitri for debugging this, it was really difficult. Fixes MATH-308. Thanks to Dimitri Pourbaix.luc
fixFixed parameter test in RandomDataImpl#nextExponential. The method now throws IllegalArgumentException for mean = 0. Fixes MATH-309. Thanks to Mikkel Meyer Andersen.psteitz
updateChanged probability calculations for Binomial, Poisson, and Hypergeometric distributions to use Catherine Loader's saddle point approximations. Fixes MATH-311. Thanks to Nipun Jawalkar.brentworden
fixRemoved dead code from Complex#divide. Fixes MATH-306. Thanks to Joerg Huber.psteitz
fixFixed implementation of RandomDataImpl#nextPoisson by implementing an alternative algorithm for large means. Fixes MATH-294.psteitz
addAdded support for multidimensional interpolation using the robust microsphere algorithm. Fixes MATH-300. Thanks to Gilles Sadowski.psteitz
fixFixed implementation of EmpiricalDistributionImpl#getUpperBounds to match interface contract. Added getGeneratorUpperBounds method to EmpiricalDistributionImpl providing previous behavior. Fixes MATH-298.psteitz
fixFixed wrong results on Loess interpolation, also added a way to set weights for smoothing and to ignore zero weights for coefficients computation Fixes MATH-296. Thanks to Eugene Kirpichov.luc
fixFixed a OutOfBoundException in simplex solver when some constraints are tight. Fixes MATH-293. Thanks to Benjamin McCann.luc
fixFixed misleading number formats in error messages for adaptive stepsize integrators. Fixes MATH-291. Thanks to Sebb.luc
addAdded support for weighted descriptive statistics. Fixes MATH-287. Thanks to Matthew Rowles.psteitz
addAdded normalizeArray method to MathUtils.psteitz
fixFixed a NullPointerException in simplex solver when no solution is possible and some constraints are negative. Fixes MATH-290. Thanks to Benjamin McCann.luc
fixRemoved an unused argument in a private method in simplex solver. Fixes MATH-289.luc
fixFixed an error induced by entries set to 0 in simplex solver. Fixes MATH-288. Thanks to Benjamin McCann.luc
fixFixed an error leading the simplex solver to compute the right solution but return another one. Fixes MATH-286. Thanks to Benjamin McCann.luc
fixPrevent infinite loops in multi-directional direct optimization method when the start point is exactly at the optimal point. Fixes MATH-283. Thanks to Michael Nischt.luc
fixPrevent possible zero divides on eigenvectors of indefinite matrices Fixes MATH-297. Thanks to Axel Kramer.billbarker

Release 2.0 - 2009-08-03

TypeChangesBy
fixFixed an error in RealMatrix javadoc Fixes MATH-281. Thanks to Albert Huang.luc
addAdded an implementation of the Mersenne twister pseudo random number generator from Makoto Matsumoto and Takuji Nishimuraluc
updateChanged the return type of the various interpolation algorithms to the specific implementation of UnivariateRealFunction each one uses Thanks to Gilles Sadowski.luc
fixThe behavior of the bracket method in UnivariateRealSolverUtils has been changed to return successfully when a tentative bracketing interval has a root exactly at one of its end points. Previously, such intervals triggered an exception. Fixes MATH-280.luc
addAdded a check for too few rows with respect to the number of predictors in linear regression Fixes MATH-279. Thanks to Michael Bjorkegren.luc
addAdded a getCovariance method to singular value decomposition Thanks to Dimitri Pourbaix.luc
addAdded robust locally weighted regression (Loess). Fixes MATH-278. Thanks to Eugene Kirpichov.luc
addAdded a scalar multiply to the Complex class Fixes MATH-277. Thanks to Mark Anderson.luc
addAdded curve fitting with a general case and two specific cases (polynomial and harmonic).luc
updateOptimized Complex isNaN(), isInfinite() by moving computation to constructor. Fixes MATH-276. Thanks to Mark Anderson.psteitz
fixAdded Genetic Algorithm implementation. Fixes MATH-207. Thanks to David Stefka.psteitz
fixFixed detection of not positive definite matrices in Cholesky decomposition Fixes MATH-274.luc
fixFixed a wrong check for basic variables Fixes MATH-273. Thanks to Benjamin McCann.luc
fixFixed a problem when setting some variables (several variables were set instead of only one) Fixes MATH-272. Thanks to Benjamin McCann.luc
addAdded a way to limit the number of functions evaluations in optimizers (the number of iterations could already be limited) Thanks to Gilles Sadowski.luc
addAdded digamma function. Fixes MATH-267. Thanks to Ted Dunning.psteitz
addAdded Spearman's rank correlation (SpearmansCorrelation). Fixes MATH-136. Thanks to John Gant.psteitz
addAdded support for rank transformations.psteitz
updateCompleted internationalization of all error messagesluc
addAdded a clustering package with an implementation of the k-means++ algorithm Fixes MATH-266. Thanks to Benjamin McCann.luc
fixAdded distance1, distance and distanceInf utility methods for double and int arrays in MathUtils Fixes MATH-265. Thanks to Benjamin McCann.luc
fixAdded an utility equality method between double numbers using tolerance in ulps (Units in Last Position) Fixes MATH-264. Thanks to Gilles Sadowski.luc
fixAdded getNorm1, getNormInf, distance1 and distanceInf to the Vector3D class Fixes MATH-263.luc
addAdded support for any type of field in linear algebra (FielxMatrix, FieldVector, FieldLUDecomposition)luc
addThe RealMatrixImpl implementation classes has been renamed Array2DRowRealMatrix to reflect its specificities and for consistency with the new implementations. The previous name is still available but is deprecatedluc
addAdded a block-based storage type for dense matrices improving speed for large dimensionsluc
addAdded AggregateSummaryStatistics class to support aggregation of SummaryStatistics. Thanks to John Bollinger.psteitz
addAdded general Field and FieldElement interfaces to allow generic algorithms to operate on fields. The library already provides several implementations: Complex, Fraction, BigFraction and BigRealluc
fixFixed inconsistent access to multidimensional array in FastFourierTransformer Fixes MATH-257. Thanks to Sebb.luc
fixGreatly improved multiplication speed for sparse matrices Fixes MATH-248.luc
fixFixed threading issues with MathException and MathRuntimeException Fixes MATH-253. Thanks to Sebb.luc
fixFixed threading issues with UnivariateRealSolverUtils factory Fixes MATH-254. Thanks to Sebb.luc
fixReduced visibility of MessagesResources_fr.contents field to private Fixes MATH-255. Thanks to Sebb.luc
addAdded Fraction.toString() Fixes MATH-256.luc
addAdded add/subtract/multiply/divide functions with integer parameters to Fractionluc
addAdded some utility functions to compute powers with integral types (int, long, BigInteger).luc
fixFixed a comparison error when two different fractions evaluate to the same double due to limited precision. Fixes MATH-252.luc
addAdded a BigFraction class that does not overflow when big numerators or denominators are used. Fixes MATH-251. Thanks to Benjamin Croizet.luc
addAdded an optimizer for constrained linear problems based on 2-phases standard simplex. Fixes MATH-246. Thanks to Benjamin McCann.luc
fixRedesigned the optimization framework for a simpler yet more powerful API. Added non-linear conjugate gradient optimizer. Fixes MATH-177.luc
fixFixed an error in computing gcd and lcm for some extreme values at integer range boundaries. Fixes MATH-243. Thanks to Christian Semrau.luc
addAdded a MathUtils method to check equality given some error bounds. Fixes MATH-247. Thanks to Benjamin McCann.luc
addAdded PearsonsCorrelation class to compute correlation matrices, standard errors and p-values for correlation coefficients. Fixes MATH-114. Thanks to John Gant.psteitz
addAdded Covariance class to compute variance-covariance matrices in new correlation package. Fixes MATH-114.psteitz
fixImproved fast Fourier transform efficiency. Fixes MATH-216. Thanks to Cyril Briquet.luc
addAdded a SparseRealVector class that implements a sparse vector for the RealVector interface.billbarker
addAdded factory methods to create Chebyshev, Hermite, Laguerre and Legendre polynomials.luc
addAdded add, subtract, negate, multiply and toString methods to PolynomialFunction.luc
updateChanged FractionFormat to extend NumberFormat. Fixes MATH-189.psteitz
updateForced symmetry in binomialCoefficientLog and added test cases for MathUtils. Fixes MATH-242. Thanks to Christian Semrau.psteitz
fixFixed error in binomial coefficient computation. Fixes MATH-241. Thanks to Christian Semrau.psteitz
addAdded a Legendre-Gauss integrator.luc
fixFixed error in factorial computation for 17 <= n <= 20. Fixes MATH-240. Thanks to Christian Semrau.psteitz
updateIntegration algorithms now can have both relative and absolute accuracy settings.luc
addAdded a new univariate sub-package below the optimization package. Fixes MATH-177. Thanks to Gilles Sadowski.luc
updateThe analysis package has been reorganized with several sub-packages.luc
fixFixed an error in gcd computation for large values. Fixes MATH-238. Thanks to Christian Semrau.luc
addAdded method to walk matrix entries with or without changing them in the visitor design pattern sense. Three different orders can be used, row by row, column by column or optimized order according to internal storage. Optimized order should be preferred when no specific order is needed, because it will be more cache efficient.luc
addAdded Fast Hadamard Transform. Fixes MATH-215. Thanks to Bernhard Grünewaldt.luc
addAdded nth root computation for complex numbers. Fixes MATH-236. Thanks to Bernhard Grünewaldt.luc
addAdded support for sparse matrix. Fixes MATH-230. Thanks to Sujit Pal and Ismael Juma.luc
addAdded an int/double hash map (OpenIntToDoubleHashMap) with much smaller memory overhead than standard java.util.Map (open addressing and no boxing). Thanks to Ismael Juma.luc
addAdded support for multi-dimensional Fourier transform. Fixes MATH-152. Thanks to Remi Arntzen.luc
updateThe root solvers and the integrators now take the function to solve as a parameter to the solve/integrate methods, thus allowing to reuse the same solver/integrator for different functions. Fixes MATH-218.luc
addAdded setter methods for rows and columns in matrices. Fixes MATH-234.luc
addAdded Frobenius matrix norm. Fixes MATH-232.luc
addAdded an abstract matrix implementation simplifying extension by users. Fixes MATH-231.luc
addAdded support for the Zipf distribution. Fixes MATH-178. Thanks to Paul Cowan.luc
addAdded support for copying statistics. Changes to stats classes include copy constructor, static copy(-,-) and instance copy() methods. Added copy() to UnivariateStatistic and StorelessUnivariateStatistic interfaces. Fixes MATH-212. Thanks to Jason C. HandUber.psteitz
addAdded a removal feature for observations in descriptive statistics. Fixes MATH-229. Thanks to Cyril Briquet.luc
addAdded a scalb method in MathUtils. This method is similar to the method with same name added in java.lang.Math as of Java 6.luc
fixFixed F distribution inverse CDF computation for small denominator degrees of freedom. Fixes MATH-227. Thanks to Joerg Henning.brentworden
fixFixed an error in CorrelatedRandomVectorGenerator leading to a component of the generated vector being constant. Fixes MATH-226. Thanks to Stuart Siegel.luc
fixGreatly improved QR-decomposition speed using transposed matrices internally. Fixes MATH-223. Thanks to John Mulcahy.luc
fixFixed an infinite loop encountered in some backward integration cases for ODE solvers. Thanks to Pascal Parraud.luc
addAdded beta distribution. Fixes MATH-222. Thanks to Ted Dunning.luc
addAdded probability density functions computation for distributions for which it is feasible. Fixes MATH-222. Thanks to Ted Dunning.luc
fixChanged the Complex.equals() method so that it considers +0 and -0 are equal, as required by IEEE-754 standard. Fixes MATH-221. Thanks to Dieter Roth.luc
addAdded JAMA-like interfaces for eigen/singular problems. The implementation are based on the very quick dqd/dqds algorithms and some parts of the MRRR algorithm. This leads to very fast and accurate solutions. Fixes MATH-220.luc
addAdded JAMA-like interfaces for decomposition algorithms. These interfaces decompose a matrix as a product of several other matrices with predefined properties and shapes depending on the algorithm. These algorithms allow to solve the equation A * X = B, either for an exact linear solution (LU-decomposition, Cholesky decomposition) or an exact or least-squares solution (QR-decomposition). Fixes MATH-220.luc
addAdded removeData methods for the SimpleRegression class. This allows to support regression calculations across a sliding window of (time-based) observations without having to recalculate for the entire window every time. Fixes MATH-219. Thanks to Andrew Berry.luc
addSupport for one dimensional vectors has been added to the linear algebra package with a RealVector interface, a RealVectorImpl default implementation using a single double array to store elements and a RealVectorFormat for input/output. Thanks to Andreas Rieger.luc
updateChanged OLS regression implementation added in MATH-203 to use QR decomposition to solve the normal equations. Fixes MATH-217.psteitz
addNew ODE integrators have been added: the explicit Adams-Bashforth and implicit Adams-Moulton multistep methods. As the implementations of these methods are based on Nordsieck vector rather than a traditional array of previous steps, they both have been improved to handle adaptive stepsize. These methods provide the same rich features has the existing ones: continuous output, step handlers, discrete events, G-stop ...luc
fixReplaced size adjustment of all steps of fixed steps Runge-Kutta integrators by a truncation of the last step only. Fixes MATH-214.luc
updateThe ODE integrators now support several step handlers at once, instead of just one. This is more consistent with event handlers management. The setStepHandler method has therefore been replaced by addStephandler, the getStepHandler method has been replaced by getStepHandlers which returns a Collection and a clearStepHandlers method has been added.luc
addAll ODE integrators now support setting a maximal number of evaluations of differential equations function. If this number is exceeded, an exception will be thrown during integration. This can be used to prevent infinite loops if for example error control or discrete events create a really large number of extremely small steps.luc
addAll step interpolators for ODE integrators now provide interpolation for both the state and its time derivatives. The interpolated derivatives are the exact derivatives of the interpolated state, thus preserving consistency. The general step handlers hence do not need to call the derivation function anymore. The fixed step handlers also get the time derivative of the state as an additional argument along with the state when they are called.luc
fixChanged return type for FirstOrderIntegrator.integrate() to double in order to retrieve exact stop time. This allows to handle properly integration interruption due to an EventHandler instance asking to stop the integration when its associated event is triggered. The state was already set to the current state at interruption time, but it was difficult to get the corresponding time (it involved setting a step handler monitoring the last step specially). Fixes MATH-213.luc
updateEvents handlers in the ODE package now also provide the switching function variation (increasing/decreasing) when an event occursluc
updateClarified the ODE package by breaking in into several sub-packages and renaming classes (SwitchingFunctions/EventHandler, SwitchingFunctionsHandler/CombinedEventsManager)luc
fixChanged return type for FirstOrderIntegrator.getSwitchingFunctions() to a collection of SwitchingFunction instances. This better suits the intended use of the method and fixes a visibility error since the previous return type referenced the package private SwitchState class. Fixes MATH-210.luc
fixFixed dimension error on output vector for the operate method in RealMatrixImpl and BigMatrixImpl classes. Fixes MATH-209. Thanks to Thomas Chust.luc
updateThe FirstOrderDifferentialEquations, FirstOrderIntegrator and FixedStepHandler interfaces now extends Serializable, allowing integrators, problems and handlers to be embedded into users Serializable classes.luc
addAdded several convenience methods and constants for Vector3D and Rotation.luc
updateReplaced public no argument constructors with IDENTITY or ZERO static instances for immutable classes Vector3D and Rotation.luc
fixFixed inconsistencies in the naming scheme for static fields in Vector3D and Rotation with respect to the overall library.luc
updateGreatly improved RealMatrixImpl and BigMatrixImpl performances, both in terms of speed and in terms of temporary memory footprint.luc
addAdded Mauro's patch to support multiple regression. Fixes MATH-203. Thanks to Mauro Talevi.luc
updateStarting with version 2.0 of the library, the minimal version of the Java platform required to compile and use Commons Math is Java 5. This version is widely deployed now on many systems. It brings new important features for specific mathematical developments, for example new functions (log10, cbrt, ulp, signum, cosh, sinh, tanh, hypot, expm1, log1p), autoboxing, MathContext or RoundingMode. It also brings important features for general development, for example enums, generics or annotations.luc
addSwitching functions can now throw dedicated SwitchException from all their method. At upper call level, the various ODE integrators handle these new exceptions and wrap them into IntegratorException instances, hence the integrators methods signature did not change.luc
addAdded the getSwitchingFunctions and clearSwitchingFunctions to the FirstOrderIntegrator interface and all its implementations Fixes MATH-202.luc
updateRemoved deprecated features. This includes the following changes. Factory-based instantiation replaced by setter injection in 1.2 in several classes have been removed. Protected fields in matrices implementations have been declared final and private. Identity factory methods moved to MatrixUtils class have been removed. Complex utilities methods that have been superseded by Complex instance methods have been removed.luc
fixFixed formula in fast cosine transformer javadoc comments. Fixes MATH-205. Thanks to Roman Werpachowski.luc
fixJavadoc and style fixes. Fixes MATH-193. Thanks to Michael Heuer and Sebb.brentworden
fixAdded an error detection for missing imaginary character while parsing complex string Fixes MATH-198. Thanks to Frederick Salardi.luc
fixDetect numerical problems in Q.R decomposition for Levenberg-Marquardt estimator and report them appropriately Fixes MATH-199. Thanks to Mick.luc
fixFixed several crashes in getCovariances() and guessParametersErrors() in AbstractEstimator when some parameters are bound. The methods now explicitly give result only about unbound parameters. Fixes MATH-200. Thanks to Plamen Petrov.luc
fixFixed truncation error in t-test classes for large t values. Fixes MATH-201. Thanks to Peter Wyngaard.brentworden
fixAdded root checks for the endpoints. Fixes MATH-204. Thanks to Mick.brentworden

Release 1.2 - 2008-02-24

TypeChangesBy
fixFixed numerous warnings in test code.luc
fixUse the initial guess provided by the user in BrentSolver.solve(), thus improving speed. Fixes MATH-156. Thanks to Tyler Ward.luc
addAdded the estimation, optimization, geometry and ode packages from the Mantissa library.luc
fixMade ComplexFormat format double values with a provided NumberFormat instance instead of using the real part format for all values. Fixes MATH-18. Thanks to Phil Steitz.brentworden
addAdded Pascal distribution implementation. Fixes MATH-120. Thanks to Todd C. Parnell.psteitz
addAdded QR Decomposition. Fixes MATH-148. Thanks to Joni Salonen.psteitz
fixModified ProperFractionFormat to reject embedded minus signs. Fixes MATH-60. Thanks to Nhung Nnguyen.psteitz
fixAdded a nextAfter method in MathUtils to return the next machine-representable number in a specified direction from a given floating point number. Used this to ensure that MathUtils.round does not return incorrect results for numbers with bad IEEE754 representations. Fixes MATH-151. Thanks to Luc Maisonobe.psteitz
addAdded Fast Fourier Transform implementation. Fixes MATH-140. Thanks to Xiaogang Zhang.psteitz
fixModified getSumSquaredErrors method in SimpleRegression to always return a non-negative result. Fixes MATH-85. Thanks to Mark Osborn, Luc Maisonobe.psteitz
fixCorrected nextInt and nextLong to handle wide value ranges. Fixes MATH-153. Thanks to Remi Arntzen.brentworden
fixIncreased default precision of Gamma and Beta functions. Fixes MATH-166. Thanks to Lukas Theussl.psteitz
updateAdded log function to MathUtils. Fixes MATH-158. Thanks to Hasan Diwan.psteitz
updateAdded two sample (binned comparison) ChiSquare test. Fixes MATH-160. Thanks to Matthias Hummel.psteitz
fixModified NormalDistributionImpl.cumulativeProbablity to catch MaxIterationsExceededException and return 0 or 1, resp. if the argument is more than 20 standard deviations from the mean. Fixes MATH-167.psteitz
updateAdded SynchronizedDescriptiveStatistics class. Fixes MATH-170. Thanks to David J. M. Karlsen.brentworden
updateAdded addAndCheck, mulAndCheck, and subAndCheck MathUtils methods for long integer arguments. Fixes MATH-154. Thanks to Remi Arntzen.brentworden
updateMerged most functions from ComplexUtils into Complex class, added static factory method to Complex. Fixes MATH-171. Thanks to Niall Pemberton.psteitz
updateDeprecated abstract factory methods and made DescriptiveStatistics and and SummaryStatistics concrete classes. Pushed implementations up from DescriptiveStatisticsImpl, SummaryStatisticsImpl. Made implementations of statistics configurable via setters.psteitz
fixChanged Mean.evaluate() to use a two-pass algorithm, improving accuracy by exploiting the the fact that this method has access to the full array of data values. Fixes MATH-174.psteitz
fixAdded check and rescaling of expected counts to sum to sum of expected counts if necessary in ChiSquare test. Fixes MATH-175. Thanks to Carl Anderson.psteitz
fixHandle multiplication of Complex numbers with infinite parts specially. Fixes MATH-164.luc
updateAdd errors guessing to least-squares estimators. Fixes MATH-176. Thanks to Kazuhiro Koshino.luc
updateAdd tests for Fraction constructor using double parameter. Fixes MATH-179. Thanks to Niall Pemberton.luc
addAdded one-way ANOVA implementation. Fixes MATH-173. Thanks to Bob MacCallum.psteitz
updateAdd Fraction constructor using max denominator value. Fixes MATH-181. Thanks to Niall Pemberton.luc
fixAdd integer overflow checks in Fraction constructor using double parameter. Fixes MATH-182.luc
fixThrow EOFException when using empty files with ValueServer in replay and digest modes. Fixes MATH-185.luc
updateAdded a equals and hash methods in MathUtils to check for double arraysluc
addAdded an angle normalization method in MathUtils to force angles in some user-defined intervalluc
addAdded vectorial covariance computation (either sample or population covariance)luc
addAdded multivariate summary statistics.luc
updateAdded getSumOfLogs method to SummaryStatistics and made SumOfLogs instance used by GeometricMean configurable. Fixes MATH-191.psteitz
fixFixed AbstractIntegerDistribution cumulativeProbablility(-,-) to correctly handle double arguments. Fixes MATH-184. Thanks to Yegor Bryukhov.psteitz
updateMade numerator and denominator final in Fraction and deprecated protected real and imaginary parts fields in Complex, making Fraction immutable and preparing Complex to become fully immutable in 2.0. Fixes MATH-188. Thanks to Sebastian Bazley.psteitz

Release 1.1 - 2005-12-17

TypeChangesBy
fixMade NewtonSolver derivative field transient and implemented readObject to initialize. Fixes MATH-74.psteitz
fixMade sampleStats field private and changed getUpperBounds to return a fresh copy in EmpiricalDistributionImpl. Fixes MATH-74.psteitz
updateAdded polar2Complex method to ComplexUtils to create Complex numbers from polar representations.psteitz
fixMade all serialVersionUIDs private. Fixes MATH-49. Thanks to Elliotte Harold.psteitz
fixImproved documentation and test cases related to handling of infinite and NaN values in Complex, ComplexUtils classes. Fixes MATH-5.psteitz
fixFixed incorrect NaN handling in o.a.m.s.d.rank.Min, Max Fixes MATH-57. Thanks to Mauro Talevi.psteitz
fixChanged RealMatrixImpl.equals to use Double.doubleToLongBits to compare corresponding matrix entries. Fixes MATH-74.psteitz
fixEliminated floating point equals comparison in Percentile.evaluate. Fixes MATH-74.psteitz
fixEliminated unnecessary assignment statements in Skewness.getResult method. Fixes MATH-74.psteitz
fixSynchronized getters in ResizeableDoubleArray. Fixes MATH-74.psteitz
fixEliminated unnecessary assignment statement in BisectionSolver.solve method. Fixes MATH-74.psteitz
fixImplemented hashCode in the Complex class and changed the semantics of equals to make all instances with real or imaginary part NaN equal. Fixes MATH-74.psteitz
fixFixed bin index overflow problem in EmpiricalDistributionImpl. Fixes MATH-12. Thanks to Keith McDonald.psteitz
fixAdded protection against numerical overflow and underflow in the isBracketing method. Fixes MATH-108. Thanks to Xiaogang Zhang.brentworden
fixFixed division by zero error in rounding methods. Fixes MATH-47. Thanks to Nikhil Gupte.brentworden
fixAdded upper tail cumulative probability method to HypergeometricDistributionImpl. Fixes MATH-100. Thanks to Mike Hu.brentworden
fixAdded better handling of numerical overflow and division by zero in Complex calculations. Fixes MATH-22. Thanks to Xiaogang Zhang.brentworden
fixChanged ContinuedFraction to better handle infinite convergents that resulted in divergent continued fraction evaluations. Fixes MATH-92. Thanks to Mikael Weigelt.brentworden
fixChanged rounding methods to not rely on BigDecimal conversions which was causing numerical error. Fixes MATH-32. Thanks to Srinivas Vemury.brentworden
fixChanged Fraction(double) to correctly handle near-integral arguments. Fixes MATH-3. Thanks to Jörg Weimar.psteitz
fixChanged lcm to throw ArithmeticException (instead of returning bogus value) if the result is too large to store as an integer. Fixes MATH-143. Thanks to Jörg Weimar.psteitz
fixAdded factories for TTest, ChiSquareTest and TestUtils class with static methods to create instances and execute tests. Fixes MATH-70. Thanks to Mary Ellen Foster.psteitz
updateEliminated repeated endpoint function evalutations in BrentSolver, SecantSolver. Fixes MATH-95. Thanks to Paul Field.psteitz
updateAdded setSubMatrix methods to RealMatrixImpl, BigMatrixImpl. To Preserve backward compatibility with version 1.0, these methods were not added to the RealMatrix, BigMatrix interfaces. Fixes MATH-137. Thanks to Rodrigo di Lorenzo Lopes.psteitz
updateAdded createXIdentityMatrix methods to MatrixUtils and deprecated getIdentity methods in RealMatrixImpl, BigMatrixImpl. Modified RealMatrixImpl, BigMatrixImpl constructors to throw IllegalArgumentExceptions instead of ArrayIndexOutOfBounds when dimension arguments are not positive.psteitz
updateMade PRNG pluggable for classes in the random package. Added RandomGenerator interface extracted from java.util.random and abstract implementation, AbstractRandomGenerator providing default implementations of methods based on nextDouble(). Added a constructor taking a RandomGenerator as an argument to RandomDataImpl. Changed ValueServer to use a RandomData in its constructor. Changes to 1.0 classes should be backward compatible (including serialization).psteitz
updateAdded utility methods for overflow-checked integer arithmetic and improved gcd method in MathUtils. Thanks to C. Scott Ananian.psteitz
fixFixed error in TTestImpl.homoscedasticTtest. Implementation was incorrectly using heteroscedastic t statistic. Also improved sensitivity of test cases. Fixes MATH-79. Thanks to Gilles Gaillard.psteitz
fixFixed javadoc errors. One-sided t-test significance adjustment was reversed in javadoc for boolean-valued test methods. Fixes MATH-44. Thanks to Gilles Gaillard.psteitz
fixFixed bug in PolynomialSplineFunction to allow evaluation of the function at the last knot point. Thanks to Ben Litchfield.brentworden
addAdded Weibull distribution implementation.brentworden
addAdded Cauchy distribution implementation.brentworden
addAdded convenience methods for rounding.brentworden
addAdded Fraction class based on commons-lang implementation. With the fraction class, FractionFormat and ProperFractionFormat classes were added to provide fraction formatting and parsing. Thanks to C. Scott Ananian.brentworden

Release 1.0 - 2004-12-06

No changes in this release.