Frechet Derivative of the Matrix Exponential
Compute the Frechet (actually ‘Fréchet’) derivative of the matrix exponential operator.
expmFrechet(A, E, method = c("SPS", "blockEnlarge"), expm = TRUE)
A |
square matrix (n x n). |
E |
the “small Error” matrix, used in L(A,E) = f(A + E, A) |
method |
string specifying the method / algorithm; the default
|
expm |
logical indicating if the matrix exponential itself, which is computed anyway, should be returned as well. |
Calculation of e^A and the Exponential Frechet-Derivative L(A,E).
When method = "SPS"
(by default), the
with the Scaling - Padé - Squaring Method is used, in
an R-Implementation of Al-Mohy and Higham (2009)'s Algorithm 6.4.
Scaling (of A and E)
Padé-Approximation of e^A and L(A,E)
Squaring (reversing step 1)
method = "blockEnlarge"
uses the matrix identity of
f([A E ; 0 A ]) = [f(A) Df(A); 0 f(A)]
for the (2n) x (2n) block matrices where f(A) := expm(A) and
Df(A) := L(A,E). Note that "blockEnlarge"
is much
simpler to implement but slower (CPU time is doubled for n = 100).
a list with components
expm |
if |
Lexpm |
the Exponential-Frechet-Derivative L(A,E), a matrix of the same dimension. |
Michael Stadelmann (final polish by Martin Maechler).
see expmCond
.
expm.Higham08
for the matrix exponential.
expmCond
for exponential condition number computations
which are based on expmFrechet
.
(A <- cbind(1, 2:3, 5:8, c(9,1,5,3))) E <- matrix(1e-3, 4,4) (L.AE <- expmFrechet(A, E)) all.equal(L.AE, expmFrechet(A, E, "block"), tolerance = 1e-14) ## TRUE
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.