深圳幻海软件技术有限公司 欢迎您!

C#机器学习(5)-科学计算(1)

2023-04-27

目录Math.NETNumerics创建第一个程序Math.NETNumericsMath.NETNumerics旨在为科学、工程和日常使用中的数值计算提供方法和算法。涵盖的主题包括特殊函数、线性代数、概率模型、随机数、插值、积分、回归、优化问题等。Math.NETNumerics是一个面向.NET

目录

    • Math.NET Numerics
    • 创建第一个程序

Math.NET Numerics

Math.NET Numerics旨在为科学、工程和日常使用中的数值计算提供方法和算法。涵盖的主题包括特殊函数、线性代数、概率模型、随机数、插值、积分、回归、优化问题等。

Math.NET Numerics是一个面向.NET和Mono的开源数字库。

Math.NET Numerics是Math.NET倡议的数值基础,旨在为科学、工程和日常使用中的数值计算提供方法和算法。涵盖的主题包括特殊函数、线性代数、概率模型、随机数、统计学、插值、积分、回归、曲线拟合、积分变换(FFT)等。

除了核心.NET包(完全用C#编写)之外,Numerics还专门支持带有惯用扩展模块的F#,并维护源自F#PowerPack的BigRational等数学数据结构。如果需要提高性能,支持其线性代数例程和分解的托管代码提供程序可以与优化本机实现(如“英特尔MKL”)的包装器进行交换。

Math.NET Numerics是Math.NET计划的一部分,是将dnAnalytics与Math.NET铱合并的结果,取代了两者。根据麻省理工学院许可证免费提供。它针对Microsoft.NET 5.0、.NET 4.6.1及更高版本、.NET Standard 2.0及更高级别。除了纯托管实现之外,它还支持本机硬件优化。

Math.NET Numerics是Math.NET项目的数值基础,旨在为科学、工程和日常使用中的数值计算提供方法和算法。在Windows、Linux和Mac上支持.NET 5.0或更高版本、.NET Standard 2.0和.NET Framework 4.6.1或更高级别。

创建第一个程序


尽量使用.net CLI,这样更有利于.NET程序的跨平台编辑和运行。

dotnet add package MathNet.Numerics --version 5.0.0
  • 1

输入一个矩阵计算的程序
假设我们有一个矩阵a,想要找到该矩阵的核或零空间的正交基,使得该子空间中所有x的Ax=0。

using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;

Matrix<double> A = DenseMatrix.OfArray(new double[,] {
        {1,1,1,1},
        {1,2,3,4},
        {4,3,2,1}});
Vector<double>[] nullspace = A.Kernel();

// verify: the following should be approximately (0,0,0)
(A * (2*nullspace[0] - 3*nullspace[1]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
DenseVector 3-Double
-9.99201E-16
-1.33227E-15
-2.77556E-15

  • 1
  • 2
  • 3
  • 4
  • 5
using System;
using MathNet.Numerics;
using MathNet.Numerics.LinearAlgebra;

class Program
{
    static void Main(string[] args)
    {
        // Evaluate a special function
        Console.WriteLine(SpecialFunctions.Erf(0.5));

        // Solve a random linear equation system with 500 unknowns
        var m = Matrix<double>.Build.Random(500, 500);
        var v = Vector<double>.Build.Random(500);
        var y = m.Solve(v);
        Console.WriteLine(y);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
0.5204998778130465
DenseVector 500-Double
 0.536455     -0.5329   0.993414   -1.44919    2.04515   0.209622   0.790046
-0.396349   -0.789854   -1.32822   0.788185  -0.375326     2.5603   -2.28806
-0.765934  -0.0261449   -2.07218   0.758884   -1.06728  -0.186329   -2.07813
-0.844761     1.26195     0.6559     -2.084    1.21208    -0.4652   0.429025
 -1.61157   0.0815034    1.80981   -2.86039    1.51201  -0.648924   0.405849
   1.7357    0.915015   -2.02105     1.2996  -0.143795   0.543247   0.378251
  0.57429    0.252941   0.713848   -2.30416   0.395533   -2.65107    2.39193
-0.736736    0.352385   -1.85423  -0.566514  -0.784517     -1.001  0.0147377
 0.704906    0.546739   -1.45356   -1.16955   -1.20733   -1.13528   -1.27761
 0.750809    0.935926   0.117878   -1.58557   0.668582   -0.32107   0.576215
 -2.14147   -0.795357  0.0451499   0.644241   -1.15513  -0.678867         ..
-0.395909    0.216126    1.29862  -0.199265    1.23362  -0.775726   0.569106

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树首页概览16435 人正在系统学习中