Math.NET Numerics aims to provide methods and algorithms for numerical computations in science, engineering and every day use. Covered topics include special functions, linear algebra, probability models, random numbers, interpolation, integration, regression, optimization problems and more.
Math.NET Numerics is part of the Math.NET initiative and is the result of merging dnAnalytics with Math.NET Iridium, replacing both. Available for free under the MIT License. It targets Microsoft .NET 5.0, .NET 4.6.1 and higher, and .NET Standard 2.0 and higher. In addition to a purely managed implementation it also supports native hardware optimization. See Platform Support for full details.
See NuGet & Binaries for a complete list of our NuGet packages, Zip files and the release archive.
Being written in it, Math.NET Numerics works very well with C# and related .Net languages.
When using Visual Studio or another IDE with built-in NuGet support, you can get started
quickly by adding a reference to the MathNet.Numerics
NuGet package. Alternatively you can grab
that package with the command line tool with nuget.exe install MathNet.Numerics -Pre
or simply download the Zip package.
let's say we have a matrix \(\mathrm{A}\) and want to find an orthonormal basis of the kernel or null-space of that matrix, such that \(\mathrm{A}x = 0\) for all \(x\) in that subspace.
|
Even though the core of Math.NET Numerics is written in C#, it aims to support F#
just as well. In order to achieve this we recommend to reference the MathNet.Numerics.FSharp
package in addition to MathNet.Numerics
, which adds a few modules to make it more
idiomatic and includes arbitrary precision types (BigInteger, BigRational).
open MathNet.Numerics.LinearAlgebra
let m = matrix [[ 1.0; 2.0 ]
[ 3.0; 4.0 ]]
let m' = m.Inverse()
It also works well in the interactive F# environment (REPL) which can be launched with
fsharpi
on all platforms (including Linux). As a start let's enter the following lines
into F# interactive. Append ;;
to the end of a line to run all code up to there
immediately and print the result to the output. Use the tab key for auto-completion or #help;;
for help.
For convenience our F# packages include a small script that sets everything up properly:
#load "../packages/MathNet.Numerics.FSharp/MathNet.Numerics.fsx"
open MathNet.Numerics
SpecialFunctions.Gamma(0.5)
open MathNet.Numerics.LinearAlgebra
let m : Matrix<float> = DenseMatrix.randomStandard 50 50
(m * m.Transpose()).Determinant()
Let's use Visual Basic to find the polynomial roots \(x\) such that \(2x^2 - 2x - 2 = 0\) numerically. We already know there are two roots, one between -2 and 0, the other between 0 and 2:
|
You need a recent version of Mono in order to use Math.NET Numerics on anything other than Windows. Luckily there has been great progress lately to make both Mono and F# available as proper Debian packages. In Debian testing and Ubuntu 14.04 (trusty/universe) you can install both of them with APT:
|
If you don't have NuGet yet:
|
Then you can use NuGet to fetch the latest binaries in your working directory.
The -Pre
argument causes it to include pre-releases, omit it if you want stable releases only.
|
In practice you'd probably use the Monodevelop IDE instead which can take care of fetching and updating
NuGet packages and maintain assembly references. But for completeness let's use the compiler directly this time.
Let's create a C# file Start.cs
:
|
Compile and run:
|
Which will print something like the following to the output:
|
See Intel MKL for details how to use native providers on Linux.