NMath应用教程:如何实现结构化稀疏矩阵类

.NET函数库 NMath提供了各类各样的结构化稀疏矩阵类型。结构性稀疏矩阵能够比通常的矩阵更有效地被操纵,由于全部的元素并不须要被存储。html

NMath包含的类以下表示:函数

  • 三角矩阵spa

为了提升效率,只对上三角矩阵和下三角矩阵分别保存。code

  • 对称和Hermite矩阵htm

对于对称和Hermite矩阵,NMath只保存上三角。索引

  • 带状矩阵ci

为了效率,零元素之外的带宽矩阵没有被保存。get

  • 三对角矩阵it

三对角矩阵的主对角线,超对角线,和次对角以外的0元素,NMath不保存。table

接下来为你们带来一个用 FloatComplexTriDiagMatrix 类来建立一个三对角矩阵单精度复数的代码示例:

?

1
2
3
int rows = 8; cols = 8;
FloatComplexTriDiagMatrix A =
   new FloatComplexTriDiagMatrix( rows, cols );

在三角矩阵中使用 Diagonal() 可以快速的为其设定主对角线,超对角线,和次对角:

?

1
2
3
4
5
6
7
8
9
10
11
12
A.Diagonal( -1 ).Set( Slice.All, 1 );
A.Diagonal( 0 ).Set( Slice.All, 2 );
A.Diagonal( 1 ).Set( Slice.All, 3 );
Console.WriteLine( "A = {0}" , A.ToString() );
// A = 8x8 [ (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) 
//           (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) 
//           (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) 
//           (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) 
//           (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) 
//           (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) 
//           (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) 
//           (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0)]

索引就会把它看成为通常的矩阵而运行:

?

1
FloatComplex c = A[7,0];

还支持使用索引的值设置对角矩阵中对角线元素:

?

1
A[2,1] = new FloatComplex( 2, -1 );
相关文章
相关标签/搜索