【C#】MathNet矩阵计算

文章目录

MathNet系列:矩阵生成

安装

MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能,是.net技术中首选的数值计算包。

其中,线性代数包LinearAlgebra包提供了向量、矩阵等数据结构,这些是数值计算的前提,故而相比于其他包更加基础。

下面用VS新建一个控制台项目,并启用顶级语句。点击工具->NuGet包管理器->管理解决方案的NuGet程序包,进入浏览选项卡,搜索MathNet.Numerics,选中安装。

索引和计算

MathNet并未重载索引运算符,而是通过At方法来索引。但矩阵重载了许多运算符,支持加减法以及矩阵乘法运算。需要注意,*是矩阵乘法,而非对应元素的乘法。

Matrix也封装了常见运算的方法,以加法为例,提供了两种方案,一是直接返回一个矩阵,二是实现一个void方法,通过传地址的方式,更改输入的另一个矩阵。示例如下

cs 复制代码
using MathNet.Numerics.LinearAlgebra;

Matrix<double> m = Matrix<double>.Build.Dense(3, 4, 0.5);
Matrix<double> n = Matrix<double>.Build.Dense(3, 4, 0.8);
Matrix<double> p = Matrix<double>.Build.Dense(3, 4);

Console.WriteLine(m.Add(n));
m.Add(n, p);

其中,m.Add(n)返回m+n;m.Add(n, p)则相当于p=m+n。

Matrix封装了一些乘除法,其调用逻辑与Add相似,列举如下

  • Multiply 矩阵乘法
  • PointwiseMultiply 逐点相乘
  • LeftMultiply 向量左乘,返回一个向量
  • Divide 除以某个数
  • DivideByThis 除某个数
  • PointwiseDivide 逐点相除
  • PointwiseRemainder 逐点求余
  • PointwiseModulus 逐点取模
  • Power 乘方
  • PointwisePower 逐点乘方

逐点计算

Matrix中提供了一大批Pointwise开头的方法,用于点对点的计算

PointwiseAbsoluteMaximum 返回绝较大的对值值
PointwiseAbsoluteMinimum 返回绝较小的对值值
三角函数 PointwiseCos, PointwiseSin, PointwiseTan
反三角函数 PointwiseAcos, PointwiseAsin, PointwiseAtan
双曲函数 PointwiseCosh, PointwiseSinh, PointwiseTanh
取整 PointwiseCeiling, PointwiseFloor, PointwiseRound
指数对数 PointwiseExp, PointwiseLog, PointwiseLog10
比大小 PointwiseMaximum, PointwiseAbsoluteMaximum PointwiseMinimum, PointwiseAbsoluteMinimum
开根号 PointwiseSqrt

静态方法

Matrix类中封装了一些静态方法,除了绝对值Abs,开根号Sqrt之外,还有如下

类别 函数
三角函数 Cos, Sin, Tan
反三角函数 Acos, Asin, Atan
双曲函数 Cosh, Sinh, Tanh
指数对数 Exp, Log, Log10,
取整 Ceiling, Floor, Round

以指数函数示例如下

cs 复制代码
using MathNet.Numerics.LinearAlgebra;
using System.Runtime.InteropServices;

Matrix<double> m = Matrix<double>.Build.Dense(3, 4, 0.5);
Console.WriteLine(m);
Console.WriteLine(Matrix<double>.Exp(m));
/*
DenseMatrix 3x4-Double
0.5  0.5  0.5  0.5
0.5  0.5  0.5  0.5
0.5  0.5  0.5  0.5

DenseMatrix 3x4-Double
1.64872  1.64872  1.64872  1.64872
1.64872  1.64872  1.64872  1.64872
1.64872  1.64872  1.64872  1.64872
*/
相关推荐
落魄实习生6 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
淡海水6 小时前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
茉莉玫瑰花茶6 小时前
GO [ 方法 ]
开发语言·后端·golang
狗凯之家源码网7 小时前
微博图床 PHP 系统搭建与实战应用指南
android·开发语言·php
梦帮科技8 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
乌暮8 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
2601_962218619 小时前
C语言中三种库的编译和使用方法
开发语言·c++
传奇开心果编程9 小时前
中庸、有容、破执:仓颉编程语言的中华智慧结晶——三重哲学境界思辨
开发语言·华为·开源·软件工程
jimy19 小时前
派生类重写基类虚函数(二):override的作用
开发语言·c++
_upupup9 小时前
异常(C++)
java·开发语言·jvm