2

如何打印splu使用 SuperLU 计算的稀疏 L 和 U 矩阵?

我的 MWE:

>>> import scipy
>>> import scipy.sparse
>>> import scipy.sparse.linalg
>>> from numpy import array
>>> M = scipy.array([ [19,0,21,21,0],[12,21,0,0,0],[0,12,16,0,0],[0,0,0,5,21],[12,12,0,0,18] ])
>>> cscM = scipy.sparse.csc_matrix(M)
>>> lu_obj = scipy.sparse.linalg.splu(cscM)
>>> b = array([1, 2, 3, 4, 5])
>>> lu_obj.solve(b)
array([ 0.01245301,  0.08812209,  0.12140843, -0.08505639,  0.21072771])
4

2 回答 2

2

浏览scipy docssource, scipy.sparse.linalg.splu 确实使用了 SuperLU。看起来 SuperLU 可能没有明确计算 L 或 U。L 和 U 往往比原始稀疏矩阵更密集,因此如果不需要它们,避免存储它们是有意义的。如果有什么安慰的话,您lu_obj确实包含 L & U: 的排列信息lu_obj.perm_c, lu_obj.perm_r

为了得到 L & U,最少工作的路径是scipy.linalg.lu用来得到 LU 矩阵。不过,您必须将稀疏矩阵转换为密集矩阵。IE

P, L, U = scipy.linalg.lu(cscM.todense())
于 2013-05-25T06:46:47.750 回答
2

您可以 lu_obj = scipy.sparse.linalg.splu(A) L,R = lu_obj.L, lu_obj.R 在当前的 scipy 版本中使用,它以 csc 格式(scipy 文档)返回矩阵。

于 2015-06-04T07:39:09.330 回答