f01 Chapter Contents
f01 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_matop_real_gen_matrix_actexp (f01gac)

## 1  Purpose

nag_matop_real_gen_matrix_actexp (f01gac) computes the action of the matrix exponential ${e}^{tA}$, on the matrix $B$, where $A$ is a real $n$ by $n$ matrix, $B$ is a real $n$ by $m$ matrix and $t$ is a real scalar.

## 2  Specification

 #include #include
 void nag_matop_real_gen_matrix_actexp (Integer n, Integer m, double a[], Integer pda, double b[], Integer pdb, double t, NagError *fail)

## 3  Description

${e}^{tA}B$ is computed using the algorithm described in Al–Mohy and Higham (2011) which uses a truncated Taylor series to compute the product ${e}^{tA}B$ without explicitly forming ${e}^{tA}$.

## 4  References

Al–Mohy A H and Higham N J (2011) Computing the action of the matrix exponential, with an application to exponential integrators SIAM J. Sci. Statist. Comput. 33(2) 488-511
Higham N J (2008) Functions of Matrices: Theory and Computation SIAM, Philadelphia, PA, USA

## 5  Arguments

1:     nIntegerInput
On entry: $n$, the order of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
2:     mIntegerInput
On entry: $m$, the number of columns of the matrix $B$.
Constraint: ${\mathbf{m}}\ge 0$.
3:     a[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array a must be at least ${\mathbf{pda}}×{\mathbf{n}}$.
The $\left(i,j\right)$th element of the matrix $A$ is stored in ${\mathbf{a}}\left[\left(j-1\right)×{\mathbf{pda}}+i-1\right]$.
On entry: the $n$ by $n$ matrix $A$.
On exit: $A$ is overwritten during the computation.
4:     pdaIntegerInput
On entry: the stride separating matrix row elements in the array a.
Constraint: ${\mathbf{pda}}\ge {\mathbf{n}}$.
5:     b[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array b must be at least ${\mathbf{pdb}}×{\mathbf{m}}$.
The $\left(i,j\right)$th element of the matrix $B$ is stored in ${\mathbf{b}}\left[\left(j-1\right)×{\mathbf{pdb}}+i-1\right]$.
On entry: the $n$ by $m$ matrix $B$.
On exit: the $n$ by $m$ matrix ${e}^{tA}B$.
6:     pdbIntegerInput
On entry: the stride separating matrix row elements in the array b.
Constraint: ${\mathbf{pdb}}\ge {\mathbf{n}}$.
7:     tdoubleInput
On entry: the scalar $t$.
8:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Allocation of memory failed.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_INT
On entry, ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{m}}\ge 0$.
On entry, ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{n}}\ge 0$.
NE_INT_2
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}\ge {\mathbf{n}}$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}\ge {\mathbf{n}}$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NW_SOME_PRECISION_LOSS
${e}^{tA}B$ has been computed using an IEEE double precision Taylor series, although the arithmetic precision is higher than IEEE double precision.

## 7  Accuracy

For a symmetric matrix $A$ (for which ${A}^{\mathrm{T}}=A$) the computed matrix ${e}^{tA}B$ is guaranteed to be close to the exact matrix, that is, the method is forward stable. No such guarantee can be given for non-symmetric matrices. See Section 4 of Al–Mohy and Higham (2011) for details and further discussion.

## 8  Parallelism and Performance

nag_matop_real_gen_matrix_actexp (f01gac) is not threaded by NAG in any implementation.
nag_matop_real_gen_matrix_actexp (f01gac) makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.

The matrix ${e}^{tA}B$ could be computed by explicitly forming ${e}^{tA}$ using nag_real_gen_matrix_exp (f01ecc) and multiplying $B$ by the result. However, experiments show that it is usually both more accurate and quicker to use nag_matop_real_gen_matrix_actexp (f01gac).
The cost of the algorithm is $\mathit{O}\left({n}^{2}m\right)$. The precise cost depends on $A$ since a combination of balancing, shifting and scaling is used prior to the Taylor series evaluation.
Approximately ${n}^{2}+\left(2m+8\right)n$ of real allocatable memory is required by nag_matop_real_gen_matrix_actexp (f01gac).
nag_matop_complex_gen_matrix_actexp (f01hac) can be used to compute ${e}^{tA}B$ for complex $A$, $B$, and $t$. nag_matop_real_gen_matrix_actexp_rcomm (f01gbc) provides an implementation of the algorithm with a reverse communication interface, which returns control to the user when matrix multiplications are required. This should be used if $A$ is large and sparse.

## 10  Example

This example computes ${e}^{tA}B$, where
 $A = 0.7 -0.2 1.0 0.3 0.3 0.7 1.2 1.0 0.9 0.0 0.2 0.7 2.4 0.1 0.0 0.2 ,$
 $B = 0.1 1.2 1.3 0.2 0.0 1.0 0.4 -0.9$
and
 $t=1.2 .$

### 10.1  Program Text

Program Text (f01gace.c)

### 10.2  Program Data

Program Data (f01gace.d)

### 10.3  Program Results

Program Results (f01gace.r)