【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
*/
相关推荐
人间凡尔赛2 小时前
Next.js 16 生产级实战:Cache Components + View Transitions 完整指南
开发语言·javascript·ecmascript
稚南城才子,乌衣巷风流6 小时前
函数:编程中的核心概念
开发语言·前端·javascript
阿米亚波6 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记
大模型码小白7 小时前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
皓月斯语7 小时前
【C++基础】三目运算符
开发语言·数据结构·c++
初願致夕霞8 小时前
C++懒汉单例设计详解
服务器·开发语言·c++
脱胎换骨-军哥8 小时前
C++分布式系统设计:从通信引擎到分布式共识
开发语言·c++·分布式
脱胎换骨-军哥9 小时前
C++零成本抽象理论深度拆解:现代C++如何在不牺牲性能的前提下提供高级语法封装
java·开发语言·c++
lbb 小魔仙9 小时前
VS Code Python 高级调试技巧:从入门到精通
开发语言·python