您的位置:

Mathnet:高效的数学库

Mathnet是一个高效的数学计算.NET库,支持多种数学领域的计算和图像展示。它提供了一些高效的数学计算功能,例如矩阵,向量,矩阵分解等,以及图像处理工具。

一、Mathnetism

Mathnetism是基于Mathnet的一种工具,它提供了一些有趣的功能,例如这条球的运动轨迹。

using MathNet.Numerics.Interpolation;

List
    pts = new List
    () {
    new Vector2D(0,0),
    new Vector2D(0,-175),
    new Vector2D(175,0),
    new Vector2D(0,175),
    new Vector2D(-175,0),
    new Vector2D(0,0),
};
var curve = CubicSpline.InterpolateNatural(pts);
    
   

然后我们可以使用Mathnetism来计算出每个时间点的位置,从而绘制出球的运动轨迹。

using MathNet.Spatial.Euclidean;

foreach(double i=0; i<2*Math.PI; i+=Math.PI/32) {
    Vector2D currentPos = curve.Evaluate(i);
    Console.WriteLine(currentPos);
}

二、Mathnet c#

Mathnet c#是Mathnet的一个库,它提供了一些常用的数学函数,例如判断一个数是否为素数。

var isPrime = NumberTheory.IsPrime(13);
Console.WriteLine(isPrime);

它还提供了一些常用的函数,例如求极值。

double maximum = Optimization.Brent(F, lowerBound, upperBound);

三、Mathnet fft

Mathnet fft提供了一些高效的傅里叶变换函数,例如求出一组时间序列的傅里叶变换。

double[] signal = new double[] { 1, 1, 1, 1, 0, 0, 0, 0 };
Complex[] signalComplex = signal.Select(e => new Complex(e, 0)).ToArray();
Complex[] spectrum = Fourier.Forward(signalComplex);

foreach (var c in spectrum)
{
    Console.WriteLine($"{c.Real} + {c.Imaginary}i");
}

四、Mathnet 几何

Mathnet 几何提供了一些有用的几何函数,例如判断两个点是否在一个圆上,计算距离等。

Circle circle = new Circle(new Vector2D(0, 0), 3);
Vector2D point1 = new Vector2D(1, 0);
Vector2D point2 = new Vector2D(4, 0);

bool onCircle1 = circle.OnCircle(point1);
bool onCircle2 = circle.OnCircle(point2);

double distance1 = circle.Distance(point1);
double distance2 = circle.Distance(point2);

Console.WriteLine(onCircle1);
Console.WriteLine(onCircle2);
Console.WriteLine(distance1);
Console.WriteLine(distance2);

五、Mathnetism巴克球

想知道一个巴塞尔球是如何生成的吗?Mathnetism巴克球提供了一种简单的方法。

Vector3D initialVertex = new Vector3D(Math.Sqrt(3) - 1, 0, -1);

IEnumerable
    vertices =
    Loop(initialVertex, v =\> new[] {
        Rotate(Orthogonal(v, new Vector3D(1, -1, 0)),  2 * Math.PI / 3, v),
        Rotate(Orthogonal(v, new Vector3D(1, -1, 0)), -2 * Math.PI / 3, v),
        Rotate(v,  Math.PI, new Vector3D(1, -1, 0))
    }, 4);
   

六、mathnet.numeric

mathnet.numeric提供了一些常用的数值扰动函数,例如计算最小二乘法的解。

Matrix
    A = //生成系数矩阵A
Vector
     b = //生成常量向量b
Vector
      x = A.Solve(b);
x = x.Add(Numerics.GenerateRandom(x.Count)) * (1 + Epsilon);
     
    
   

七、Mathnet CubicSpline

Mathnet CubicSpline提供了一些高效的样条插值函数,例如对以下数据进行样条插值。

double[] xs = new double[] { 0, 1, 2, 3 };
double[] ys = new double[] { 0, 1, 4, 9 };
var spline = CubicSpline.InterpolateAkima(xs, ys);
double interpolatedValue = spline.Interpolate(1.5);

八、Mathnet.Numerics求矩阵零空间吗

Mathnet.Numerics提供了一种高效的求矩阵零空间的方法,例如对以下矩阵求零空间。

Matrix
    matrix = //生成矩阵
var nullSpaceBasis = matrix.Kernel();
foreach(var vector in nullSpaceBasis) {
    Console.WriteLine(vector);
}
   

九、math.net.numerics Evaluate

math.net.numerics Evaluate提供了一些方便的函数,例如近似提取导数。

Func
    f = x => x * x;
Func
     df = Differentiate.FirstDerivative(f, 0.01);
double dfAt2 = df(2);
Console.WriteLine(dfAt2);