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

expAtv {expm} | R Documentation

## 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 and easily seen to be necessary even in simple cases (e.g., n = 3).
`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...

### Author(s)

Ravi Varadhan, Johns Hopkins University; Martin Maechler (cosmetic, generalization to sparse matrices; rescaling (see `rescaleBelow`).

### 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

    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., tolerance = 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)

[Package expm version 0.999-2 Index]