expmFrechet {expm}  R Documentation 
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)
Arguments
A 
square matrix ( 
E 
the “small Error” matrix,
used in 
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. 
Details
Calculation of e^A
and the Exponential FrechetDerivative
L(A,E)
.
When method = "SPS"
(by default), the
with the Scaling  Padé  Squaring Method is used, in
an RImplementation of AlMohy and Higham (2009)'s Algorithm 6.4.
 Step 1:
Scaling (of A and E)
 Step 2:
PadéApproximation of
e^A
andL(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
).
Value
a list with components
expm 
if 
Lexpm 
the ExponentialFrechetDerivative 
Author(s)
Michael Stadelmann (final polish by Martin Maechler).
References
see expmCond
.
See Also
expm.Higham08
for the matrix exponential.
expmCond
for exponential condition number computations
which are based on expmFrechet
.
Examples
(A < cbind(1, 2:3, 5:8, c(9,1,5,3)))
E < matrix(1e3, 4,4)
(L.AE < expmFrechet(A, E))
all.equal(L.AE, expmFrechet(A, E, "block"), tolerance = 1e14) ## TRUE