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
SuperLUObjekte zu erstellen, rufen Sie die Funktionenspluundspiluauf.- Attribute:
shapeForm der ursprünglichen Matrix als Tupel von Ganzzahlen.
nnzAnzahl der Nicht-Null-Elemente in der Matrix.
perm_cSpaltenpermutation Pc als Array von Indizes dargestellt.
perm_rZeilenpermutation Pr als Array von Indizes dargestellt.
LUnterer Dreiecksfaktor mit Einheitsdiagonalen als
scipy.sparse.csc_array.UOberer 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
luenthä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.]])