scipy.linalg.

expm_frechet#

scipy.linalg.expm_frechet(A, E, method=None, compute_expm=True, check_finite=True)[Quelle]#

Frechet-Ableitung der Matrixexponentialfunktion von A in Richtung E.

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

Matrix, von der die Matrixexponentialfunktion berechnet werden soll.

E(N, N) array_like

Matrixrichtung, in der die Frechet-Ableitung genommen werden soll.

methodstr, optional

Auswahl des Algorithmus. Sollte einer der folgenden sein:

  • SPS (Standard)

  • blockEnlarge

compute_expmbool, optional

Ob expm_A zusätzlich zu expm_frechet_AE berechnet werden soll. Standard ist True.

check_finitebool, optional

Ob überprüft werden soll, ob die Eingabematrix nur endliche Zahlen enthält. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürze, Nichtterminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.

Rückgabe:
expm_Andarray

Matrixexponentialfunktion von A.

expm_frechet_AEndarray

Frechet-Ableitung der Matrixexponentialfunktion von A in Richtung E.

Für compute_expm = False wird nur expm_frechet_AE zurückgegeben.

Siehe auch

expm

Berechnet die Exponentialfunktion einer Matrix.

Hinweise

Dieser Abschnitt beschreibt die verfügbaren Implementierungen, die über den Parameter method ausgewählt werden können. Die Standardmethode ist SPS.

Die Methode blockEnlarge ist ein naiver Algorithmus.

Die Methode SPS ist Scaling-Pade-Squaring [1]. Sie ist eine ausgeklügelte Implementierung, die nur etwa 3/8 der Zeit der naiven Implementierung benötigt. Die Asymptotik ist dieselbe.

Hinzugefügt in Version 0.13.0.

Referenzen

[1]

Awad H. Al-Mohy und Nicholas J. Higham (2009) Computing the Frechet Derivative of the Matrix Exponential, with an application to Condition Number Estimation. SIAM Journal On Matrix Analysis and Applications., 30 (4). pp. 1639-1657. ISSN 1095-7162

Beispiele

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((3, 3))
>>> E = rng.standard_normal((3, 3))
>>> expm_A, expm_frechet_AE = linalg.expm_frechet(A, E)
>>> expm_A.shape, expm_frechet_AE.shape
((3, 3), (3, 3))

Erstellt eine 6x6-Matrix, die [[A, E], [0, A]] enthält

>>> M = np.zeros((6, 6))
>>> M[:3, :3] = A
>>> M[:3, 3:] = E
>>> M[3:, 3:] = A
>>> expm_M = linalg.expm(M)
>>> np.allclose(expm_A, expm_M[:3, :3])
True
>>> np.allclose(expm_frechet_AE, expm_M[:3, 3:])
True