本文簡要介紹 python 語言中 scipy.sparse.linalg.spsolve
的用法。
用法:
scipy.sparse.linalg.spsolve(A, b, permc_spec=None, use_umfpack=True)#
求解稀疏線性係統Ax=b,其中b可以是向量也可以是矩陣。
- A: ndarray 或稀疏矩陣
方陣 A 將轉換為 CSC 或 CSR 形式
- b: ndarray 或稀疏矩陣
表示方程右側的矩陣或向量。如果是向量,b.shape 必須是 (n,) 或 (n, 1)。
- permc_spec: str,可選
如何置換矩陣的列以保持稀疏性。 (默認:'COLAMD')
NATURAL
:自然排序。MMD_ATA
: A^T A 結構的最小度數排序。MMD_AT_PLUS_A
: A^T+A 結構的最小度數排序。COLAMD
:近似最小度列排序 [1]、[2]。
- use_umfpack: 布爾型,可選
如果 True (默認),則使用 UMFPACK 作為解決方案 [3], [4], [5], [6] 。僅當 b 是向量並且安裝了
scikits.umfpack
時才引用此值。
- x: ndarray 或稀疏矩陣
稀疏線性方程的解。如果 b 是向量,則 x 是大小為 A.shape[1] 的向量 如果 b 是矩陣,則 x 是大小為 (A.shape[1], b.shape[1]) 的矩陣
參數 ::
返回 ::
注意:
為了求解矩陣表達式 AX = B,該求解器假設生成的矩陣 X 是稀疏的,對於非常稀疏的輸入來說通常是這種情況。如果得到的 X 是稠密的,那麽構建這個稀疏結果將相對昂貴。在這種情況下,請考慮將 A 轉換為稠密矩陣並使用 scipy.linalg.solve 或其變體。
參考:
[1]T. A. Davis、J. R. Gilbert、S. Larimore、E. Ng,算法 836:COLAMD,近似列最小度排序算法,ACM Trans。數學軟件,30(3),2004 年,第 377-380 頁。 DOI:10.1145/1024074.1024080
[2]T. A. Davis、J. R. Gilbert、S. Larimore、E. Ng,A 列近似最小度排序算法,ACM Trans。數學軟件,30(3),2004 年,第 353-376 頁。 DOI:10.1145/1024074.1024079
[3]T. A. Davis,算法 832:UMFPACK - 一種帶有列預排序策略的 unsymmetric-pattern 多前沿方法,ACM Trans。數學軟件,30(2),2004 年,第 196-199 頁。 https://dl.acm.org/doi/abs/10.1145/992200.992206
[4]T. A. Davis,unsymmetric-pattern 多前沿方法的專欄預排序策略,ACM Trans。數學軟件,30(2),2004 年,第 165-195 頁。 https://dl.acm.org/doi/abs/10.1145/992200.992205
[5]T. A. Davis 和 I. S. Duff,非對稱稀疏矩陣的單額/多額組合方法,ACM Trans。數學軟件,25(1),1999,第 1-19 頁。 https://doi.org/10.1145/305658.287640
[6]T. A. Davis 和 I. S. Duff,稀疏 LU 分解的 unsymmetric-pattern 多前沿方法,SIAM J. 矩陣分析和計算,18(1),1997,第 140-158 頁。 https://doi.org/10.1137/S0895479894246905T。
例子:
>>> import numpy as np >>> from scipy.sparse import csc_matrix >>> from scipy.sparse.linalg import spsolve >>> A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float) >>> B = csc_matrix([[2, 0], [-1, 0], [2, 0]], dtype=float) >>> x = spsolve(A, B) >>> np.allclose(A.dot(x).toarray(), B.toarray()) True
相關用法
- Python SciPy linalg.spsolve_triangular用法及代碼示例
- Python SciPy linalg.splu用法及代碼示例
- Python SciPy linalg.spilu用法及代碼示例
- Python SciPy linalg.solve_circulant用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.solve_banded用法及代碼示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代碼示例
- Python SciPy linalg.solve用法及代碼示例
- Python SciPy linalg.svdvals用法及代碼示例
- Python SciPy linalg.solveh_banded用法及代碼示例
- Python SciPy linalg.solve_sylvester用法及代碼示例
- Python SciPy linalg.solve_toeplitz用法及代碼示例
- Python SciPy linalg.sqrtm用法及代碼示例
- Python SciPy linalg.svds用法及代碼示例
- Python SciPy linalg.sinm用法及代碼示例
- Python SciPy linalg.schur用法及代碼示例
- Python SciPy linalg.solve_continuous_lyapunov用法及代碼示例
- Python SciPy linalg.solve_continuous_are用法及代碼示例
- Python SciPy linalg.solve_discrete_are用法及代碼示例
- Python SciPy linalg.solve_triangular用法及代碼示例
- Python SciPy linalg.sinhm用法及代碼示例
- Python SciPy linalg.signm用法及代碼示例
- Python SciPy linalg.subspace_angles用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.linalg.spsolve。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。