f01 Chapter Contents
f01 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_matop_complex_gen_matrix_pow (f01fqc)

## 1  Purpose

nag_matop_complex_gen_matrix_pow (f01fqc) computes an abitrary real power ${A}^{p}$ of a complex $n$ by $n$ matrix $A$.

## 2  Specification

 #include #include
 void nag_matop_complex_gen_matrix_pow (Integer n, Complex a[], Integer pda, double p, NagError *fail)

## 3  Description

For a matrix $A$ with no eigenvalues on the closed negative real line, ${A}^{p}$ ($p\in ℝ$) can be defined as
 $Ap= expplogA$
where $\mathrm{log}\left(A\right)$ is the principal logarithm of $A$ (the unique logarithm whose spectrum lies in the strip $\left\{z:-\pi <\mathrm{Im}\left(z\right)<\pi \right\}$).
${A}^{p}$ is computed using the Schur–Padé algorithm described in Higham and Lin (2011) and Higham and Lin (2013).
The real number $p$ is expressed as $p=q+r$ where $q\in \left(-1,1\right)$ and $r\in ℤ$. Then ${A}^{p}={A}^{q}{A}^{r}$. The integer power ${A}^{r}$ is found using a combination of binary powering and, if necessary, matrix inversion. The fractional power ${A}^{q}$ is computed using a Schur decomposition and a Padé approximant.

## 4  References

Higham N J (2008) Functions of Matrices: Theory and Computation SIAM, Philadelphia, PA, USA
Higham N J and Lin L (2011) A Schur–Padé algorithm for fractional powers of a matrix SIAM J. Matrix Anal. Appl. 32(3) 1056–1078
Higham N J and Lin L (2013) An improved Schur–Padé algorithm for fractional powers of a matrix and their Fréchet derivatives MIMS Eprint 2013.1 Manchester Institute for Mathematical Sciences, School of Mathematics, University of Manchester http://eprints.ma.man.ac.uk/

## 5  Arguments

1:     nIntegerInput
On entry: $n$, the order of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
2:     a[$\mathit{dim}$]ComplexInput/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: if ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_NOERROR, the $n$ by $n$ matrix $p$th power, ${A}^{p}$. Alternatively, if ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_NEGATIVE_EIGVAL, contains an $n$ by $n$ non-principal power of $A$.
3:     pdaIntegerInput
On entry: the stride separating matrix row elements in the array a.
Constraint: ${\mathbf{pda}}\ge {\mathbf{n}}$.
4:     pdoubleInput
On entry: the required power of $A$.
5:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_INT
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}}$.
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.
NE_NEGATIVE_EIGVAL
$A$ has eigenvalues on the negative real line. The principal $p$th power is not defined so a non-principal power is returned.
NE_SINGULAR
$A$ is singular so the $p$th power cannot be computed.
NW_SOME_PRECISION_LOSS
${A}^{p}$ has been computed using an IEEE double precision Padé approximant, although the arithmetic precision is higher than IEEE double precision.

## 7  Accuracy

For positive integer $p$, the algorithm reduces to a sequence of matrix multiplications. For negative integer $p$, the algorithm consists of a combination of matrix inversion and matrix multiplications.
For a normal matrix $A$ (for which ${A}^{\mathrm{H}}A=A{A}^{\mathrm{H}}$) and non-integer $p$, the Schur decomposition is diagonal and the algorithm reduces to evaluating powers of the eigenvalues of $A$ and then constructing ${A}^{p}$ using the Schur vectors. This should give a very accurate result. In general however, no error bounds are available for the algorithm.

## 8  Parallelism and Performance

nag_matop_complex_gen_matrix_pow (f01fqc) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
nag_matop_complex_gen_matrix_pow (f01fqc) 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 cost of the algorithm is $O\left({n}^{3}\right)$. The exact cost depends on the matrix $A$ but if $p\in \left(-1,1\right)$ then the cost is independent of $p$. $O\left(4×{n}^{2}\right)$ complex allocatable memory is required by the function.
If estimates of the condition number of ${A}^{p}$ are required then nag_matop_complex_gen_matrix_cond_pow (f01kec) should be used.

## 10  Example

This example finds ${A}^{p}$ where $p=0.2$ and
 $A = 2i+ 3i+0 2i+0 1+3i 2+i 1i+0 1i+0 2+2i 2+i 2+2i 2i 2+4i 3i+ 2+2i 3i+0 1i+0 .$

### 10.1  Program Text

Program Text (f01fqce.c)

### 10.2  Program Data

Program Data (f01fqce.d)

### 10.3  Program Results

Program Results (f01fqce.r)