假设我有一个线性系统我想用 Jacobi 迭代来解决。矩阵以 CSR 格式给出。向量是密集的。
Jacobi 迭代的代码非常清晰,可以在网上快速查找。现在我想对代码进行矢量化,但我并没有真正找到一种处理 if 条件的好方法,在该条件下,我们决定矩阵的对角线值还是非对角线值。
任何想法或代码示例?
Jacobi 迭代的向量化
计算科学
线性代数
表现
2021-11-29 02:55:27
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