C#使用MathNet生成矩阵并打印矩阵元素
作者:微小冷
安装
MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能,是.net技术中首选的数值计算包。
其中,线性代数包LinearAlgebra包提供了向量、矩阵等数据结构,这些是数值计算的前提,故而相比于其他包更加基础。
下面用VS新建一个控制台项目,并启用顶级语句。点击工具->NuGet包管理器->管理解决方案的NuGet程序包,进入浏览选项卡,搜索MathNet.Numerics,选中安装。
创建和显示矩阵
在使用命名空间之后,可通过Matrix.Build来创建矩阵,矩阵中重写了ToString方法,所以可直接使用$字符串,示例如下
using MathNet.Numerics.LinearAlgebra; Matrix<double> m = Matrix<double>.Build.Random(3,4); Console.WriteLine($"{m}"); /* 输出结果如下 DenseMatrix 3x4-Double -1.34532 0.209099 1.64422 0.13664 1.15024 -0.751815 0.242772 -1.90048 0.0985362 -1.02023 0.727527 0.137225 */
即创建的矩阵为
Matrix.Build是MatrixBuilder对象,后文简称MB,用于生成矩阵,如果需要频繁创建矩阵,则可创建一个矩阵生成器,示例如下
var MB = Matrix<double>.Build; m = MB.Random(3, 4); MB.Dense(3, 4); //3x4的全0矩阵 MB.Dense(3, 4, 1.0); //3x4的全1.0矩阵 MB.Dense(3, 4, (i, j) => 100 * i + j); //通过表达式生成元素 MB.DenseDiagonal(3, 4, 2.0); //3x4对角为2.0 MB.DenseIdentity(3); // 3x3的单位阵
矩阵类型
MB支持超多种矩阵的生成方式,其中Dense又是最常用的一种,从上面的示例可知,MB提供了多种Dense重载,但前两个输入参数一般为行数和列数,第三个参数则可以是
- 缺省,则所有元素为0
- 数值,则所有元素都是这个数
- 函数,诸如(i, j) => f(i,j),表示( i , j ) (i,j)(i,j)处的元素,其值为f ( i , j ) f(i,j)f(i,j)
- 数组,将使用数组中的值进行填充
DenseDiagonal用于生成对角矩阵,包括三种重载,
- 阶数,对角数值
- 行数,列数,对角数值
- 行数,列数,对角的生成函数
这两种生成方法,囊括了矩阵生成的一些基本逻辑,从矩阵的形状来说,主要有两种形式,即指定行列数或者指定阶数;而就矩阵的内容而言,则有三种方法,一是用某个值来填充,二是用某个数组中的值来填充,三则是通过函数来生成。
在建立起这种逻辑之后,对于其他矩阵生成方法,也可以逐步尝试
方法 | 说明 |
---|---|
DenseIdentity | 单位阵 |
Diagonal | 对角方阵 |
DiagonalIdentity | 对角单位阵 |
Random | 随机矩阵 |
RandomPositiveDefinite | 每个元素是两个随机数的积 |
其中,随机矩阵Random可以指定随机数种子或者具体的分布,如果未指定分布,则默认是标准正态分布。
到此这篇关于C#使用MathNet生成矩阵并打印矩阵元素的文章就介绍到这了,更多相关C# MathNet生成并打印矩阵内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!