Jacobi 迭代的向量化

计算科学 线性代数 表现
2021-11-29 02:55:27

假设我有一个线性系统Ax=b我想用 Jacobi 迭代来解决。矩阵A以 CSR 格式给出。向量是密集的。
Jacobi 迭代的代码非常清晰,可以在网上快速查找。现在我想对代码进行矢量化,但我并没有真正找到一种处理 if 条件的好方法,在该条件下,我们决定矩阵的对角线值还是非对角线值。
任何想法或代码示例?

1个回答

在 CSR 格式中,数据不需要以连续的方式排列。一行中的元素可以按任何顺序排列,因为它们的索引也包含在数据中。这允许我们将对角元素存储为第一个元素以便于访问,这对于许多迭代方案很有用。如果对角元素始终非零,则此策略是有意义的。

例如,考虑这个矩阵

d00 d01 0   0   d04
0   d11 0   d13 d14
0   d21 d22 0   d24
0   0   d32 d33 0
d40 0   d42 0   d44

非零元素可以存储为

d00,d01,d04|d11,d13,d14|d22,d21,d24|d33,d32|d44,d40,d42

其他方式见第 3.4 节

Y. Saad,稀疏线性系统的迭代方法PDF