expmFrechet: Frechet Derivative of the Matrix Exponential
Description
Compute the Frechet (actually ‘Fréchet’) derivative of the
matrix exponential operator.
Usage
expmFrechet(A, E, method = c("SPS", "blockEnlarge"), expm = TRUE)
Value
a list with components
expm
if expm is true, the matrix exponential
(\(n \times n\) matrix).
Lexpm
the Exponential-Frechet-Derivative \(L(A,E)\), a matrix
of the same dimension.
Arguments
A
square matrix (\(n \times n\)).
E
the “small Error” matrix,
used in \(L(A,E) = f(A + E, A)\)
method
string specifying the method / algorithm; the default
"SPS" is “Scaling + Pade + Squaring” as in the
algorithm 6.4 below; otherwise see the ‘Details’ section.
expm
logical indicating if the matrix exponential itself, which
is computed anyway, should be returned as well.
Author
Michael Stadelmann (final polish by Martin Maechler).
Details
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.
Step 1:
Scaling (of A and E)
Step 2:
Padé-Approximation of \(e^A\) and \(L(A,E)\)
Step 3:
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 \times
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\)).
References
see expmCond.
See Also
expm.Higham08 for the matrix exponential.
expmCond for exponential condition number computations
which are based on expmFrechet.