Reworked redundancies, inconsistencies and unfortunate past design choices.
Significant namespace simplifications (-30%).
Favor and optimize for generic types, e.g. Vector<double>.
Drop the .Generic in the namespaces and flattened solver namespaces.
F#: all functions in the modules now fully generic, including the matrix function.
F#: SkipZeros instead of the cryptic nz suffix for clarity.
Add missing scalar-matrix routines.
Optimized mixed dense-diagonal and diagonal-dense operations (500x faster on 250k set).
More reasonable choice of return structure on mixed operations (e.g. dense+diagonal).
Add point-wise infix operators .*, ./, .% where supported (F#)
Vectors explicitly provide proper L1, L2 and L-infinity norms.
All norms return the result as double (instead of the specific value type of the matrix/vector).
Matrix L-infinity norm now cache-optimized (8-10x faster).
Vectors have a ConjugateDotProduct in addition to DotProduct.
Matrix.ConjugateTransposeAndMultiply and variants.
Matrix Factorization types fully generic, easily accessed by new Matrix<T> member methods (replacing the extension methods). Discrete implementations no longer visible.
QR factorization is thin by default.
Matrix factorizations no longer clone their results at point of access.
Add direct factorization-based Solve methods to matrix type.
Massive iterative solver implementation/design simplification, now mostly generic and a bit more functional-style.
Renamed iterative solver stop criteria from 'criterium' to 'criterion'.
New MILU(0) iterative solver preconditioner that is much more efficient and fully leverages sparse data. ~Christian Woltering
Matrices/Vectors now have more consistent enumerators, with a variant that skips zeros (useful if sparse).
Matrix/Vector creation routines have been simplified and usually no longer require explicit dimensions. New variants to create diagonal matrices, or such where all fields have the same value. All functions that take a params array now have an overload accepting an enumerable (e.g. OfColumnVectors).
Generic Matrix/Vector creation using builders, e.g. Matrix<double>.Build.DenseOfEnumerable(...)
Create a matrix from a 2D-array of matrices (top-left aligned within the grid).
Create a matrix or vector with the same structural type as an example (.Build.SameAs(...))
Removed non-static Matrix/Vector.CreateMatrix/CreateVector routines (no longer needed)
Add Vector.OfArray (copying the array, consistent with Matrix.OfArray - you can still use the dense vector constructor if you want to use the array directly without copying).
More convenient and one more powerful overload of Matrix.SetSubMatrix.
Matrices/Vectors expose whether storage is dense with a new IsDense property.
Various minor performance work.
Matrix.ClearSubMatrix no longer throws on 0 or negative col/row count (nop)
BUG: Fix bug in routine to copy a vector into a sub-row of a matrix.
Both canonical modulus and remainder operations on matrices and vectors.
Matrix kernel (null space) and range (column space)
Storage-aware non-inplace functional map on vectors and matrices
Pointwise power, exponential and natural logarithm for vectors and matrices.
Matrix positive-integer power
Matrix RemoveRow/RemoveColumn; more efficient InsertRow/InsertColumn
Native Linear Algebra/Intel MKL:
Thin QR factorization uses MKL if enabled for all types (previously just double)
Sparse matrix CSR storage format now uses the much more common row pointer convention and is fully compatible with MKL (so there is nothing in the way to add native provider support).
Providers have been moved to a Providers namespace and are fully generic again.
FAKE-based build (in addition to existing Visual Studio solutions) to clean, build, test, document and package independently of the CI server.
Finally proper documentation using FSharp.Formatting with sources included in the repository so it is versioned and can be contributed to with pull requests.
NuGet packages now also include the PCL portable profile 47 (.Net 4.5, Silverlight 5, Windows 8) in addition to the normal .Net 4.0 build and PCL profile 136 (.Net 4.0, WindowsPhone 8, Silverlight 5, Windows 8) as before. Profile 47 uses System.Numerics for complex numbers, among others, which is not available in profile 136.
NuGet packages now also include a .Net 3.5 build of the core library.
IO libraries have been removed, replaced with new .Data packages (see list on top).
Alternative strong-named versions of more NuGet packages (mostly the F# extensions for now), with the .Signed suffix.
Reworked solution structure so it works in both Visual Studio 11 (2012) and 12 (2013).
We can now run the full unit test suite against the portable builds as well.
Builds should now also work properly on recent Mono on Linux (including F# projects).
Fixed builds on platforms with case sensitive file systems. ~Gauthier Segay
Integration: simplification of the double-exponential transformation api design.
FFT: converted to static class design and shorter names for simpler usage. Drop now redundant Transform class.
Generate: ported synthetic data generation and sampling routines from Neodym (includes all from old Signals namespace). F# module for higher order functions.
Euclid: modulus vs remainder (also BigInteger), integer theory (includes all from old NumberTheory namespace).
Complex: common short names for Exp, Ln, Log10, Log.
Complex: fix issue where a negative zero may flip the sign in special cases (like Atanh(2), where incidentally MATLAB and Mathematica do not agree on the sign either).
Complex: routines to return all two square and three cubic roots of a complex number.
Complex: More robust complex Asin/Acos for large real numbers.
Evaluate: routine to evaluate complex polynomials, or real polynomials at a complex point.
CommonParallel now also supported in .Net 3.5 and portable profiles; TaskScheduler can be replaced with custom implementation ~Thomas Ibel
F# BigRational type cleaned up and optimized ~Jack Pappas
F# BigRational IsZero, IsOne, IsInteger, create from fraction.
F# BigRational Reciprocal, Power operator support (**), support for negative integer powers.
F# functions now use the clearer Func suffix instead of just F if they return a function.
Precision: reworked, now much more consistent. If you use AlmostEqual with numbers-between/ULP semantics, please do review your code to make sure you're still using the expected variant!. If you use the decimal-places semantics, you may need to decrement the digits argument to get the same behavior as before.
Much less null checks, our code generally only throws ArgumentNullException if an unexpected null argument would not have caused an immediate NullReferenceException.
Cases where ArgumentOutOfRangeExceptions where thrown with wrong arguments (i.e. no parameter name) now throw ArgumentException instead.
Tests now have category attributes (to selectively run or skip categories).
2.6.2 - 2013-10-21
Patch release, fixing the NuGet package to work better in WindowsPhone 8 projects. Assemblies are not changed.
2.6.1 - 2013-08-13
BUG: fixing a bug in ArrayStatistics.Variance on arrays longer than 46341 entries.
Linear Curve Fitting: Linear least-squares fitting (regression) to lines, polynomials and linear combinations of arbitrary functions. Multi-dimensional fitting. Also works well in F# with the F# extensions.
Brent's method. ~Candy Chiu, Alexander Täschner
Bisection method. ~Scott Stephens, Alexander Täschner
Broyden's method, for multi-dimensional functions. ~Alexander Täschner
Robust Newton-Raphson variant that tries to recover automatically in cases where it would fail or converge too slowly. This modification makes it more robust e.g. in the presence of singularities and less sensitive to the search range/interval.
All algorithms support a TryFind-pattern which returns success instead of throwing an exception.
Special case for quadratic functions, in the future to be extended e.g. to polynomials.
Basic bracketing algorithm
Also works well in F# with the F# extensions.
Native eigenvalue decomposition (EVD) support with our MKL packages ~Marcus Cuda
Statistics: Empty statistics now return NaN instead of either 0 or throwing an exception. This may break code in case you relied upon the previous unusual and inconsistent behavior.
Linear Algebra: More reasonable ToString behavior for matrices and vectors. This may break code if you relied upon ToString to export your full data to text form intended to be parsed again later. Note that the classes in the MathNet.Numerics.IO library are more appropriate for storing and loading data.
More consistent behavior for empty and single-element data sets: Min, Max, Mean, Variance, Standard Deviation etc. no longer throw exceptions if the data set is empty but instead return NaN. Variance and Standard Deviation will also return NaN if the set contains only a single entry. Population Variance and Population Standard Deviation will return 0 in this case.
Reworked order statistics (Quantile, Quartile, Percentile, IQR, Fivenum, etc.), now much easier to use and supporting compatibility with all 9 R-types, Excel and Mathematica. The obsolete Percentile class now leverages the new order statistics, fixing a range check bug as side effect.
New Hybrid Monte Carlo sampler for multivariate distributions. ~manyue
New financial statistics: absolute risk and return measures. ~Phil Cleveland
Explicit statistics for sorted arrays, unsorted arrays and sequences/streams. Faster algorithms on sorted data, also avoids multiple enumerations.
Some statistics like Quantile or empirical inverse CDF can optionally return a parametric function when multiple evaluations are needed, like for plotting.
More reasonable ToString behavior for matrices and vectors: ToString methods no longer render the whole structure to a string for large data, among others because they used to wreak havoc in debugging and interactive scenarios like F# FSI. Instead, ToString now only renders an excerpt of the data, together with a line about dimension, type and in case of sparse data a sparseness indicator. The intention is to give a good idea about the data in a visually useful way. How much data is shown can be adjusted in the Control class. See also ToTypeString and ToVector/MatrixString.
Performance: reworked and tuned common parallelization. Some operations are up to 3 magnitudes faster in some extreme cases. Replaced copy loops with native routines. More algorithms are storage-aware (and should thus perform better especially on sparse data). ~Thomas Ibel, Iain McDonald, Marcus Cuda
Fixed range checks in the Thin-QR decomposition. ~Marcus Cuda
BUG: Fixed bug in Gram Schmidt for solving tall matrices. ~Marcus Cuda
Vectors now implement the BCL IList interfaces (fixed-length) for better integration with existing .Net code. ~Scott Stephens
Matrix/Vector parsing has been updated to be able to parse the new visual format as well (see ToMatrixString).
DebuggerDisplay attributes for matrices and vectors.
Map/IndexedMap combinators with storage-aware and partially parallelized implementations for both dense and sparse data.
Reworked Matrix/Vector construction from arrays, enumerables, indexed enumerables, nested enumerables or by providing an init function/lambda. Non-obsolete constructors now always use the raw data array directly without copying, while static functions always return a matrix/vector independent of the provided data source.
F#: Improved extensions for matrix and vector construction: create, zeroCreate, randomCreate, init, ofArray2, ofRows/ofRowsList, ofColumns/ofColumnsList, ofSeqi/Listi (indexed). Storage-aware for performance.
F#: Updated map/mapi and other combinators to leverage core implementation, added -nz variants where zero-values may be skipped (relevant mostly for sparse matrices).
F#: Idiomatic slice setters for sub-matrices and sub-vectors
F#: More examples for matrix/vector creation and linear regression in the F# Sample-package.
Control: Simpler usage with new static ConfigureAuto and ConfigureSingleThread methods. Resolved misleading configuration logic and naming around disabling parallelization.
Control: New settings for linear algebra ToString behavior.
Fixed range check in the Xor-shift pseudo-RNG.
Parallelization: Reworked our common logic to avoid expensive lambda calls in inner loops. Tunable.
F#: Examples (and thus the NuGet Sample package) are now F# scripts prepared for experimenting interactively in FSI, instead of normal F# files. Tries to get the assembly references right for most users, both within the Math.NET Numerics solution and the NuGet package.
Various minor improvements on consistency, performance, tests, xml docs, obsolete attributes, redundant code, argument checks, resources, cleanup, nuget, etc.
2.4.0 - 2013-02-03
Drops the dependency on the zlib library. We thus no longer have any dependencies on other packages. ~Marcus Cuda, Thomas Ibel
Adds Modified Bessel & Struve special functions ~Wei Wu
BUG: Fixes a bug in our iterative kurtosis statistics formula ~Artyom Baranovskiy
Linear Algebra: Performance work, this time mostly around accessing matrix rows/columns as vectors. Opting out from targeted patching in our matrix and vector indexers to allow inlining.
Linear Algebra: Fixes an issue around Thin-QR solve ~Marcus Cuda
Linear Algebra: Simplifications around using native linear algebra providers (see Math.NET Numerics With Native Linear Algebra)
F#: Adds the BigRational module from the F# PowerPack, now to be maintained here instead. ~Gustavo Guerra
F#: Better support for our Complex types (close to the F# PowerPack Complex type) ~Gustavo Guerra
2.3.0 - 2013-11-25
Portable Library: Adds support for WP8 (.Net 4.0 and higher, SL5, WP8 and .NET for Windows Store apps)
Portable Library: New: portable build also for F# extensions (.Net 4.5, SL5 and .NET for Windows Store apps)
Portable Library: NuGet: portable builds are now included in the main packages, no more need for special portable packages
Linear Algebra: Continued major storage rework, in this release focusing on vectors (previous release was on matrices)
Linear Algebra: Thin QR decomposition (in addition to existing full QR)
Linear Algebra: Static CreateRandom for all dense matrix and vector types
Linear Algebra: F#: slicing support for matrices and vectors
Distributions: Consistent static Sample methods for all continuous and discrete distributions (was previously missing on a few)
F#: better usability for random numbers and distributions.
F# extensions are now using F# 3.0
Updated Intel MKL references for our native linear algebra providers