39
Commons Math Release Notes</title>
38
<title>Commons Math Release Notes</title>
42
<release version="1.2" date="2008-02-23"
41
<release version="2.0" date="2009-08-03" description="
42
This is a major release. It combines bug fixes, new features and
43
changes to existing features. Most notable among the new features are:
44
decomposition algorithms in the linear algebra package (LU, QR, Cholesky,
45
SVD, eigen decomposition) which are based on the popular JAMA API (but
46
much faster); support for sparse matrices and vectors;
47
support for any field-based matrix (Complex, Fraction ...);
48
support for genetic algorithms;
49
several new optimization algorithms (Dantzig's simplex for linear
50
constrained problems, conjugate gradient, Brent);
51
support for curve fitting with special cases for harmonic and polynomial
53
support for state derivative in ODE step handlers;
54
new multistep integrators (Adams-Bashforth and Adams-Moulton) with
56
regression algorithms;
58
Mersenne twister pseudo random number generator.
59
This release is NOT source and binary compatible with earlier versions
60
of Commons Math. Starting with version 2.0 of the library, the minimal
61
version of the Java platform required to compile and use commons-math
62
is Java 5. Users are encouraged to upgrade to this version, as in addition
63
to new features, this release includes numerous bug fixes. Users of
64
Commons Math 1.0-1.2 should recompile their code against the 2.0 jar.
65
Most of the compilation errors users will encounter after the switch
66
will be due to classes moved due to package reorganization. These errors
67
are simply solved by adjusting the import statements in users code.">
68
<action dev="luc" type="fix" issue="MATH-281" due-to="Albert Huang">
69
Fixed an error in RealMatrix javadoc
71
<action dev="luc" type="add" >
72
Added an implementation of the Mersenne twister pseudo random number generator
73
from Makoto Matsumoto and Takuji Nishimura
75
<action dev="luc" type="update" due-to="Gilles Sadowski">
76
Changed the return type of the various interpolation algorithms to the
77
specific implementation of UnivariateRealFunction each one uses
79
<action dev="luc" type="fix" issue="MATH-280">
80
The behavior of the bracket method in UnivariateRealSolverUtils has been changed to return successfully
81
when a tentative bracketing interval has a root exactly at one of its end points. Previously, such intervals
82
triggered an exception.
84
<action dev="luc" type="add" issue="MATH-279" due-to="Michael Bjorkegren">
85
Added a check for too few rows with respect to the number of predictors in linear regression
87
<action dev="luc" type="add" due-to="Dimitri Pourbaix">
88
Added a getCovariance method to singular value decomposition
90
<action dev="luc" type="add" issue="MATH-278" due-to="Eugene Kirpichov">
91
Added robust locally weighted regression (Loess).
93
<action dev="luc" type="add" issue="MATH-277" due-to="Mark Anderson">
94
Added a scalar multiply to the Complex class
96
<action dev="luc" type="add" >
97
Added curve fitting with a general case and two specific cases (polynomial and harmonic).
99
<action dev="psteitz" type="update" issue="MATH-276" due-to="Mark Anderson">
100
Optimized Complex isNaN(), isInfinite() by moving computation to constructor.
102
<action dev="psteitz" type="fix" issue="MATH-207" due-to="David Stefka">
103
Added Genetic Algorithm implementation.
105
<action dev="luc" type="fix" issue="MATH-274" >
106
Fixed detection of not positive definite matrices in Cholesky decomposition
108
<action dev="luc" type="fix" issue="MATH-273" due-to="Benjamin McCann">
109
Fixed a wrong check for basic variables
111
<action dev="luc" type="fix" issue="MATH-272" due-to="Benjamin McCann">
112
Fixed a problem when setting some variables (several variables were set
115
<action dev="luc" type="add" due-to="Gilles Sadowski">
116
Added a way to limit the number of functions evaluations in optimizers
117
(the number of iterations could already be limited)
119
<action dev="psteitz" type="add" issue="MATH-267" due-to="Ted Dunning">
120
Added digamma function.
122
<action dev="psteitz" type="add" issue="MATH-136" due-to="John Gant">
123
Added Spearman's rank correlation (SpearmansCorrelation).
125
<action dev="psteitz" type="add">
126
Added support for rank transformations.
128
<action dev="luc" type="update">
129
Completed internationalization of all error messages
131
<action dev="luc" type="add" issue="MATH-266" due-to="Benjamin McCann">
132
Added a clustering package with an implementation of the k-means++ algorithm
134
<action dev="luc" type="fix" issue="MATH-265" due-to="Benjamin McCann">
135
Added distance1, distance and distanceInf utility methods for double and
136
int arrays in MathUtils
138
<action dev="luc" type="fix" issue="MATH-264" due-to="Gilles Sadowski">
139
Added an utility equality method between double numbers using tolerance
140
in ulps (Units in Last Position)
142
<action dev="luc" type="fix" issue="MATH-263">
143
Added getNorm1, getNormInf, distance1 and distanceInf to the Vector3D class
145
<action dev="luc" type="add" >
146
Added support for any type of field in linear algebra (FielxMatrix, FieldVector,
147
FieldLUDecomposition)
149
<action dev="luc" type="add" >
150
The RealMatrixImpl implementation classes has been renamed Array2DRowRealMatrix
151
to reflect its specificities and for consistency with the new implementations. The
152
previous name is still available but is deprecated
154
<action dev="luc" type="add" >
155
Added a block-based storage type for dense matrices improving speed for large dimensions
157
<action dev="psteitz" type="add" due-to="John Bollinger">
158
Added AggregateSummaryStatistics class to support aggregation of SummaryStatistics.
160
<action dev="luc" type="add" >
161
Added general Field and FieldElement interfaces to allow generic algorithms
162
to operate on fields. The library already provides several implementations:
163
Complex, Fraction, BigFraction and BigReal
165
<action dev="luc" type="fix" issue="MATH-257" due-to="Sebb">
166
Fixed inconsistent access to multidimensional array in FastFourierTransformer
168
<action dev="luc" type="fix" issue="MATH-248" >
169
Greatly improved multiplication speed for sparse matrices
171
<action dev="luc" type="fix" issue="MATH-253" due-to="Sebb">
172
Fixed threading issues with MathException and MathRuntimeException
174
<action dev="luc" type="fix" issue="MATH-254" due-to="Sebb">
175
Fixed threading issues with UnivariateRealSolverUtils factory
177
<action dev="luc" type="fix" issue="MATH-255" due-to="Sebb">
178
Reduced visibility of MessagesResources_fr.contents field to private
180
<action dev="luc" type="add" issue="MATH-256" >
181
Added Fraction.toString()
183
<action dev="luc" type="add">
184
Added add/subtract/multiply/divide functions with integer parameters to Fraction
186
<action dev="luc" type="add">
187
Added some utility functions to compute powers with integral types (int, long, BigInteger).
189
<action dev="luc" type="fix" issue="MATH-252">
190
Fixed a comparison error when two different fractions evaluate to the
191
same double due to limited precision.
193
<action dev="luc" type="add" issue="MATH-251" due-to="Benjamin Croizet">
194
Added a BigFraction class that does not overflow when big numerators or
195
denominators are used.
197
<action dev="luc" type="add" issue="MATH-246" due-to="Benjamin McCann">
198
Added an optimizer for constrained linear problems based on 2-phases standard simplex.
200
<action dev="luc" type="fix" issue="MATH-177" >
201
Redesigned the optimization framework for a simpler yet more powerful API.
202
Added non-linear conjugate gradient optimizer.
204
<action dev="luc" type="fix" issue="MATH-243" due-to="Christian Semrau">
205
Fixed an error in computing gcd and lcm for some extreme values at integer
208
<action dev="luc" type="add" issue="MATH-247" due-to="Benjamin McCann">
209
Added a MathUtils method to check equality given some error bounds.
211
<action dev="psteitz" type="add" issue="MATH-114" due-to="John Gant">
212
Added PearsonsCorrelation class to compute correlation matrices, standard
213
errors and p-values for correlation coefficients.
215
<action dev="psteitz" type="add" issue="MATH-114">
216
Added Covariance class to compute variance-covariance matrices in new
219
<action dev="luc" type="fix" issue="MATH-216" due-to="Cyril Briquet">
220
Improved fast Fourier transform efficiency.
222
<action dev="billbarker" type="add">
223
Added a SparseRealVector class that implements a sparse vector for the RealVector interface.
225
<action dev="luc" type="add" >
226
Added factory methods to create Chebyshev, Hermite, Laguerre and Legendre polynomials.
228
<action dev="luc" type="add" >
229
Added add, subtract, negate, multiply and toString methods to PolynomialFunction.
231
<action dev="psteitz" type="update" issue="MATH-189">
232
Changed FractionFormat to extend NumberFormat.
234
<action dev="psteitz" type="update" issue="MATH-242" due-to="Christian Semrau">
235
Forced symmetry in binomialCoefficientLog and added test cases for MathUtils.
237
<action dev="psteitz" type="fix" issue="MATH-241" due-to="Christian Semrau">
238
Fixed error in binomial coefficient computation.
240
<action dev="luc" type="add" >
241
Added a Legendre-Gauss integrator.
243
<action dev="psteitz" type="fix" issue="MATH-240" due-to="Christian Semrau">
244
Fixed error in factorial computation for 17 <= n <= 20.
246
<action dev="luc" type="update" >
247
Integration algorithms now can have both relative and absolute
250
<action dev="luc" type="add" issue="MATH-177" due-to="Gilles Sadowski">
251
Added a new univariate sub-package below the optimization package.
253
<action dev="luc" type="update" >
254
The analysis package has been reorganized with several sub-packages.
256
<action dev="luc" type="fix" issue="MATH-238" due-to="Christian Semrau">
257
Fixed an error in gcd computation for large values.
259
<action dev="luc" type="add" >
260
Added method to walk matrix entries with or without changing them in the
261
visitor design pattern sense. Three different orders can be used, row by row,
262
column by column or optimized order according to internal storage. Optimized
263
order should be preferred when no specific order is needed, because it will be
264
more cache efficient.
266
<action dev="luc" type="add" issue="MATH-215" due-to="Bernhard Grünewaldt">
267
Added Fast Hadamard Transform.
269
<action dev="luc" type="add" issue="MATH-236" due-to="Bernhard Grünewaldt">
270
Added nth root computation for complex numbers.
272
<action dev="luc" type="add" issue="MATH-230" due-to="Sujit Pal and Ismael Juma">
273
Added support for sparse matrix.
275
<action dev="luc" type="add" due-to="Ismael Juma">
276
Added an int/double hash map (OpenIntToDoubleHashMap) with much smaller
277
memory overhead than standard java.util.Map (open addressing and no boxing).
279
<action dev="luc" type="add" issue="MATH-152" due-to="Remi Arntzen">
280
Added support for multi-dimensional Fourier transform.
282
<action dev="luc" type="update" issue="MATH-218" >
283
The root solvers and the integrators now take the function to solve as a
284
parameter to the solve/integrate methods, thus allowing to reuse the same
285
solver/integrator for different functions.
287
<action dev="luc" type="add" issue="MATH-234" >
288
Added setter methods for rows and columns in matrices.
290
<action dev="luc" type="add" issue="MATH-232" >
291
Added Frobenius matrix norm.
293
<action dev="luc" type="add" issue="MATH-231" >
294
Added an abstract matrix implementation simplifying extension by users.
296
<action dev="luc" type="add" issue="MATH-178" due-to="Paul Cowan">
297
Added support for the Zipf distribution.
299
<action dev="psteitz" type="add" issue="MATH-212" due-to="Jason C. HandUber">
300
Added support for copying statistics. Changes to stats classes
301
include copy constructor, static copy(-,-) and instance copy()
302
methods. Added copy() to UnivariateStatistic and StorelessUnivariateStatistic
305
<action dev="luc" type="add" issue="MATH-229" due-to="Cyril Briquet">
306
Added a removal feature for observations in descriptive statistics.
308
<action dev="luc" type="add" >
309
Added a scalb method in MathUtils. This method is similar to the method
310
with same name added in java.lang.Math as of Java 6.
312
<action dev="brentworden" type="fix" issue="MATH-227" due-to="Joerg Henning">
313
Fixed F distribution inverse CDF computation for small denominator degrees of freedom.
315
<action dev="luc" type="fix" issue="MATH-226" due-to="Stuart Siegel">
316
Fixed an error in CorrelatedRandomVectorGenerator leading to a component of
317
the generated vector being constant.
319
<action dev="luc" type="fix" issue="MATH-223" due-to="John Mulcahy">
320
Greatly improved QR-decomposition speed using transposed matrices internally.
322
<action dev="luc" type="fix" due-to="Pascal Parraud">
323
Fixed an infinite loop encountered in some backward integration cases for ODE solvers.
325
<action dev="luc" type="add" issue="MATH-222" due-to="Ted Dunning">
326
Added beta distribution.
328
<action dev="luc" type="add" issue="MATH-222" due-to="Ted Dunning">
329
Added probability density functions computation for distributions for which
332
<action dev="luc" type="fix" issue="MATH-221" due-to="Dieter Roth">
333
Changed the Complex.equals() method so that it considers +0 and -0 are equal,
334
as required by IEEE-754 standard.
336
<action dev="luc" type="add" issue="MATH-220">
337
Added JAMA-like interfaces for eigen/singular problems. The implementation
338
are based on the very quick dqd/dqds algorithms and some parts of the MRRR
339
algorithm. This leads to very fast and accurate solutions.
341
<action dev="luc" type="add" issue="MATH-220" >
342
Added JAMA-like interfaces for decomposition algorithms. These interfaces
343
decompose a matrix as a product of several other matrices with predefined
344
properties and shapes depending on the algorithm. These algorithms allow to
345
solve the equation A * X = B, either for an exact linear solution
346
(LU-decomposition, Cholesky decomposition) or an exact or least-squares
347
solution (QR-decomposition).
349
<action dev="luc" type="add" issue="MATH-219" due-to="Andrew Berry">
350
Added removeData methods for the SimpleRegression class. This allows
351
to support regression calculations across a sliding window of (time-based)
352
observations without having to recalculate for the entire window every time.
354
<action dev="luc" type="add" due-to="Andreas Rieger">
355
Support for one dimensional vectors has been added to the linear algebra
356
package with a RealVector interface, a RealVectorImpl default implementation
357
using a single double array to store elements and a RealVectorFormat for
360
<action dev="psteitz" type="update" issue="MATH-217">
361
Changed OLS regression implementation added in MATH-203 to use
362
QR decomposition to solve the normal equations.
364
<action dev="luc" type="add">
365
New ODE integrators have been added: the explicit Adams-Bashforth and implicit
366
Adams-Moulton multistep methods. As the implementations of these methods are based
367
on Nordsieck vector rather than a traditional array of previous steps, they both
368
have been improved to handle adaptive stepsize. These methods provide the same rich
369
features has the existing ones: continuous output, step handlers, discrete events,
372
<action dev="luc" type="fix" issue="MATH-214" >
373
Replaced size adjustment of all steps of fixed steps Runge-Kutta integrators by
374
a truncation of the last step only.
376
<action dev="luc" type="update">
377
The ODE integrators now support several step handlers at once, instead of just one.
378
This is more consistent with event handlers management.
379
The setStepHandler method has therefore been replaced by addStephandler, the
380
getStepHandler method has been replaced by getStepHandlers which returns a Collection
381
and a clearStepHandlers method has been added.
383
<action dev="luc" type="add">
384
All ODE integrators now support setting a maximal number of evaluations of differential
385
equations function. If this number is exceeded, an exception will be thrown during
386
integration. This can be used to prevent infinite loops if for example error control or
387
discrete events create a really large number of extremely small steps.
389
<action dev="luc" type="add">
390
All step interpolators for ODE integrators now provide interpolation for
391
both the state and its time derivatives. The interpolated derivatives are
392
the exact derivatives of the interpolated state, thus preserving consistency.
393
The general step handlers hence do not need to call the derivation function
394
anymore. The fixed step handlers also get the time derivative of the state
395
as an additional argument along with the state when they are called.
397
<action dev="luc" type="fix" issue="MATH-213" >
398
Changed return type for FirstOrderIntegrator.integrate() to double
399
in order to retrieve exact stop time. This allows to handle properly
400
integration interruption due to an EventHandler instance asking to
401
stop the integration when its associated event is triggered. The state
402
was already set to the current state at interruption time, but it was
403
difficult to get the corresponding time (it involved setting a step
404
handler monitoring the last step specially).
406
<action dev="luc" type="update" >
407
Events handlers in the ODE package now also provide the switching function
408
variation (increasing/decreasing) when an event occurs
410
<action dev="luc" type="update">
411
Clarified the ODE package by breaking in into several sub-packages and renaming
412
classes (SwitchingFunctions/EventHandler, SwitchingFunctionsHandler/CombinedEventsManager)
414
<action dev="luc" type="fix" issue="MATH-210" >
415
Changed return type for FirstOrderIntegrator.getSwitchingFunctions()
416
to a collection of SwitchingFunction instances. This better suits the
417
intended use of the method and fixes a visibility error since the
418
previous return type referenced the package private SwitchState class.
420
<action dev="luc" type="fix" issue="MATH-209" due-to="Thomas Chust">
421
Fixed dimension error on output vector for the operate method
422
in RealMatrixImpl and BigMatrixImpl classes.
424
<action dev="luc" type="update">
425
The FirstOrderDifferentialEquations, FirstOrderIntegrator and FixedStepHandler
426
interfaces now extends Serializable, allowing integrators, problems and
427
handlers to be embedded into users Serializable classes.
429
<action dev="luc" type="add">
430
Added several convenience methods and constants for Vector3D and Rotation.
432
<action dev="luc" type="update">
433
Replaced public no argument constructors with IDENTITY or ZERO
434
static instances for immutable classes Vector3D and Rotation.
436
<action dev="luc" type="fix">
437
Fixed inconsistencies in the naming scheme for static fields in
438
Vector3D and Rotation with respect to the overall library.
440
<action dev="luc" type="update" >
441
Greatly improved RealMatrixImpl and BigMatrixImpl performances,
442
both in terms of speed and in terms of temporary memory footprint.
444
<action dev="luc" type="add" issue="MATH-203" due-to="Mauro Talevi">
445
Added Mauro's patch to support multiple regression.
447
<action dev="luc" type="update" >
448
Starting with version 2.0 of the library, the minimal version of the Java
449
platform required to compile and use commons-math is Java 5. This version
450
is widely deployed now on many systems. It brings new important features
451
for specific mathematical developments, for example new functions (log10,
452
cbrt, ulp, signum, cosh, sinh, tanh, hypot, expm1, log1p), autoboxing,
453
MathContext or RoundingMode. It also brings important features for general
454
development, for example enums, generics or annotations.
456
<action dev="luc" type="add" >
457
Switching functions can now throw dedicated SwitchException from all their
458
method. At upper call level, the various ODE integrators handle these new
459
exceptions and wrap them into IntegratorException instances, hence the
460
integrators methods signature did not change.
462
<action dev="luc" type="add" issue="MATH-202">
463
Added the getSwitchingFunctions and clearSwitchingFunctions to the
464
FirstOrderIntegrator interface and all its implementations
466
<action dev="luc" type="update" >
467
Removed deprecated features. This includes the following changes. Factory-based
468
instantiation replaced by setter injection in 1.2 in several classes have been
469
removed. Protected fields in matrices implementations have been declared final
470
and private. Identity factory methods moved to MatrixUtils class have been
471
removed. Complex utilities methods that have been superseded by Complex instance
472
methods have been removed.
474
<action dev="luc" type="fix" issue="MATH-205" due-to="Roman Werpachowski">
475
Fixed formula in fast cosine transformer javadoc comments.
477
<action dev="brentworden" type="fix" issue="MATH-193" due-to="Michael Heuer and Sebb">
478
Javadoc and style fixes.
480
<action dev="luc" type="fix" issue="MATH-198" due-to="Frederick Salardi">
481
Added an error detection for missing imaginary character while parsing complex string
483
<action dev="luc" type="fix" issue="MATH-199" due-to="Mick">
484
Detect numerical problems in Q.R decomposition for Levenberg-Marquardt estimator
485
and report them appropriately
487
<action dev="luc" type="fix" issue="MATH-200" due-to="Plamen Petrov">
488
Fixed several crashes in getCovariances() and guessParametersErrors() in
489
AbstractEstimator when some parameters are bound. The methods now explicitly
490
give result only about unbound parameters.
492
<action dev="brentworden" type="fix" issue="MATH-201" due-to="Peter Wyngaard">
493
Fixed truncation error in t-test classes for large t values.
495
<action dev="brentworden" type="fix" issue="MATH-204" due-to="Mick">
496
Added root checks for the endpoints.
499
<release version="1.2" date="2008-02-24"
43
500
description="This release combines bug fixes and new features. Most notable
44
501
among the new features are the estimation, optimization, geometry and ode
45
502
packages added from the Mantissa library. Implementations of fast Fourier