scipy.sparse.linalg.

spsolve#

scipy.sparse.linalg.spsolve(A, b, permc_spec=None, use_umfpack=True)[Quelle]#

Löst das dünnbesetzte lineare Gleichungssystem Ax=b, wobei b ein Vektor oder eine Matrix sein kann.

Parameter:
Andarray oder dünnbesetzte Matrix oder Matrix

Die quadratische Matrix A wird in CSC- oder CSR-Form konvertiert.

bndarray oder dünnbesetzte Matrix oder Matrix

Die Matrix oder der Vektor, der die rechte Seite der Gleichung darstellt. Wenn es sich um einen Vektor handelt, muss b.shape (n,) oder (n, 1) sein.

permc_specstr, optional

Wie die Spalten der Matrix zur Erhaltung der Dünnbesetztheit permutiert werden sollen. (Standard: 'COLAMD')

  • NATURAL: natürliche Reihenfolge.

  • MMD_ATA: minimale Gradreihenfolge auf der Struktur von A^T A.

  • MMD_AT_PLUS_A: minimale Gradreihenfolge auf der Struktur von A^T+A.

  • COLAMD: Spaltenreihenfolge mit approximativem minimalem Grad [1], [2].

use_umfpackbool, optional

Wenn True (Standard), wird UMFPACK für die Lösung verwendet [3], [4], [5], [6]. Dies wird nur referenziert, wenn b ein Vektor ist und scikits.umfpack installiert ist.

Rückgabe:
xndarray oder dünnbesetzte Matrix oder Matrix

Die Lösung der dünnbesetzten linearen Gleichung. Wenn b ein Vektor ist, dann ist x ein Vektor der Größe A.shape[1]. Wenn b eine Matrix ist, dann ist x eine Matrix der Größe (A.shape[1], b.shape[1]).

Hinweise

Beim Lösen des Matrixausdrucks AX = B wird davon ausgegangen, dass die resultierende Matrix X dünnbesetzt ist, was bei sehr dünnbesetzten Eingaben oft der Fall ist. Wenn das resultierende X dicht ist, ist die Erstellung dieses dünnbesetzten Ergebnisses relativ teuer. In diesem Fall sollten Sie A in eine dichte Matrix konvertieren und scipy.linalg.solve oder seine Varianten verwenden.

Referenzen

[1]

T. A. Davis, J. R. Gilbert, S. Larimore, E. Ng, Algorithm 836: COLAMD, an approximate column minimum degree ordering algorithm, ACM Trans. on Mathematical Software, 30(3), 2004, S. 377–380. DOI:10.1145/1024074.1024080

[2]

T. A. Davis, J. R. Gilbert, S. Larimore, E. Ng, A column approximate minimum degree ordering algorithm, ACM Trans. on Mathematical Software, 30(3), 2004, S. 353–376. DOI:10.1145/1024074.1024079

[3]

T. A. Davis, Algorithm 832: UMFPACK - an unsymmetric-pattern multifrontal method with a column pre-ordering strategy, ACM Trans. on Mathematical Software, 30(2), 2004, S. 196–199. https://dl.acm.org/doi/abs/10.1145/992200.992206

[4]

T. A. Davis, A column pre-ordering strategy for the unsymmetric-pattern multifrontal method, ACM Trans. on Mathematical Software, 30(2), 2004, S. 165–195. https://dl.acm.org/doi/abs/10.1145/992200.992205

[5]

T. A. Davis und I. S. Duff, A combined unifrontal/multifrontal method for unsymmetric sparse matrices, ACM Trans. on Mathematical Software, 25(1), 1999, S. 1–19. https://doi.org/10.1145/305658.287640

[6]

T. A. Davis und I. S. Duff, An unsymmetric-pattern multifrontal method for sparse LU factorization, SIAM J. Matrix Analysis and Computations, 18(1), 1997, S. 140–158. https://doi.org/10.1137/S0895479894246905T.

Beispiele

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import spsolve
>>> A = csc_array([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
>>> B = csc_array([[2, 0], [-1, 0], [2, 0]], dtype=float)
>>> x = spsolve(A, B)
>>> np.allclose(A.dot(x).toarray(), B.toarray())
True