scipy.sparse.linalg.

SuperLU#

class scipy.sparse.linalg.SuperLU#

LU-Zerlegung einer dünn besetzten Matrix.

Die Zerlegung wird wie folgt dargestellt:

Pr @ A @ Pc = L @ U

Um diese SuperLU Objekte zu erstellen, rufen Sie die Funktionen splu und spilu auf.

Attribute:
shape

Form der ursprünglichen Matrix als Tupel von Ganzzahlen.

nnz

Anzahl der Nicht-Null-Elemente in der Matrix.

perm_c

Spaltenpermutation Pc als Array von Indizes dargestellt.

perm_r

Zeilenpermutation Pr als Array von Indizes dargestellt.

L

Unterer Dreiecksfaktor mit Einheitsdiagonalen als scipy.sparse.csc_array.

U

Oberer Dreiecksfaktor als scipy.sparse.csc_array.

Methoden

solve(rhs[, trans])

Löst lineare Gleichungssysteme mit einer oder mehreren rechten Seiten.

Hinweise

Hinzugefügt in Version 0.14.0.

Beispiele

Die LU-Zerlegung kann zur Lösung von Matrixgleichungen verwendet werden. Betrachten Sie

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

Dies kann für eine gegebene rechte Seite gelöst werden

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

Das Objekt lu enthält auch eine explizite Darstellung der Zerlegung. Die Permutationen werden als Abbildungen von Indizes dargestellt

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

Die L- und U-Faktoren sind dünn besetzte Matrizen im CSC-Format

>>> 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. ]])

Die Permutationsmatrizen können konstruiert werden

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

Wir können die ursprüngliche Matrix wieder zusammensetzen

>>> (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.]])