您的位置:首页 > 其它

稀疏矩阵相关 1

2014-02-25 07:53 176 查看
应用: PDE数值解。

稀疏矩阵与图论:

1 邻接图可用一个稀疏矩阵描述。其中稀疏矩阵的每个非零元素(对应一个未知变量)表示“图”中对应的两个“节点”之间有一条“边”; 对称稀疏矩阵表示一个无向图。高斯消元法所选的pivots,就是“图”中独立的”节点“ ( 该节点与其他节点之间不存在”边“)。

2 PDE离散网格中节点自由度的编号。法一,一个节点的所有自由度连续的编号;法二:所有节点的相同自由度连续编号。计算网格 - quotient graph

3 矩阵初等变换与重排。

3.1 初等变换: 矩阵M中两行交换,变换矩阵左乘M。变换矩阵即单位对角矩阵中对应两行互换位置;M中两列交换,变换矩阵右乘M。如果采用相同的变换矩阵,行变换与列变 换的结果矩阵相似。

初等变换的意义是:矩阵未知量重编号。对应即”图中节点”重新编号。

| a11 0 a13 0 | | a11 a13 0 0 |

| 0 a22 a23 a24 | ------> | a31 a33 a32 0 |

| a31 a32 a33 0 | | 0 a23 a22 a24 |

| 0 a42 0 a44 | | 0 0 a42 a44 |

实际稀疏矩阵的初等变换,一般都采用”对称变换”。即行变换与对应列变换都执行。 A = PAP^T。 对称变换等价于将图中的节点进行重编号,但不改变边的关系。即原来 old(i) old(j)之间有一条边,这条“边”在新节点 i, j对之间仍然存在。应用举例:

对一个满秩矩阵M,其第一行/第一列元素均非零,其余位置只有对角线有元素,进行高斯消元。由于消元步从第一行开始,将导致每步在原来零元素的位置,填充非零元素。对于大型稀疏矩阵,该行为非常不合适。而对此矩阵进行初等行列变换,交换第一行/第一列 与 最后一行/最后一列。此时消元将不再产生”非零填充“。

3.2 非零元素编号/排序

最简单的办法采用广度优先搜索(BFS):采用某个顺序(任意的)开始访问节点,每个当前访问节点的邻接点若还没有编号,就给个编号并且将其定义为下一层将要访问的节点。BFS中会有两个选择影响最后的变换矩阵。一,第一个访问节点怎么选;二,在同一层的节点访问顺序怎么定。Cuthill - MeKee 算法给出了如下办法:

1 第一个访问点的选定,是问题空间相关的,即根据离散网格选定。最终将影响矩阵的带宽。比如,有限元方法里面,单元节点编号尽量满足相近的节点编号尽可能接近。第一个访问点尽量是与其他节点连线最少的那个。

2 同一层内节点按从小到大的顺序访问。

3.3 独立集排序(independent set ordering)

计算域离散后,经常得到一种如下形式的矩阵。 A = (D, E;F, C),其中D是一个对角子矩阵,C, E,F为稀疏子矩阵。D对应未知变量是完全解耦的,非常便于计算,所以希望通过矩阵变换,得到最大秩的D。而实际上确定某个矩阵最大的D是个NPH问题,故可以尝试一些启发式算法:

每步访问到一个节点,就将该节点以及它所有的邻节点都从图中剔除,然后继续访问剩下的节点,直到剔除所有图中节点。

3.4 不可约矩阵

如果矩阵对应的图是全联通的(图中所有节点之间都可以通过若干条边连接),那么该矩阵就是不可约的。如果矩阵可约,就可以通过”对称变换“,将其化作块上三角矩阵。不可约矩阵,貌似是”全填充“的矩阵。

4 稀疏矩阵存储

最简单的是三元组:一列存元素值,一列存元素横坐标,一列存元素列坐标。经典的压缩存储法 (Compressed Sparse Row/Column)。对于”带状“矩阵,可以按对角元存储等等。

5 稀疏矩阵基本运算

5.1 矩阵 向量 乘法

do i = 1, N
K1 = IA(i)
K2 = IA(i+1) - 1
y(i) = dotproduct( A(k1:k2), x(ja(k1:k2))
end
% CSR 存储
该运算每步计算一个结果值y(i), 步与步之间独立,适合并行。

% 本周介绍稀疏矩阵的迭代解法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: