我目前的软件项目涉及实现一种使用python求解线性系统的数值方法(所谓的SOR
-Method)。
基本上是这样的:
给出线性系统:
ax1 + bx2 + cx3 = b1
dx1 + ex2 + fx3 = b2
gx1 + hx2 + ix3 = b3
将等式重新排列为:
x1_new = (b1 - (bx2 + cx3)) / a
x2_new = (b2 - (dx1_new + fx3)) / e
x3_new = (b3 - (gx1_new + hx2_new)) / i
如您所见,x*_new
的值每行都在更新-这就是为什么我不能使用简单的vector-vector产品的不幸原因(我还必须除以对角元素-而不是将其相乘)。我必须一个个地去。
我想使用sparse
-矩阵。但是我还没有找到一种方法来如何索引稀疏矩阵以及如何执行上述操作?就像,我发现(关于https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html)的唯一方法是使用A[i].data
,它返回行i
的非零元素。但是连续可能有很多零。而且,使用100.000 x 100.000
矩阵来处理大量if / else来使元素位于索引处也不是很有效。
有什么想法吗?