scipy.sparse.linalg.

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 + 1 gleichmäß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.linspace kompatibel.

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.        ])