aardio调用MathNet科学计算库

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

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

登录后方可回帖

登 录
信息栏
公 告:

专注分享

谢绝纯提问

谢谢合作!
本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...