spilu#
- scipy.sparse.linalg.spilu(A, drop_tol=None, fill_factor=None, drop_rule=None, permc_spec=None, diag_pivot_thresh=None, relax=None, panel_size=None, options=None)[Quelle]#
Berechnet eine unvollständige LU-Zerlegung für eine dünn besetzte, quadratische Matrix.
Das resultierende Objekt ist eine Annäherung an die Inverse von A.
- Parameter:
- A(N, N) array_like
Dünn besetzte Matrix, die zerlegt werden soll. Am effizientesten ist sie im CSC-Format. Andere Formate werden vor der Zerlegung in CSC konvertiert.
- drop_tolfloat, optional
Abfalltoleranz (0 <= tol <= 1) für eine unvollständige LU-Zerlegung. (Standard: 1e-4)
- fill_factorfloat, optional
Gibt die Obergrenze für das Füllverhältnis (>= 1.0) für ILU an. (Standard: 10)
- drop_rulestr, optional
Kommagetrennte Zeichenkette von Abfallregeln, die verwendet werden sollen. Verfügbare Regeln:
basic,prows,column,area,secondary,dynamic,interp. (Standard:basic,area)Weitere Details finden Sie in der SuperLU-Dokumentation.
- Verbleibende andere Optionen
Wie für
splu
- Rückgabe:
- invA_approxscipy.sparse.linalg.SuperLU
Objekt mit einer
solve-Methode.
Siehe auch
spluvollständige LU-Zerlegung
Hinweise
Wenn eine reelle Matrix zerlegt wird und die
solve()-Methode des zurückgegebenen SuperLU-Objekts mit komplexen Argumenten verwendet wird, wird ein Fehler generiert. Wandeln Sie stattdessen die ursprüngliche Matrix in komplex um und zerlegen Sie sie dann.Um die Annäherung an die Inverse zu verbessern, müssen Sie möglicherweise fill_factor erhöhen UND drop_tol verringern.
Diese Funktion verwendet die SuperLU-Bibliothek.
Beispiele
>>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import spilu >>> A = csc_array([[1., 0., 0.], [5., 0., 2.], [0., -1., 0.]], dtype=float) >>> B = spilu(A) >>> x = np.array([1., 2., 3.], dtype=float) >>> B.solve(x) array([ 1. , -3. , -1.5]) >>> A.dot(B.solve(x)) array([ 1., 2., 3.]) >>> B.solve(A.dot(x)) array([ 1., 2., 3.])