【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
*/
相关推荐
掘根1 小时前
【消息队列项目】客户端四大模块实现
开发语言·后端·ruby
钰fly6 小时前
C#类型转换 显隐转换
c#
疯狂的挖掘机7 小时前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
cnxy1887 小时前
围棋对弈Python程序开发完整指南:步骤4 - 提子逻辑和劫争规则实现
开发语言·python·机器学习
意趣新7 小时前
C 语言源文件从编写完成到最终生成可执行文件的完整、详细过程
c语言·开发语言
李艺为8 小时前
根据apk包名动态修改Android品牌与型号
android·开发语言
黄河滴滴9 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
老华带你飞9 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
superman超哥9 小时前
Rust Workspace 多项目管理:单体仓库的优雅组织
开发语言·rust·多项目管理·rust workspace·单体仓库
kylezhao20199 小时前
C#通过HSLCommunication库操作PLC用法
开发语言·c#