本文开始一一介绍math.net的几个主要子项目的相关功能的使用。今天先要介绍的是最基本math.net numerics的最基本矩阵与向量计算。
矩阵与向量计算是数学计算的核心,因此也是math.net numerics的核心和基础。
math.net包括对向量(vector)和矩阵(matrix)的支持,类型也很多。其主要注意点有:索引是从0开始,不支持空的向量和矩阵,也就是说维数或者长度最少为1。它也支持稀疏矩阵和非稀疏矩阵的向量类型。其矩阵有3种类型:稀疏,非稀疏,对角。这2个类在mathnet.numerics.linearalgebra命名空间。由于一些技术和表示的原因,每一种数据类型都有一个实现,例如mathnet.numerics.linearalgebra.double有一个densematrix类型,matrix<t> 是抽象类型, 要通过其他方法去初始化。可以看看源码中的定义:
创建也很简单,可以大概看看下面这段代码,构造函数还有更多的用法,不一一演示,要自己研究下源代码,记得要引用mathnet.numerics.linearalgebra命名空间:
结果如下,顺便说一下,matrix和vector对象已经对tostring进行了重载,以比较标准化的格式化字符串输出,很方便显示和观察:
matrix和vector都支持常见的操作运算符号:+ ,- , * ,/ ,%等。我们可以从源码中看到部分这样的结构,限于篇幅,只简单列举几个重载操作符的方法,详细的源码在matrix.operators.cs文件:
矩阵的相关操作是线性代数的核心和基础,而matrix的基础功能也是非常强大的,我们看看matrix的关于矩阵操作的相关代码,不仅包括常见矩阵分解算法,如lu,qr,cholesky等,而且还包括一些线性方程的求解,都是可以直接通过实例方法进行的,看看抽象类的方法原型,具体的代码在matrix.solve.cs文件中:
上面的一些说明可以看到一些基本的方法情况,下面有一个实际的例子,说明基本的矩阵运算情况,当然更多高级的功能不能在一篇里面一一讲到,后续还会逐步挖掘其他使用。上代码:
过程比较简单,结果这里只列出部分:
资源大家可以去本系列文章的首页进行下载: