scipy.sparse.linalg.

SuperLU#

class scipy.sparse.linalg.SuperLU#

稀疏矩阵的 LU 分解。

分解表示为

Pr @ A @ Pc = L @ U

要构建这些 SuperLU 对象,请调用 spluspilu 函数。

备注

在版本 0.14.0 中添加。

示例

LU 分解可用于解决矩阵方程。考虑

>>> import numpy as np
>>> from scipy.sparse import csc_matrix
>>> from scipy.sparse.linalg import splu
>>> A = csc_matrix([[1,2,0,4], [1,0,0,1], [1,0,2,1], [2,2,1,0.]])

这可以针对给定的右手边求解

>>> lu = splu(A)
>>> b = np.array([1, 2, 3, 4])
>>> x = lu.solve(b)
>>> A.dot(x)
array([ 1.,  2.,  3.,  4.])

lu 对象还包含分解的显式表示。排列表示为索引的映射

>>> lu.perm_r
array([2, 1, 3, 0], dtype=int32)  # may vary
>>> lu.perm_c
array([0, 1, 3, 2], dtype=int32)  # may vary

L 和 U 因子是 CSC 格式的稀疏矩阵

>>> lu.L.toarray()
array([[ 1. ,  0. ,  0. ,  0. ],  # may vary
       [ 0.5,  1. ,  0. ,  0. ],
       [ 0.5, -1. ,  1. ,  0. ],
       [ 0.5,  1. ,  0. ,  1. ]])
>>> lu.U.toarray()
array([[ 2. ,  2. ,  0. ,  1. ],  # may vary
       [ 0. , -1. ,  1. , -0.5],
       [ 0. ,  0. ,  5. , -1. ],
       [ 0. ,  0. ,  0. ,  2. ]])

可以构建排列矩阵

>>> Pr = csc_matrix((np.ones(4), (lu.perm_r, np.arange(4))))
>>> Pc = csc_matrix((np.ones(4), (np.arange(4), lu.perm_c)))

我们可以重新组合原始矩阵

>>> (Pr.T @ (lu.L @ lu.U) @ Pc.T).toarray()
array([[ 1.,  2.,  0.,  4.],
       [ 1.,  0.,  0.,  1.],
       [ 1.,  0.,  2.,  1.],
       [ 2.,  2.,  1.,  0.]])
属性:
shape

原始矩阵的形状,作为整数元组。

nnz

矩阵中非零元素的数量。

perm_c

排列 Pc 表示为索引数组。

perm_r

排列 Pr 表示为索引数组。

L

具有单位对角线的下三角因子,作为 scipy.sparse.csc_matrix

U

上三角因子,作为 scipy.sparse.csc_matrix

方法

solve(rhs[, trans])

求解具有一个或多个右手边的线性方程组。