Learn R Programming

expm (version 0.99-1.1)

expAtv: Compute Matrix Exponential exp(A t) * v directly

Description

Compute $\exp(A t) * v$ directly, without evaluating $\exp(A)$.

Usage

expAtv(A, v, t = 1,
       method = "Sidje98",
       rescaleBelow = 1e-6,
       tol = 1e-07, btol = 1e-07, m.max = 30, mxrej = 10,
       verbose = getOption("verbose"))

Arguments

A
n x n matrix
v
n - vector
t
number (scalar);
method
a string indicating the method to be used; there's only one currently; we would like to add newer ones.
rescaleBelow
if norm(A,"I") is smaller than rescaleBelow, rescale A to norm 1 and t such that $A t$ remains unchanged. This step is in addition to Sidje's original algorithm
tol, btol
tolerances; these are tuning constants of the "Sidje1998" method which the user should typically not change.
m.max, mxrej
integer constants you should only change if you know what you're doing
verbose
flag indicating if the algorithm should be verbose..

Value

  • a list with components
  • eAtv.....fixme...

References

Roger B. Sidje (1998) EXPOKIT: Software Package for Computing Matrix Exponentials. ACM - Transactions On Mathematical Software 24(1), 130--156.

((NOT yet available!)) Al-Mohy, A. and Higham, N. (2011). Computing the Action of the Matrix Exponential, with an Application to Exponential Integrators. SIAM Journal on Scientific Computing, 33(2), 488--511.

See Also

expm

Examples

Run this code
source(system.file("demo", "exact-fn.R", package = "expm"))
##-> rnilMat() ; xct10
set.seed(1)
(s5 <- Matrix(m5 <- rnilMat(5))); v <- c(1,6:9)
(em5 <- expm(m5))
r5  <- expAtv(m5, v)
r5. <- expAtv(s5, v)
stopifnot(all.equal(r5, r5., tol = 1e-14),
          all.equal(c(em5 %*% v), r5$eAtv))

v <- 10:1
with(xct10, all.equal(expm(m), expm))
all.equal(c(xct10$expm %*% v),
          expAtv(xct10$m, v)$eAtv)

Run the code above in your browser using DataLab