scipy.linalg.

solve#

scipy.linalg.solve(a, b, lower=False, overwrite_a=False, overwrite_b=False, check_finite=True, assume_a=None, transposed=False)[Quelle]#

Löst die Gleichung a @ x = b nach x auf, wobei a eine quadratische Matrix ist.

Wenn bekannt ist, dass die Datenmatrix einen bestimmten Typ hat, wählt die Angabe des entsprechenden Strings für den Schlüssel assume_a den dedizierten Löser. Die verfügbaren Optionen sind

diagonal

„diagonal“

tridiagonal

„tridiagonal“

banded

„banded“

obere Dreiecksmatrix

„obere Dreiecksmatrix“

untere Dreiecksmatrix

„untere Dreiecksmatrix“

symmetrisch

„symmetrisch“ (oder „sym“)

hermitisch

„hermitisch“ (oder „her“)

symmetrisch positiv definit

„positiv definit“ (oder „pos“)

allgemein

„allgemein“ (oder „gen“)

Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.

Parameter:
a(N, N) array_like

Quadratische Eingabedaten

b(N, NRHS) array_like

Eingabedaten für die rechte Seite.

lowerbool, Standard: False

Ignoriert, es sei denn, assume_a ist einer von 'sym', 'her' oder 'pos'. Wenn True, verwendet die Berechnung nur die Daten im unteren Dreieck von a; Einträge oberhalb der Diagonale werden ignoriert. Wenn False (Standard), verwendet die Berechnung nur die Daten im oberen Dreieck von a; Einträge unterhalb der Diagonale werden ignoriert.

overwrite_abool, Standard: False

Erlaubt das Überschreiben von Daten in a (kann die Leistung verbessern).

overwrite_bbool, Standard: False

Erlaubt das Überschreiben von Daten in b (kann die Leistung verbessern).

check_finitebool, Standard: True

Ob überprüft werden soll, ob die Eingabematrizen nur endliche Zahlen enthalten. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürzen, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.

assume_astr, optional

Gültige Einträge sind oben beschrieben. Wenn weggelassen oder None, werden Prüfungen durchgeführt, um die Struktur zu identifizieren, damit der entsprechende Löser aufgerufen werden kann.

transposedbool, Standard: False

Wenn True, löst a.T @ x == b. Löst NotImplementedError für komplexe a aus.

Rückgabe:
x(N, NRHS) ndarray

Das Lösungsarray.

Löst aus:
ValueError

Wenn Größeninkongruenzen erkannt werden oder Eingabe a nicht quadratisch ist.

LinAlgError

Wenn die Berechnung aufgrund der Singulärheit der Matrix fehlschlägt.

LinAlgWarning

Wenn eine schlecht konditionierte Eingabe a erkannt wird.

NotImplementedError

Wenn transposed True ist und die Eingabe a eine komplexe Matrix ist.

Hinweise

Wenn die Eingabematrix b ein 1D-Array mit N Elementen ist und zusammen mit einer NxN-Eingabe a geliefert wird, wird sie trotz der offensichtlichen Größeninkongruenz als gültiger Spaltenvektor angenommen. Dies ist mit dem Verhalten von numpy.dot() kompatibel und das zurückgegebene Ergebnis ist immer noch ein 1D-Array.

Die allgemeinen, symmetrischen, hermitischen und positiv definiten Lösungen werden durch Aufruf der ?GESV, ?SYSV, ?HESV und ?POSV Routinen von LAPACK erzielt.

Der Datentyp der Arrays bestimmt, welcher Löser aufgerufen wird, unabhängig von den Werten. Mit anderen Worten, auch wenn die komplexen Array-Einträge exakt Null-Imaginärteile haben, wird der komplexe Löser basierend auf dem Datentyp des Arrays aufgerufen.

Beispiele

Gegeben a und b, löse nach x auf

>>> import numpy as np
>>> a = np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]])
>>> b = np.array([2, 4, -1])
>>> from scipy import linalg
>>> x = linalg.solve(a, b)
>>> x
array([ 2., -2.,  9.])
>>> np.dot(a, x) == b
array([ True,  True,  True], dtype=bool)