NMath Changelog ------------------------------------------------------------------------------ Version 5.1.0 ------------------------------------------------------------------------------ - Simplified the NMath installer. Updated license keys will be issued upon upgrade. A license file must now be deployed with your NMath applications. - Upgraded to Intel MKL 10.3 Update 6 with resulting performance increases. - Removed assembly NMathShared.dll. - Added assembly NMathChartMicrosoft.dll containing class NMathChart, which provides static methods for plotting NMath types using the Microsoft Chart Controls for .NET. (For more information, see whitepaper "NMath Visualization Using the Microsoft Chart Controls.") - Added classes for solving first order initial value differential equations by the Runge-Kutta method. Class FirstOrderInitialValueProblem encapsulates a first order initial value differential equation, and class RungeKuttaSolver solves them. - Added static method NMathFunctions.NaNSort() for sorting vectors containing NaN's. NMathFunctions.Sort() no longer supports vectors containing NaN's. - NMathFunctions.Sort() now does a much faster in-place sort for compact vectors and an out-of-place sort for strided vectors. Previously all sorting was done out-of-place. - Added method NMathFunctions.Sign() that applies the signum function over real vectors. - Redesigned method NMathFunctions.Median(), which is now approximately 25X faster. - Added new Fill() method to vectorized random number generators for filling a DoubleVector. - Added NMathFunctions.CumulativeProduct() methods. - Improved performance of NMathFunctions.OuterProduct(). - Added exponential moving average filter weights to class MovingWindowFilter. - Added MatrixFunctions.Solve() methods for factoring and solving general sparse matrices. - Added class LevenbergMarquardtMinimizer and deprecated LevenburgMarquardtMinimizer. - Added static method NMathKernel.Init() for explicitly loading the kernel assembly (for example, on application start-up). ------------------------------------------------------------------------------ Version 5.0.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.3 Update 2 with resulting performance increases. - Added a new set of random number generator classes based on MKL vectorized random number generators. Continuous distributions: FloatRandomBetaDistribution, DoubleRandomBetaDistribution FloatRandomCauchyDistribution, DoubleRandomCauchyDistribution FloatRandomExponentialDistribution, DoubleRandomExponentialDistribution FloatRandomGammaDistribution, DoubleRandomGammaDistribution FloatRandomGaussianDistribution, DoubleRandomGaussianDistribution FloatRandomGumbelDistribution, DoubleRandomGumbelDistribution FloatRandomLaplaceDistribution, DoubleRandomLaplaceDistribution FloatRandomLogNormalDistribution, DoubleRandomLogNormalDistribution FloatRandomRayleighDistribution, DoubleRandomRayleighDistribution FloatRandomUniformDistribution, DoubleRandomUniformDistribution FloatRandomWeibullDistribution, DoubleRandomWeibullDistribution Discrete distributions: IntRandomBernoulliDistribution IntRandomBinomialDistribution IntRandomGeometricDistribution IntRandomHypergeometricDistribution IntRandomNegativeBionomialDistribution IntRandomPoissonDistribution IntRandomPoissonVaryingMeanDistribution IntRandomUniformBitsDistribution IntRandomUniformDistribution - Added class RandomNumberStream to encapsulate a stream of random numbers, and class RandomNumbers, an adapter for the RandomNumberStream class to give the same behavior as a scalar-type random number generator. - Added class IndependentRandomStreams for creating streams of independent random numbers, classes LeapfrogStream and LeapfrogRandomStreams for creating independent random streams using the leapfrog method, and classes SkipAheadStream and SkipAheadRandomStreams for creating streams of independent random numbers using the skip-ahead method. - Added classes QuasiRandomNumberGenerator for generating sequences of quasirandom points, class NiederreiterQuasiRandomGenerator for generating quasirandom numbers using the Niederreiter method, and class SobolQuasiRandomGenerator for generating quasirandom numbers using the Sobal method. - Added classes for solving quadratic programming (QP) and nonlinear programming (NLP) problems. Classes DoubleFunctional and DoubleFunctionalDelegate encapsulate objective functions. Classes LinearConstraint and NonlinearConstraint derive from abstract base class Constraint and encapsulate problem constraints. Class QuadraticProgrammingProblem encapsulates a QP problem, and class ActiveSetQPSolver solves QP problems using an active set algorithm. Class NonlinearProgrammingProblem encapsulates an NLP problem. NMath solves NLP problems iteratively, using a sequential quadratic programming (SQP) algorithm. Class SequentialQuadraticProgrammingSolver is the abstract base class for SQP solvers, and concrete implementation ActiveSetLineSearchSQP solves NLP problems using an active set algorithm. Class ConstantSQPStepSize computes a constant step size for a SQP solver, and class L1MeritStepSize computes the step size based on sufficient decrease in the L1 merit function. Class LagrangianFunction represents the Lagrangian function associated with a NLP, and class DampedBFGSHessianUpdater updates the value of the Lagrangian Hessian based on iterate values using a quasi-Newton approximation. - Added new class KFoldsSubsets and deprecated the class KFoldSubsets to fix error with cross-validation subsets. - Added two-argument NMathFunctions.Cross() method. - Added NMathFunctions methods for complex numbers MaxAbs1Value(), MaxAbs1Index(), MinAbs1Value(), and MinAbs1Index() which compute the absolute value of a complex number as the sum of magnitudes of the real and imaginary parts, and modified methods MaxAbsValue(), MaxAbsIndex(), MinAbsValue(), and MinAbsIndex() to use the Euclidean distance. - Fixed a memory leak in convolution code. ------------------------------------------------------------------------------ Version 4.1.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.2 Update 5 with resulting performance increases. - Replaced CLI C++ kernel with a pure C# kernel that invokes MKL using PInvoke() to improve .NET 4.0 experience. - Added class FirstOrderInitialValueProblem to encapsulate a first order initial value differential equation. - Added class RungeKuttaSolver for solving first order initial value differential equations by the Runge-Kutta method. - Added SavitzkyGolay class to generate filtering coefficients for data smoothing or for computing smooth Nth-derivatives in noisy data. - Added a SavitzkyGolayFilter class to both smooth data or compute the smoothed n-derivative of the the data. New boundary handling options for smooth transitions to the data boundaries. - Added INonlinearLeastSqMinimizer and IBoundedNonlinearLeastSqMinimizer interfaces. Class TrustRegionMinimizer now implements IBoundedNonlinearLeastSqMinimizer. Class LevenburgMarquardtMinimizer now implements INonlinearLeastSqMinimizer. - Added classes BoundedOneVariableFunctionFitter and BoundedMultiVariableFunctionFitter which derive from OneVariableFunctionFitter and MultiVariableFunctionFitter, respectively, and accept linear bounds on the solution. - Class OneVariableFunctionFitter is now templatized on INonlinearLeastSqMinimizer, and BoundedOneVariableFunctionFitter is templatized on IBoundedNonlinearLeastSqMinimizer. - Class MultiVariableFunctionFitter is now templatized on INonlinearLeastSqMinimizer, and class BoundedMultiVariableFunction is templatized on IBoundedNonlinearLeastSqMinimizer. - Added GSVDecomp and GSVDecompServer classes to compute the generalized singular value decomposition (GSVD) of a pair of general rectangular matrices. - Added class BoxCoxTransformation which performs a Box-Cox power transformation to make non-normal data resemble normally-distributed data. - Added accessor for the Hessian in class VariableMetricMinimizer. - Added "force through origin" option to class PolynomialLeastSquares. - Fixed several minor issues with CLS compliance. ------------------------------------------------------------------------------ Version 4.0.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.2 Update 1. - Repackaged CenterSpace.NMath.Core, CenterSpace.NMath.Matrix, and CenterSpace.NMath.Analysis namespaces into a single product to simplify product dependencies. - Reconfigured the NMath CLI C++ kernel to load the appropriate native kernel (32-bit or 64-bit) at runtime. You can now build your NMath application using the "Any CPU" build configuration, and deploy to either 32-bit or 64-bit environments. - Added classes FloatForward1DFFT, DoubleForward1DFFT, FloatComplexForward1DFFT, and DoubleComplexForward1DFFT to the CenterSpace.NMath.Core namespace for calculating the 1D discrete fourier transform (DFT). - Added classes FloatComplexBackward1DFFT and DoubleComplexBackward1DFFT to the CenterSpace.NMath.Core namespace for calculating the inverse 1D DFT. - Added classes FloatForward2DFFT, DoubleForward2DFFT, FloatComplexForward2DFFT, and DoubleComplexForward2DFFT to the CenterSpace.NMath.Core namespace for calculating the 2D discrete fourier transform (DFT). - Added classes FloatComplexBackward2DFFT and and DoubleComplexBackward2DFFT to the CenterSpace.NMath.Core namespace for calculating the inverse 2D DFT. - Added classes FloatSymmetricBackward1DFFT and DoubleSymmetricBackward1DFFT to the CenterSpace.NMath.Core namespace for exploiting the complex conjugate symmetry of forward FFT results computed on real data when inverting this data back to the real domain. - Added classes FloatSymmetricSignalReader, FloatSymmetric2DSignalReader, DoubleSymmetricSignalReader, and DoubleSymmetric2DSignalReader to the CenterSpace.NMath.Core namespace for unpacking symmetric complex conjugate signals. - Added advanced, highly configurable classes FFTConfiguration, FloatGeneral1DFFT, and DoubleGeneral1DFFT to the CenterSpace.NMath.Core namespace for computing FFTs with strided signal data. - Added classes Float1DConvolution, Double1DConvolution, FloatComplex1DConvolution, and DoubleComplex1DConvolution to the CenterSpace.NMath.Core namespace for performing linear convolutions on real and complex 1D data. - Added classes Float1DCorrelation, Double1DCorrelation, FloatComplex1DCorrelation, and DoubleComplex1DCorrelation to the CenterSpace.NMath.Core namespace for performing linear correlation on real and complex 1D data. - Added FrobeniusNorm() methods to NMath general matrix classes for computing the Frobenius norm. - Added class LevenburgMarquardtMinimizer to the CenterSpace.NMath.Analysis namespace for solving nonlinear least squares problems using the Levenberg-Marquardt method. ****************************************************************************** * NMath was previously distributed as three separate products: * NMath Core, NMath Matrix, and NMath Analysis. ****************************************************************************** ------------------------------------------------------------------------------ NMath Core Version 2.6.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.1 Update 2. - Added custom visualizers for matrix and vector classes. - Added overload to DoubleVector.Add() method for adding a vector to another vector in place. - Improved efficiency of NMathFunctions.SumOfSquares(). - Added MNMathFunctions.Pseudoinverse() method using transpose and inverse. - Organized classes into solution folders inside Visual Studio. - Added VS 2008 solutions for all examples and source editions. - Added Add(System.Object) method to all types which implement IEnumerable. ------------------------------------------------------------------------------ NMath Matrix Version 3.0.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.1 Update 1. - Added class DoubleCOWeightedLeastSq for solving weighted least squares (WLS) problems using a complete orthogonal (CO) decomposition technique. - Added class DoubleIterativelyReweightedLeastSq for solving iteratively reweighted least squares (IRLS) problems. - Added classes DoubleLeastSqWeightingFunction, DoubleBisquareWeightingFunction, and DoubleFairWeightingFunction for least squares weighting functions. - Added classes DoubleSparseVector, DoubleComplexSparseVector, and SparseVectorData for storing sparse vectors. - Added classes DoubleCsrSparseMatrix, DoubleSymCsrSparseMatrix, DoubleComplexCsrSparseMatrix, DoubleHermCsrSparseMatrix, SparseMatrixData, ISparseMatrixStorage, and CompressedSparseRow for storing general sparse matrices in compressed sparse row (CSR) format. - Added classes SparseMatrixFact, DoubleSparseFact, DoubleSparseSymFact, DoubleSparseSymPDFact, DoubleComplexSparseFact, DoubleSparseHermFact, and DoubleSparseHermPDFact for factoring general sparse matrices. - Added MatrixFunctions.Pseudoinverse() method using SVD. - Organized classes into solution folders inside Visual Studio. - Added VS 2008 solutions for all examples and source editions. - Added Add(System.Object) method to all types which implement IEnumerable. ------------------------------------------------------------------------------ NMath Analysis Version 2.0.0 ------------------------------------------------------------------------------ - Upgraded to Intel MKL 10.1 Update 1. - Added class TrustRegionMinimizer for solving both constrained and unconstrained nonlinear least squares problems using the Trust Region method, a variant of the Levenberg-Marquardt method. - Added class OneVariableFunctionFitter for fitting generalized one variable functions to data. - Added class MultiVariableFunctionFitter for fitting generalized multivariable functions to data. - Organized classes into solution folders inside Visual Studio. - Added VS 2008 solutions for all examples and source editions. - Added Add(System.Object) method to all types which implement IEnumerable.