Author: luc
Date: Sun Jul 19 16:47:56 2009
New Revision: 795571
URL: http://svn.apache.org/viewvc?rev=795571&view=rev
Log:
first attempt at release notes for 2.0
Modified:
commons/proper/math/trunk/RELEASENOTES.txt
Modified: commons/proper/math/trunk/RELEASENOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/RELEASENOTES.txt?rev=795571&r1=795570&r2=795571&view=diff
==============================================================================
 commons/proper/math/trunk/RELEASENOTES.txt (original)
+++ commons/proper/math/trunk/RELEASENOTES.txt Sun Jul 19 16:47:56 2009
@@ 1,161 +1,442 @@
 Apache Commons Math Version 1.2RC2
+ Apache Commons Math Version 2.0
RELEASE NOTES

This 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.
+
+This release is a major one. It combines bug fixes, new features and
+changes to existing features. Most notable among the new features are:
+  decomposition algorithms in the linear algebra (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 fieldbased matrix (Complex, Fraction ...),
+  support for genetic algorithms
+  several new optimization algorithms (Dantzig's simplex for linear
+ contrained 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 (AdamsBashforth and AdamsMoulton) with
+ variable stepsize
+  regression algorithms
+  rank transformations
+
+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 commonsmath
+is Java 5. Switching to this new version is thought to be an easy task
+and it is recommended to do it. Most of the compilation errors users
+will encounter after the switch will be due to classes moved due to
+packages reorganization. These errors are simply solved by adjusting
+the import statements in users code. In any case, you can ask for help
+by sending a message to the users mailing list: user@commons.apache.org.
For more information on Apache Commons Math, see
http://commons.apache.org/math/


+
+
SUMMARY OF CHANGES
ADDITIONS
+New features:
+
+o Added curve fitting with a general case and two specific cases
+ (polynomial and harmonic).
+
+o Added a way to limit the number of functions evaluations in
+ optimizers (the number of iterations could already be limited)
+ Thanks to Gilles Sadowski.
+
+o Added support for rank transformations.
+
+o Added support for any type of field in linear algebra (FielxMatrix,
+ FieldVector, FieldLUDecomposition)
+
+o The 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 deprecated
+
+o Added a blockbased storage type for dense matrices improving speed
+ for large dimensions
+
+o Added AggregateSummaryStatistics class to support aggregation of
+ SummaryStatistics. Thanks to John Bollinger.
+
+o Added general Field and FieldElement interfaces to allow generic
+ algorithms to operate on fields. The library already provides
+ several implementations: Complex, Fraction, BigFraction and BigReal
+
+o Added a SparseRealVector class that implements a sparse vector for
+ the RealVector interface.
+
+o Added a getCovariance method to singular value decomposition Thanks
+ to Dimitri Pourbaix.
+
+o Added 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.
+
+o Added 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.
+
+o Support 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.
+
+o New ODE integrators have been added: the explicit AdamsBashforth
+ and implicit AdamsMoulton 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, Gstop ...
+
+o All 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.
+
+o All 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.
+
+o Switching 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.
+
+o Added factory methods to create Chebyshev, Hermite, Laguerre and
+ Legendre polynomials.
+
+o Added add, subtract, negate, multiply and toString methods to
+ PolynomialFunction.
+
+o Added a LegendreGauss integrator.
+
+o Added add/subtract/multiply/divide functions with integer parameters
+ to Fraction
+
+o Added some utility functions to compute powers with integral types
+ (int, long, BigInteger).
+
+o Added a scalb method in MathUtils. This method is similar to the
+ method with same name added in java.lang.Math as of Java 6.
+
+o Added several convenience methods and constants for Vector3D and
+ Rotation.
+
+o MATH114: Added PearsonsCorrelation class to compute correlation
+ matrices, standard errors and pvalues for correlation
+ coefficients. Thanks to John Gant.
+
+o MATH114: Added Covariance class to compute variancecovariance
+ matrices in new correlation package.
+
+o MATH136: Added Spearman's rank correlation
+ (SpearmansCorrelation). Thanks to John Gant.
+
+o MATH152: Added support for multidimensional Fourier
+ transform. Thanks to Remi Arntzen.
+
+o MATH177: Added a new univariate subpackage below the optimization
+ package. Thanks to Gilles Sadowski.
+
+o MATH178: Added support for the Zipf distribution. Thanks to Paul
+ Cowan.
+
+o MATH202: Added the getSwitchingFunctions and
+ clearSwitchingFunctions to the FirstOrderIntegrator interface and
+ all its implementations
+
+o MATH203: Added Mauro's patch to support multiple regression. Thanks
+ to Mauro Talevi.
+
+o MATH212: Added support for copying statistics. Changes to stats
+ classes include copy constructor, static copy(,) and instance
+ copy() methods. Added copy() to UnivariateStatistic and
+ StorelessUnivariateStatistic interfaces. Thanks to Jason
+ C. HandUber.
+
+o MATH215: Added Fast Hadamard Transform. Thanks to Bernhard
+ GrÃ¼newaldt.
+
+o MATH219: Added removeData methods for the SimpleRegression
+ class. This allows to support regression calculations across a
+ sliding window of (timebased) observations without having to
+ recalculate for the entire window every time. Thanks to Andrew
+ Berry.
+
+o MATH220: Added JAMAlike 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.
+
+o MATH220: Added JAMAlike 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
+ (LUdecomposition, Cholesky decomposition) or an exact or
+ leastsquares solution (QRdecomposition).
+
+o MATH222: Added beta distribution. Thanks to Ted Dunning.
+
+o MATH222: Added probability density functions computation for
+ distributions for which it is feasible. Thanks to Ted Dunning.
+
+o MATH229: Added a removal feature for observations in descriptive
+ statistics. Thanks to Cyril Briquet.
+
+o MATH230: Added support for sparse matrix. Thanks to Sujit Pal and
+ Ismael Juma.
+
+o MATH231: Added an abstract matrix implementation simplifying
+ extension by users.
+
+o MATH232: Added Frobenius matrix norm.
+
+o MATH234: Added setter methods for rows and columns in matrices.
+
+o MATH236: Added nth root computation for complex numbers. Thanks to
+ Bernhard GrÃ¼newaldt.
+
+o MATH246: Added an optimizer for constrained linear problems based
+ on 2phases standard simplex. Thanks to Benjamin McCann.
+
+o MATH247: Added a MathUtils method to check equality given some
+ error bounds. Thanks to Benjamin McCann.
+
+o MATH251: Added a BigFraction class that does not overflow when big
+ numerators or denominators are used. Thanks to Benjamin Croizet.
+
+o MATH256: Added Fraction.toString()
+
+o MATH266: Added a clustering package with an implementation of the
+ kmeans++ algorithm Thanks to Benjamin McCann.
+
+o MATH267: Added digamma function. Thanks to Ted Dunning.
+
+o MATH277: Added a scalar multiply to the Complex class Thanks to
+ Mark Anderson.
+
+o MATH278: Added robust locally weighted regression (Loess). Thanks
+ to Eugene Kirpichov.
+
+o MATH279: Added a check for too few rows with respect to the number
+ of predictors in linear regression Thanks to Michael Bjorkegren.
+
+Fixed Bugs:
* Added the estimation, optimization, geometry and ode packages from the
 Mantissa library.

* MATH120. Added Pascal distribution implementation. Thanks to Todd C.
 Parnell.

* MATH148. Added QR Decomposition. Thanks to Joni Salonen.

* MATH140. Added Fast Fourier Transform implementation. Thanks to Xiaogang
 Zhang.

* MATH173. Added oneway ANOVA implementation. Thanks to Bob MacCallum.

* Added an angle normalization method in MathUtils to force angles in some
 userdefined interval

* Added vectorial covariance computation (either sample or population
 covariance)

* Added multivariate summary statistics.


BUG FIXES

* Fixed numerous warnings in test code.

* MATH156. Use the initial guess provided by the user in
 BrentSolver.solve(), thus improving speed. Thanks to Tyler Ward.

* MATH18. Made ComplexFormat format double values with a provided
 NumberFormat instance instead of using the real part format for all values.
 Thanks to Phil Steitz.

* MATH60. Modified ProperFractionFormat to reject embedded minus signs.
 Thanks to Nhung Nnguyen.

* MATH151. Added a nextAfter method in MathUtils to return the next
 machinerepresentable 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. Thanks to
 Luc Maisonobe.

* MATH85. Modified getSumSquaredErrors method in SimpleRegression to always
 return a nonnegative result. Thanks to Mark Osborn, Luc Maisonobe.

* MATH153. Corrected nextInt and nextLong to handle wide value ranges.
 Thanks to Remi Arntzen.

* MATH166. Increased default precision of Gamma and Beta functions. Thanks
 to Lukas Theussl.

* MATH167. Modified NormalDistributionImpl.cumulativeProbablity to catch
 MaxIterationsExceededException and return 0 or 1, resp. if the argument is
 more than 20 standard deviations from the mean.

* MATH174. Changed Mean.evaluate() to use a twopass algorithm, improving
 accuracy by exploiting the the fact that this method has access to the full
 array of data values.

* MATH175. Added check and rescaling of expected counts to sum to sum of
 expected counts if necessary in ChiSquare test. Thanks to Carl Anderson.

* MATH164. Handle multiplication of Complex numbers with infinite parts
 specially.

* MATH182. Add integer overflow checks in Fraction constructor using double
 parameter.

* MATH185. Throw EOFException when using empty files with ValueServer in
 replay and digest modes.

* MATH184. Fixed AbstractIntegerDistribution cumulativeProbablility(,) to
 correctly handle double arguments. Thanks to Yegor Bryukhov.


UPDATES

* MATH158. Added log function to MathUtils. Thanks to Hasan Diwan.

* MATH160. Added two sample (binned comparison) ChiSquare test. Thanks to
 Matthias Hummel.

* MATH170. Added SynchronizedDescriptiveStatistics class. Thanks to David J.
 M. Karlsen.

* MATH154. Added addAndCheck, mulAndCheck, and subAndCheck MathUtils methods
 for long integer arguments. Thanks to Remi Arntzen.

* MATH171. Merged most functions from ComplexUtils into Complex class, added
 static factory method to Complex. Thanks to Niall Pemberton.

* Deprecated abstract factory methods and made DescriptiveStatistics and and
 SummaryStatistics concrete classes. Pushed implementations up from
 DescriptiveStatisticsImpl, SummaryStatisticsImpl. Made implementations of
 statistics configurable via setters.

* MATH176. Add errors guessing to leastsquares estimators. Thanks to
 Kazuhiro Koshino.

* MATH179. Add tests for Fraction constructor using double parameter. Thanks
 to Niall Pemberton.

* MATH181. Add Fraction constructor using max denominator value. Thanks to
 Niall Pemberton.

* Added a equals and hash methods in MathUtils to check for double arrays

* MATH191. Added getSumOfLogs method to SummaryStatistics and made SumOfLogs
 instance used by GeometricMean configurable.

* MATH188. Made 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. Thanks to
 Sebastian Bazley.

DEPRECATIONS SUMMARY

* The abstract factory pattern used to enable pluggable implementations in the
 statistics, analysis and distributions packages has been deprecated and
 replaced by setter injection.

* Nonlocalized exception messages and associated constructors have been
 deprecated and replaced by localized versions.

* Most methods from the ComplexUtils class have been deprecated, with
 implementations moved to the Complex class.

See "clirrreport.html" included in the docs directory of the binary
distribution for a detailed list of API changes. The "errors" reported at the
top of the report are due to protected fields being moved to superclasses.
These fields are still available, so there is no backward compatibility issue.

BUILDING COMMONS MATH

Commons math can be built from the source distribution using Maven 1, Maven 2,
or Ant, launching any one of these from the toplevel directory of the unpacked
zip or tarball. For detailed build instructions and information about how to
contribute to Commons Math, see "developers.html" in the docs directory of the
binary distribution.
+o Fixed an infinite loop encountered in some backward integration
+ cases for ODE solvers. Thanks to Pascal Parraud.
+o Fixed inconsistencies in the naming scheme for static fields in
+ Vector3D and Rotation with respect to the overall library.
+
+o MATH177: Redesigned the optimization framework for a simpler yet
+ more powerful API. Added nonlinear conjugate gradient optimizer.
+
+o MATH193: Javadoc and style fixes. Thanks to Michael Heuer and Sebb.
+
+o MATH198: Added an error detection for missing imaginary character
+ while parsing complex string Thanks to Frederick Salardi.
+
+o MATH199: Detect numerical problems in Q.R decomposition for
+ LevenbergMarquardt estimator and report them appropriately Thanks
+ to Mick.
+
+o MATH200: Fixed several crashes in getCovariances() and
+ guessParametersErrors() in AbstractEstimator when some parameters
+ are bound. The methods now explicitly give result only about unbound
+ parameters. Thanks to Plamen Petrov.
+
+o MATH201: Fixed truncation error in ttest classes for large t
+ values. Thanks to Peter Wyngaard.
+
+o MATH204: Added root checks for the endpoints. Thanks to Mick.
+
+o MATH205: Fixed formula in fast cosine transformer javadoc
+ comments. Thanks to Roman Werpachowski.
+
+o MATH207: Added Genetic Algorithm implementation. Thanks to David
+ Stefka.
+
+o MATH209: Fixed dimension error on output vector for the operate
+ method in RealMatrixImpl and BigMatrixImpl classes. Thanks to Thomas
+ Chust.
+
+o MATH210: Changed 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.
+
+o MATH213: Changed 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).
+
+o MATH214: Replaced size adjustment of all steps of fixed steps
+ RungeKutta integrators by a truncation of the last step only.
+
+o MATH216: Improved fast Fourier transform efficiency. Thanks to
+ Cyril Briquet.
+
+o MATH221: Changed the Complex.equals() method so that it considers
+ +0 and 0 are equal, as required by IEEE754 standard. Thanks to
+ Dieter Roth.
+
+o MATH223: Greatly improved QRdecomposition speed using transposed
+ matrices internally. Thanks to John Mulcahy.
+
+o MATH226: Fixed an error in CorrelatedRandomVectorGenerator leading
+ to a component of the generated vector being constant. Thanks to
+ Stuart Siegel.
+
+o MATH227: Fixed F distribution inverse CDF computation for small
+ denominator degrees of freedom. Thanks to Joerg Henning.
+
+o MATH238: Fixed an error in gcd computation for large values. Thanks
+ to Christian Semrau.
+
+o MATH240: Fixed error in factorial computation for 17 <= n <= 20.
+ Thanks to Christian Semrau.
+
+o MATH241: Fixed error in binomial coefficient computation. Thanks to
+ Christian Semrau.
+
+o MATH243: Fixed an error in computing gcd and lcm for some extreme
+ values at integer range boundaries. Thanks to Christian Semrau.
+
+o MATH248: Greatly improved multiplication speed for sparse matrices
+
+o MATH252: Fixed a comparison error when two different fractions
+ evaluate to the same double due to limited precision.
+
+o MATH253: Fixed threading issues with MathException and
+ MathRuntimeException Thanks to Sebb.
+
+o MATH254: Fixed threading issues with UnivariateRealSolverUtils
+ factory Thanks to Sebb.
+
+o MATH255: Reduced visibility of MessagesResources_fr.contents field
+ to private Thanks to Sebb.
+
+o MATH257: Fixed inconsistent access to multidimensional array in
+ FastFourierTransformer Thanks to Sebb.
+
+o MATH263: Added getNorm1, getNormInf, distance1 and distanceInf to
+ the Vector3D class
+
+o MATH264: Added an utility equality method between double numbers
+ using tolerance in ulps (Units in Last Position) Thanks to Gilles
+ Sadowski.
+
+o MATH265: Added distance1, distance and distanceInf utility methods
+ for double and int arrays in MathUtils Thanks to Benjamin McCann.
+
+o MATH272: Fixed a problem when setting some variables (several
+ variables were set instead of only one) Thanks to Benjamin McCann.
+
+o MATH273: Fixed a wrong check for basic variables Thanks to Benjamin
+ McCann.
+
+o MATH274: Fixed detection of not positive definite matrices in
+ Cholesky decomposition
+
+o MATH280: The 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.
+
+Changes:
+
+o Changed the return type of the various interpolation algorithms to
+ the specific implementation of UnivariateRealFunction each one uses
+ Thanks to Gilles Sadowski.
+
+o Completed internationalization of all error messages
+
+o Integration algorithms now can have both relative and absolute
+ accuracy settings.
+
+o The analysis package has been reorganized with several subpackages.
+
+o The 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.
+
+o Events handlers in the ODE package now also provide the switching
+ function variation (increasing/decreasing) when an event occurs
+
+o Clarified the ODE package by breaking in into several subpackages
+ and renaming classes (SwitchingFunctions/EventHandler,
+ SwitchingFunctionsHandler/CombinedEventsManager)
+
+o The FirstOrderDifferentialEquations, FirstOrderIntegrator and
+ FixedStepHandler interfaces now extends Serializable, allowing
+ integrators, problems and handlers to be embedded into users
+ Serializable classes.
+
+o Replaced public no argument constructors with IDENTITY or ZERO
+ static instances for immutable classes Vector3D and Rotation.
+
+o Greatly improved RealMatrixImpl and BigMatrixImpl performances, both
+ in terms of speed and in terms of temporary memory footprint.
+
+o Starting with version 2.0 of the library, the minimal version of the
+ Java platform required to compile and use commonsmath 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.
+
+o Removed deprecated features. This includes the following
+ changes. Factorybased 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.
+
+o MATH189: Changed FractionFormat to extend NumberFormat.
+
+o MATH217: Changed OLS regression implementation added in MATH203 to
+ use QR decomposition to solve the normal equations.
+
+o MATH218: The 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.
+
+o MATH242: Forced symmetry in binomialCoefficientLog and added test
+ cases for MathUtils. Thanks to Christian Semrau.
+
+o MATH276: Optimized Complex isNaN(), isInfinite() by moving
+ computation to constructor. Thanks to Mark Anderson.
+
+
+For complete information on commonsmath, including instructions on
+how to submit bug reports, patches, or suggestions for improvement,
+see the commonsmath website:
+
+http://commons.apache.org/math/
