Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_eigen_real_gen_eigsys (f02ec)

## Purpose

nag_eigen_real_gen_eigsys (f02ec) computes selected eigenvalues and eigenvectors of a real general matrix.

## Syntax

[a, m, wr, wi, vr, vi, ifail] = f02ec(crit, a, wl, wu, mest, 'n', n)
[a, m, wr, wi, vr, vi, ifail] = nag_eigen_real_gen_eigsys(crit, a, wl, wu, mest, 'n', n)

## Description

nag_eigen_real_gen_eigsys (f02ec) computes selected eigenvalues and the corresponding right eigenvectors of a real general matrix A$A$:
 Axi = λi xi . $Axi = λi xi .$
Eigenvalues λi${\lambda }_{i}$ may be selected either by modulus, satisfying:
 wl ≤ |λi| ≤ wu , $wl ≤ |λi| ≤ wu ,$
or by real part, satisfying:
 wl ≤ Re(λi) ≤ wu . $wl ≤ Re(λi) ≤ wu .$
Note that even though A$A$ is real, λi${\lambda }_{i}$ and xi${x}_{i}$ may be complex. If xi${x}_{i}$ is an eigenvector corresponding to a complex eigenvalue λi${\lambda }_{i}$, then the complex conjugate vector xi${\stackrel{-}{x}}_{i}$ is the eigenvector corresponding to the complex conjugate eigenvalue λi${\stackrel{-}{\lambda }}_{i}$. The eigenvalues in a complex conjugate pair λi${\lambda }_{i}$ and λi${\stackrel{-}{\lambda }}_{i}$ are either both selected or both not selected.

## References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

## Parameters

### Compulsory Input Parameters

1:     crit – string (length ≥ 1)
Indicates the criterion for selecting eigenvalues.
crit = 'M'${\mathbf{crit}}=\text{'M'}$
Eigenvalues are selected according to their moduli: wl|λi|wu${w}_{l}\le |{\lambda }_{i}|\le {w}_{u}$.
crit = 'R'${\mathbf{crit}}=\text{'R'}$
Eigenvalues are selected according to their real parts: wlRe(λi)wu${w}_{l}\le \mathrm{Re}\left({\lambda }_{i}\right)\le {w}_{u}$.
Constraint: crit = 'M'${\mathbf{crit}}=\text{'M'}$ or 'R'$\text{'R'}$.
2:     a(lda,n) – double array
lda, the first dimension of the array, must satisfy the constraint ldamax (1,n)$\mathit{lda}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The n$n$ by n$n$ general matrix A$A$.
3:     wl – double scalar
4:     wu – double scalar
wl${w}_{l}$ and wu${w}_{u}$, the lower and upper bounds on the criterion for the selected eigenvalues (see crit).
Constraint: wu > wl${\mathbf{wu}}>{\mathbf{wl}}$.
5:     mest – int64int32nag_int scalar
The second dimension of the arrays vr and vi as declared in the (sub)program from which nag_eigen_real_gen_eigsys (f02ec) is called. mest must be an upper bound on m$m$, the number of eigenvalues and eigenvectors selected. No eigenvectors are computed if mest < m${\mathbf{mest}}.
Constraint: mestmax (1,m)${\mathbf{mest}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,m\right)$.

### Optional Input Parameters

1:     n – int64int32nag_int scalar
Default: The second dimension of the array a.
n$n$, the order of the matrix A$A$.
Constraint: n0${\mathbf{n}}\ge 0$.

### Input Parameters Omitted from the MATLAB Interface

lda ldvr ldvi work lwork iwork bwork

### Output Parameters

1:     a(lda,n) – double array
ldamax (1,n)$\mathit{lda}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
Contains the Hessenberg form of the balanced input matrix A${A}^{\prime }$ (see Section [Further Comments]).
2:     m – int64int32nag_int scalar
m$m$, the number of eigenvalues actually selected.
3:     wr(n) – double array
4:     wi(n) – double array
The first m elements of wr and wi hold the real and imaginary parts, respectively, of the selected eigenvalues; elements m + 1${\mathbf{m}}+1$ to n contain the other eigenvalues. Complex conjugate pairs of eigenvalues are stored in consecutive elements of the arrays, with the eigenvalue having positive imaginary part first. See also Section [Further Comments].
5:     vr(ldvr,mest) – double array
ldvrmax (1,n)$\mathit{ldvr}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
Contains the real parts of the selected eigenvectors, with the i$i$th column holding the real part of the eigenvector associated with the eigenvalue λi${\lambda }_{i}$ (stored in wr(i)${\mathbf{wr}}\left(i\right)$ and wi(i)${\mathbf{wi}}\left(i\right)$).
6:     vi(ldvi,mest) – double array
ldvimax (1,n)$\mathit{ldvi}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
Contains the imaginary parts of the selected eigenvectors, with the i$i$th column holding the imaginary part of the eigenvector associated with the eigenvalue λi${\lambda }_{i}$ (stored in wr(i)${\mathbf{wr}}\left(i\right)$ and wi(i)${\mathbf{wi}}\left(i\right)$).
7:     ifail – int64int32nag_int scalar
${\mathrm{ifail}}={\mathbf{0}}$ unless the function detects an error (see [Error Indicators and Warnings]).

## Error Indicators and Warnings

Errors or warnings detected by the function:

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

ifail = 1${\mathbf{ifail}}=1$
 On entry, crit ≠ 'M'${\mathbf{crit}}\ne \text{'M'}$ or 'R'$\text{'R'}$, or n < 0${\mathbf{n}}<0$, or lda < max (1,n)$\mathit{lda}<\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$, or wu ≤ wl${\mathbf{wu}}\le {\mathbf{wl}}$, or mest < 1${\mathbf{mest}}<1$, or ldvr < max (1,n)$\mathit{ldvr}<\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$, or ldvi < max (1,n)$\mathit{ldvi}<\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$, or lwork < max (1,n × (n + 4))$\mathit{lwork}<\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}×\left({\mathbf{n}}+4\right)\right)$.
ifail = 2${\mathbf{ifail}}=2$
The QR$QR$ algorithm failed to compute all the eigenvalues. No eigenvectors have been computed.
ifail = 3${\mathbf{ifail}}=3$
There are more than mest eigenvalues in the specified range. The actual number of eigenvalues in the range is returned in m. No eigenvectors have been computed. Rerun with the second dimension of vr and vi = mestm${\mathbf{vi}}={\mathbf{mest}}\ge {\mathbf{m}}$.
W ifail = 4${\mathbf{ifail}}=4$
Inverse iteration failed to compute all the specified eigenvectors. If an eigenvector failed to converge, the corresponding column of vr and vi is set to zero.

## Accuracy

If λi${\lambda }_{i}$ is an exact eigenvalue, and λ̃i${\stackrel{~}{\lambda }}_{i}$ is the corresponding computed value, then
 |λ̃i − λi| ≤ (c(n)ε‖A′‖2)/(si), $|λ~i-λi|≤c(n)ε‖A′‖2si,$
where c(n)$c\left(n\right)$ is a modestly increasing function of n$n$, ε$\epsilon$ is the machine precision, and si${s}_{i}$ is the reciprocal condition number of λi${\lambda }_{i}$; A${A}^{\prime }$ is the balanced form of the original matrix A$A$ (see Section [Further Comments]), and AA$‖{A}^{\prime }‖\le ‖A‖$.
If xi${x}_{i}$ is the corresponding exact eigenvector, and i${\stackrel{~}{x}}_{i}$ is the corresponding computed eigenvector, then the angle θ(i,xi)$\theta \left({\stackrel{~}{x}}_{i},{x}_{i}\right)$ between them is bounded as follows:
 θ(x̃i,xi) ≤ (c(n)ε‖A′‖2)/(sepi), $θ(x~i,xi)≤c(n)ε‖A′‖2sepi,$
where sepi${\mathit{sep}}_{i}$ is the reciprocal condition number of xi${x}_{i}$.
The condition numbers si${s}_{i}$ and sepi${\mathit{sep}}_{i}$ may be computed from the Hessenberg form of the balanced matrix A${A}^{\prime }$ which is returned in the array a. This requires calling nag_lapack_dhseqr (f08pe) with job = 'S'${\mathbf{job}}=\text{'S'}$ to compute the Schur form of A${A}^{\prime }$, followed by nag_lapack_dtrsna (f08ql).

nag_eigen_real_gen_eigsys (f02ec) calls functions from LAPACK in Chapter F08. It first balances the matrix, using a diagonal similarity transformation to reduce its norm; and then reduces the balanced matrix A${A}^{\prime }$ to upper Hessenberg form H$H$, using an orthogonal similarity transformation: A = QHQT${A}^{\prime }=QH{Q}^{\mathrm{T}}$. The function uses the Hessenberg QR$QR$ algorithm to compute all the eigenvalues of H$H$, which are the same as the eigenvalues of A$A$. It computes the eigenvectors of H$H$ which correspond to the selected eigenvalues, using inverse iteration. It premultiplies the eigenvectors by Q$Q$ to form the eigenvectors of A${A}^{\prime }$; and finally transforms the eigenvectors to those of the original matrix A$A$.
Each eigenvector x$x$ (real or complex) is normalized so that x2 = 1${‖x‖}_{2}=1$, and the element of largest absolute value is real and positive.
The inverse iteration function may make a small perturbation to the real parts of close eigenvalues, and this may shift their moduli just outside the specified bounds. If you are relying on eigenvalues being within the bounds, you should test them on return from nag_eigen_real_gen_eigsys (f02ec).
The time taken by the function is approximately proportional to n3${n}^{3}$.
The function can be used to compute all eigenvalues and eigenvectors, by setting wl large and negative, and wu large and positive.

## Example

```function nag_eigen_real_gen_eigsys_example
crit = 'Moduli';
a = [0.35, 0.45, -0.14, -0.17;
0.09, 0.07, -0.54, 0.35;
-0.44, -0.33, -0.03, 0.17;
0.25, -0.32, -0.13, 0.11];
wl = 0.2;
wu = 0.5;
mest = int64(3);
[aOut, m, wr, wi, vr, vi, ifail] = nag_eigen_real_gen_eigsys(crit, a, wl, wu, mest)
```
```

aOut =

0.3500   -0.1160   -0.3886   -0.2942
-0.5140    0.1225    0.1004    0.1126
-0.7285    0.6443   -0.1357   -0.0977
0.4139   -0.1665    0.4262    0.1632

m =

2

wr =

-0.0994
-0.0994
0.7995
-0.1007

wi =

0.4008
-0.4008
0
0

vr =

-0.1933   -0.1933         0
0.2519    0.2519         0
0.0972    0.0972         0
0.6760    0.6760         0

vi =

0.2546   -0.2546         0
-0.5224    0.5224         0
-0.3084    0.3084         0
0         0         0

ifail =

0

```
```function f02ec_example
crit = 'Moduli';
a = [0.35, 0.45, -0.14, -0.17;
0.09, 0.07, -0.54, 0.35;
-0.44, -0.33, -0.03, 0.17;
0.25, -0.32, -0.13, 0.11];
wl = 0.2;
wu = 0.5;
mest = int64(3);
[aOut, m, wr, wi, vr, vi, ifail] = f02ec(crit, a, wl, wu, mest)
```
```

aOut =

0.3500   -0.1160   -0.3886   -0.2942
-0.5140    0.1225    0.1004    0.1126
-0.7285    0.6443   -0.1357   -0.0977
0.4139   -0.1665    0.4262    0.1632

m =

2

wr =

-0.0994
-0.0994
0.7995
-0.1007

wi =

0.4008
-0.4008
0
0

vr =

-0.1933   -0.1933         0
0.2519    0.2519         0
0.0972    0.0972         0
0.6760    0.6760         0

vi =

0.2546   -0.2546         0
-0.5224    0.5224         0
-0.3084    0.3084         0
0         0         0

ifail =

0

```

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013