expmFrechet: Frechet Derivative of the Matrix Exponential
Description
Compute the Frechet (actually ‘Fr<U+00E9>chet’) derivative of the
matrix exponential operator.
Usage
expmFrechet(A, E, method = c("SPS", "blockEnlarge"), expm = TRUE)
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.
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.
Details
Calculation of \(e^A\) and the Exponential Frechet-Derivative
\(L(A,E)\).
When method = "SPS" (by default), the
with the Scaling - Pad<U+00E9> - 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<U+00E9>-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\)).