R: Matrix Exponential

expm {pracma} | R Documentation

## Matrix Exponential

### Description

Computes the exponential of a matrix.

### Usage

    expm(A, np = 128)

    logm(A)

### Arguments

`A` | numeric square matrix.
`np` | number of points to use on the unit circle.

### Details

For an analytic function f and a matrix A the expression f(A) can be computed by the Cauchy integral

f(A) = (2 π i)^{-1} \int_G (zI-A)^{-1} f(z) dz

where G is a closed contour around the eigenvalues of A.

Here this is achieved by taking G to be a circle and approximating the integral by the trapezoid rule.

`logm` is a fake at the moment as it computes the matrix logarithm through taking the logarithm of its eigenvalues; will be replaced by an approach using Pade interpolation.

Another more accurate and more reliable approach for computing these functions can be found in the R package ‘expm’.

### Value

Matrix of the same size as `A`.

### Note

This approach could be used for other analytic functions, but a point to consider is which branch to take (e.g., for the `logm` function).

### Author(s)

Idea and Matlab code for a cubic root by Nick Trefethen in his “10 digits 1 page” project, for realization see file ‘cuberootA.m’ at http://people.maths.ox.ac.uk/trefethen/tda.html.

### References

Moler, C., and Ch. Van Loan (2003). Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later. SIAM Review, Vol. 1, No. 1, pp. 1–46. [Available at CiteSeer, citeseer.ist.psu.edu]

N. J. Higham (2008). Matrix Functions: Theory and Computation. SIAM Society for Industrial and Applied Mathematics.

### See Also

`expm::expm`

### Examples

    ##  The Ward test cases described in the help for expm::expm agree up to
    ##  10 digits with the values here and with results from Matlab's expm !
    A <- matrix(c(-49, -64, 24, 31), 2, 2)
    expm(A)
    # -0.7357588 0.5518191
    # -1.4715176 1.1036382

    A1 <- matrix(c(10,  7,  8,  7,
                    7,  5,  6,  5,
                    8,  6, 10,  9,
                    7,  5,  9, 10), nrow = 4, ncol = 4, byrow = TRUE)
    expm(logm(A1))
    logm(expm(A1))

    ##  System of linear differential equations: y' = M y  (y = c(y1, y2, y3))
    M <- matrix(c(2,-1,1, 0,3,-1, 2,1,3), 3, 3, byrow=TRUE)
    M
    C1 <- 0.5; C2 <- 1.0; C3 <- 1.5
    t  <- 2.0; Mt <- expm(t * M)
    yt <- Mt

[Package pracma version 2.0.4 Index]