aardio调用MathNet科学计算库

By admin at 2022-05-12 • 0人收藏 • 1033人看过

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 满足上述四组要求的数值

image.png

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

MathNetNumerics.zip


4 个回复 | 最后更新于 2022-05-13
2022-05-12   #1

线性拟合

image.png

import console; 

import dotNet;
var numdll = dotNet.load("\MathNet.Numerics.dll");
var Numerics = numdll.import("MathNet.Numerics");
var x={};
var y={};
for(i=1;5;1){
	x[i] = i;
	y[i] = i+5;
}
//拟合y=kx+b
var ret = Numerics.Fit.Line(x,y);
//输出结果
console.log(ret)
//取第一个b
console.log(ret.Item1)
//取第二个K
console.log(ret.Item2)

console.pause(true);

多项式:

其中:与直线拟合一样,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]

var res = Fit.Polynomial(X, Y, 4);
console.dump(res)

image.png

2022-05-12   #2

中值平滑滤波:


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

image.png

这里说下, 怎么得到的结果.

因为我设置的滤波数=2, 所以, (1+10)/2=5.5 , (10+2)/2=6 , (2+2.5)/2=2.25 , ...

MathNet.Filtering.zip


2022-05-12   #3

跟进...

虽然自己还没有接触到这一块

2022-05-13   #4

感谢提供一个新的思路用net计算,以前科学计算都是fortran,python+numpy或者新秀julia

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...