aardio调用MathNet科学计算库
By
admin
at 2022-05-12 • 0人收藏 • 1074人看过
MathNet 是一个开源科学计算库,旨在构建和维护涵盖基础数学的工具箱,以满足 .Net 开发人员的高级需求和日常需求。
其中 Math.NET Numerics 旨在为科学、工程和日常使用中的数值计算提供方法和算法。涵盖的主题包括特殊函数,线性代数,概率模型,随机数,插值,积分变换等等。
官方网站: https://www.mathdotnet.com
使用LU分解求解线性方程组(Ax=b)的解的简单例子:
3*X+1.4*Y+0*Z+0*U =1
1.4*X+2*Y+2.1*Z+0*U=2
0*X+2.1*Y+4*Z+3*U =3
0*X+0*Y+3*Z+3.4*U =4
那么可以求出: X , Y , Z , U 满足上述四组要求的数值
import console; import dotNet; var numdll = dotNet.load("\MathNet.Numerics.dll"); var LinearAlgebra = numdll.import("MathNet.Numerics.LinearAlgebra"); var matrix = LinearAlgebra.Double.DenseMatrix.OfArray( { {3, 1.4,0,0 }, {1.4, 2, 2.1, 0 }, {0 ,2.1,4,3 }, {0,0,3,3.4 } } ); var b = LinearAlgebra.Double.DenseVector( { 1, 2, 3, 4 } ); //使用LU分解方式求解 var X = matrix.LU().Solve(b); console.log(X); //使用Gram-Shmidt分解方法求解 var Y = matrix.GramSchmidt().Solve(b); console.log(Y); console.pause(true);
4 个回复 | 最后更新于 2022-05-13
中值平滑滤波:
import console; import dotNet; var numdll = dotNet.load("\MathNet.Filtering.dll"); var Filtering = numdll.import("MathNet.Filtering"); //设置滤波点数 var mm = Filtering.Median.OnlineMedianFilter(2); //提供大量滤波数据 var res = mm.ProcessSamples({ 1, 10, 2, 2.5,3,5,4,4 }); console.dump(res) //插入单个数据 var res = mm.ProcessSample(8); console.dump(res) //插入单个数据 var res = mm.ProcessSample(20); console.dump(res) console.pause(true);
这里说下, 怎么得到的结果.
因为我设置的滤波数=2, 所以, (1+10)/2=5.5 , (10+2)/2=6 , (2+2.5)/2=2.25 , ...
登录后方可回帖
线性拟合
多项式:
其中:与直线拟合一样,X为x轴的数组,Y为y轴数组,m为次方数。
比如平时我们使用较多的4次方,m就输入4,公式为:
y=res[4]*x^4 + res[3]*x^3 + res[2]*x^2 + res[1]*x + res[0]