scipy.linalg.

expm#

scipy.linalg.expm(A)[Quelle]#

Berechnet die Matrixexponentialfunktion eines Arrays.

Parameter:
Andarray

Eingabe, bei der die letzten beiden Dimensionen quadratisch sind (..., n, n).

Rückgabe:
eAndarray

Die resultierende Matrixexponentialfunktion mit der gleichen Form wie A

Hinweise

Implementiert den Algorithmus aus [1], der im Wesentlichen eine Pade-Approximation mit variabler Ordnung ist, die basierend auf den Array-Daten entschieden wird.

Für eine Eingabe der Größe n beträgt der Speicherverbrauch im schlimmsten Fall ca. 8*(n**2). Wenn die Eingabedaten nicht vom Typ Single und Double Precision von realen und komplexen Dtypes sind, wird eine Kopie in ein neues Array erstellt.

Für Fälle mit n >= 400 bricht die Kosten für die exakte Berechnung der 1-Norm mit der 1-Norm-Schätzung auf, und ab diesem Zeitpunkt wird das in [2] angegebene Schätzverfahren verwendet, um die Approximationsordnung zu bestimmen.

Referenzen

[1]

Awad H. Al-Mohy und Nicholas J. Higham, (2009), „A New Scaling and Squaring Algorithm for the Matrix Exponential“, SIAM J. Matrix Anal. Appl. 31(3):970-989, DOI:10.1137/09074721X

[2]

Nicholas J. Higham und Francoise Tisseur (2000), „A Block Algorithm for Matrix 1-Norm Estimation, with an Application to 1-Norm Pseudospectra.“ SIAM J. Matrix Anal. Appl. 21(4):1185-1201, DOI:10.1137/S0895479899356080

Beispiele

>>> import numpy as np
>>> from scipy.linalg import expm, sinm, cosm

Matrixversion der Formel exp(0) = 1

>>> expm(np.zeros((3, 2, 2)))
array([[[1., 0.],
        [0., 1.]],

       [[1., 0.],
        [0., 1.]],

       [[1., 0.],
        [0., 1.]]])

Eulersche Identität (exp(i*theta) = cos(theta) + i*sin(theta)) angewendet auf eine Matrix

>>> a = np.array([[1.0, 2.0], [-1.0, 3.0]])
>>> expm(1j*a)
array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j],
       [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]])
>>> cosm(a) + 1j*sinm(a)
array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j],
       [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]])