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);