expm_multiply#
- scipy.sparse.linalg.expm_multiply(A, B, start=None, stop=None, num=None, endpoint=None, traceA=None)[Quellcode]#
Berechnet die Wirkung der Matrixexponentialfunktion von A auf B.
- Parameter:
- Atransponierbarer linearer Operator
Der Operator, dessen Exponentialfunktion von Interesse ist.
- Bndarray, sparse array
Die Matrix oder der Vektor, der mit der Matrixexponentialfunktion von A multipliziert werden soll.
- startSkalar, optional
Der Startzeitpunkt der Sequenz.
- stopSkalar, optional
Der Endzeitpunkt der Sequenz, es sei denn, endpoint ist auf False gesetzt. In diesem Fall besteht die Sequenz aus allen, aber dem letzten von
num + 1gleichmäßig verteilten Zeitpunkten, sodass stop ausgeschlossen ist. Beachten Sie, dass sich die Schrittweite ändert, wenn endpoint False ist.- numint, optional
Anzahl der zu verwendenden Zeitpunkte.
- endpointbool, optional
Wenn True, ist stop der letzte Zeitpunkt. Andernfalls ist er nicht enthalten.
- traceASkalar, optional
Spur von A. Wenn nicht angegeben, wird die Spur für lineare Operatoren geschätzt oder für dichte Matrizen exakt berechnet. Sie wird zur Vorbedingung von A verwendet, daher ist eine ungefähre Spur akzeptabel. Für lineare Operatoren sollte traceA angegeben werden, um die Leistung sicherzustellen, da die Schätzung nicht für alle Fälle zuverlässig ist.
Hinzugefügt in Version 1.9.0.
- Rückgabe:
- expm_A_Bndarray
Das Ergebnis der Aktion \(e^{t_k A} B\).
- Warnungen:
- UserWarning
Wenn A ein linearer Operator ist und
traceA=None(Standard).
Hinweise
Die optionalen Argumente, die die Sequenz von gleichmäßig verteilten Zeitpunkten definieren, sind mit den Argumenten von
numpy.linspacekompatibel.Die Form des Ausgabe-NDarrays ist etwas kompliziert, daher erkläre ich sie hier. Die Anzahl der Dimensionen (ndim) der Ausgabe kann 1, 2 oder 3 sein. Sie wäre 1, wenn die expm-Aktion auf einen einzelnen Vektor zu einem einzelnen Zeitpunkt berechnet wird. Sie wäre 2, wenn die expm-Aktion auf einen Vektor zu mehreren Zeitpunkten berechnet wird oder wenn die expm-Aktion auf eine Matrix zu einem einzelnen Zeitpunkt berechnet wird. Sie wäre 3, wenn die Aktion auf eine Matrix mit mehreren Spalten zu mehreren Zeitpunkten gewünscht wird. Wenn mehrere Zeitpunkte angefordert werden, ist expm_A_B[0] immer die Aktion der expm zum ersten Zeitpunkt, unabhängig davon, ob die Aktion auf einen Vektor oder eine Matrix erfolgt.
Referenzen
[1]Awad H. Al-Mohy und Nicholas J. Higham (2011) „Computing the Action of the Matrix Exponential, with an Application to Exponential Integrators.“ SIAM Journal on Scientific Computing, 33 (2). pp. 488-511. ISSN 1064-8275 http://eprints.ma.man.ac.uk/1591/
[2]Nicholas J. Higham und Awad H. Al-Mohy (2010) „Computing Matrix Functions.“ Acta Numerica, 19. 159-208. ISSN 0962-4929 http://eprints.ma.man.ac.uk/1451/
Beispiele
>>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import expm, expm_multiply >>> A = csc_array([[1, 0], [0, 1]]) >>> A.toarray() array([[1, 0], [0, 1]], dtype=int64) >>> B = np.array([np.exp(-1.), np.exp(-2.)]) >>> B array([ 0.36787944, 0.13533528]) >>> expm_multiply(A, B, start=1, stop=2, num=3, endpoint=True) array([[ 1. , 0.36787944], [ 1.64872127, 0.60653066], [ 2.71828183, 1. ]]) >>> expm(A).dot(B) # Verify 1st timestep array([ 1. , 0.36787944]) >>> expm(1.5*A).dot(B) # Verify 2nd timestep array([ 1.64872127, 0.60653066]) >>> expm(2*A).dot(B) # Verify 3rd timestep array([ 2.71828183, 1. ])