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

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_sparseig_complex_monit (f12as)

## Purpose

nag_sparseig_complex_monit (f12as) can be used to return additional monitoring information during computation. It is in a suite of functions consisting of nag_sparseig_complex_init (f12an), nag_sparseig_complex_iter (f12ap), nag_sparseig_complex_proc (f12aq), nag_sparseig_complex_option (f12ar) and nag_sparseig_complex_monit (f12as).

## Syntax

[niter, nconv, ritz, rzest] = f12as(icomm, comm)
[niter, nconv, ritz, rzest] = nag_sparseig_complex_monit(icomm, comm)

## Description

The suite of functions is designed to calculate some of the eigenvalues, λ $\lambda$, (and optionally the corresponding eigenvectors, x $x$) of a standard complex eigenvalue problem Ax = λx $Ax=\lambda x$, or of a generalized complex eigenvalue problem Ax = λBx $Ax=\lambda Bx$ of order n $n$, where n $n$ is large and the coefficient matrices A $A$ and B $B$ are sparse and complex. The suite can also be used to find selected eigenvalues/eigenvectors of smaller scale dense complex problems.
On an intermediate exit from nag_sparseig_complex_iter (f12ap) with irevcm = 4 ${\mathbf{irevcm}}=4$, nag_sparseig_complex_monit (f12as) may be called to return monitoring information on the progress of the Arnoldi iterative process. The information returned by nag_sparseig_complex_monit (f12as) is:
 – the number of the current Arnoldi iteration; – the number of converged eigenvalues at this point; – the converged eigenvalues; – the error bounds on the converged eigenvalues.
nag_sparseig_complex_monit (f12as) does not have an equivalent function from the ARPACK package which prints various levels of detail of monitoring information through an output channel controlled via a parameter value (see Lehoucq et al. (1998) for details of ARPACK routines). nag_sparseig_complex_monit (f12as) should not be called at any time other than immediately following an irevcm = 4 ${\mathbf{irevcm}}=4$ return from nag_sparseig_complex_iter (f12ap).

## References

Lehoucq R B (2001) Implicitly restarted Arnoldi methods and subspace iteration SIAM Journal on Matrix Analysis and Applications 23 551–562
Lehoucq R B and Scott J A (1996) An evaluation of software for computing eigenvalues of sparse nonsymmetric matrices Preprint MCS-P547-1195 Argonne National Laboratory
Lehoucq R B and Sorensen D C (1996) Deflation techniques for an implicitly restarted Arnoldi iteration SIAM Journal on Matrix Analysis and Applications 17 789–821
Lehoucq R B, Sorensen D C and Yang C (1998) ARPACK Users' Guide: Solution of Large-scale Eigenvalue Problems with Implicitly Restarted Arnoldi Methods SIAM, Philidelphia

## Parameters

### Compulsory Input Parameters

1:     icomm( : $:$) – int64int32nag_int array
Note: the dimension of the array icomm must be at least max (1,licomm)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{licomm}}\right)$, where licomm is passed to the setup function  (see nag_sparseig_complex_init (f12an)).
The array icomm output by the preceding call to nag_sparseig_complex_iter (f12ap).
2:     comm( : $:$) – complex array
Note: the dimension of the array comm must be at least max (1,lcomm)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{lcomm}}\right)$, where lcomm is passed to the setup function  (see nag_sparseig_complex_init (f12an)).
The array comm output by the preceding call to nag_sparseig_complex_iter (f12ap).

None.

None.

### Output Parameters

1:     niter – int64int32nag_int scalar
The number of the current Arnoldi iteration.
2:     nconv – int64int32nag_int scalar
The number of converged eigenvalues so far.
3:     ritz( : $:$) – complex array
Note: the dimension of the array ritz must be at least ncv${\mathbf{ncv}}$ (see nag_sparseig_complex_init (f12an)).
The first nconv locations of the array ritz contain the converged approximate eigenvalues.
4:     rzest( : $:$) – complex array
Note: the dimension of the array rzest must be at least ncv${\mathbf{ncv}}$ (see nag_sparseig_complex_init (f12an)).
The first nconv locations of the array rzest contain the complex Ritz estimates on the converged approximate eigenvalues.

None.

## Accuracy

A Ritz value, λ $\lambda$, is deemed to have converged if the magnitude of its Ritz estimate Tolerance × |λ| $\le {\mathbf{Tolerance}}×|\lambda |$. The default Tolerance used is the machine precision given by nag_machine_precision (x02aj).

None.

## Example

```function nag_sparseig_complex_monit_example
n = int64(100);
nx = int64(10);
nev = int64(4);
ncv = int64(20);

irevcm = int64(0);
resid = complex(zeros(100,1));
v = complex(zeros(100,20));
x = complex(zeros(100,1));
mx = complex(zeros(100,1));

sigma = complex(0);

% Initialisation Step
[icomm, comm, ifail] = nag_sparseig_complex_init(n, nev, ncv);

% Solve
while (irevcm ~= 5)
[irevcm, resid, v, x, mx, nshift, comm, icomm, ifail] = ...
nag_sparseig_complex_iter(irevcm, resid, v, x, mx, comm, icomm);
if (irevcm == 1 || irevcm == -1)
x = f12_av(nx, x);
elseif (irevcm == 4)
[niter, nconv, ritz, rzest] = nag_sparseig_complex_monit(icomm, comm);
fprintf('Iteration %d, No. converged = %d, norm of estimates = %16.8g\n',  ...
niter, nconv, norm(rzest(1:double(nev)),2));
end
end

% Post-process to compute eigenvalues/vectors
[nconv, d, z, v, comm, icomm, ifail] = ...
nag_sparseig_complex_proc(sigma, resid, v, comm, icomm);
% sort to avoid difference in order showing as an error

function [w] = f12_av(nx, v)

inx = double(nx); % nx is int64

w = complex(zeros(inx*inx,1));

h2 = double(-(inx+1)^2);

w(1:inx) = tv(inx, v(1:inx));
w(1:inx) = h2*v(inx+1:2*inx)+w(1:inx);

for j=2:double(inx-1)
lo = (j-1)*inx +1;
hi = j*inx;

w(lo:hi) = tv(inx, v(lo:hi));
w(lo:hi) = h2*v(lo-inx:lo-1)+w(lo:hi);
w(lo:hi) = h2*v(hi+1:hi+inx)+w(lo:hi);
end

lo = (inx-1)*inx +1;
hi = inx*inx;
w(lo:hi) = tv(inx, v(lo:hi));
w(lo:hi) = h2*v(lo-inx:lo-1)+w(lo:hi);

function [y] = tv(inx,x)

y = zeros(inx,1);

dd = double(4*(inx+1)^2);
dl = double(-(inx+1)^2 - 0.5*100*(inx+1));
du = double(-(inx+1)^2 + 0.5*100*(inx+1));

y(1) = dd*x(1) + du*x(2);
for j=2:double(inx-1)
y(j) = dl*x(j-1) + dd*x(j) + du*x(j+1);
end
y(inx) = dl*x(inx-1) + dd*x(inx);
```
```
Iteration 1, No. converged = 0, norm of estimates =        133.43269
Iteration 2, No. converged = 0, norm of estimates =        99.725711
Iteration 3, No. converged = 0, norm of estimates =         42.48146
Iteration 4, No. converged = 0, norm of estimates =        8.1805323
Iteration 5, No. converged = 0, norm of estimates =        1.7794793
Iteration 6, No. converged = 0, norm of estimates =       0.49794897
Iteration 7, No. converged = 0, norm of estimates =       0.12604717
Iteration 8, No. converged = 0, norm of estimates =      0.026883649
Iteration 9, No. converged = 0, norm of estimates =     0.0070182429
Iteration 10, No. converged = 0, norm of estimates =     0.0014438635
Iteration 11, No. converged = 0, norm of estimates =    0.00040007427
Iteration 12, No. converged = 0, norm of estimates =     0.0001059392
Iteration 13, No. converged = 0, norm of estimates =     2.803229e-05
Iteration 14, No. converged = 0, norm of estimates =    7.7343157e-06
Iteration 15, No. converged = 0, norm of estimates =    1.9579037e-06
Iteration 16, No. converged = 0, norm of estimates =      6.15616e-07
Iteration 17, No. converged = 0, norm of estimates =    1.2591405e-07
Iteration 18, No. converged = 0, norm of estimates =    3.7790713e-08
Iteration 19, No. converged = 2, norm of estimates =    8.3787181e-09
Iteration 20, No. converged = 2, norm of estimates =    1.8827432e-09
Iteration 21, No. converged = 2, norm of estimates =    1.6920778e-10
Iteration 22, No. converged = 2, norm of estimates =     2.299125e-11
Iteration 23, No. converged = 2, norm of estimates =     3.391976e-12
Iteration 24, No. converged = 2, norm of estimates =    5.5954988e-13

```
```function f12as_example
n = int64(100);
nx = int64(10);
nev = int64(4);
ncv = int64(20);

irevcm = int64(0);
resid = complex(zeros(100,1));
v = complex(zeros(100,20));
x = complex(zeros(100,1));
mx = complex(zeros(100,1));

sigma = complex(0);

% Initialisation Step
[icomm, comm, ifail] = f12an(n, nev, ncv);

% Solve
while (irevcm ~= 5)
[irevcm, resid, v, x, mx, nshift, comm, icomm, ifail] = ...
f12ap(irevcm, resid, v, x, mx, comm, icomm);
if (irevcm == 1 || irevcm == -1)
x = f12_av(nx, x);
elseif (irevcm == 4)
[niter, nconv, ritz, rzest] = f12as(icomm, comm);
fprintf('Iteration %d, No. converged = %d, norm of estimates = %16.8g\n', ...
niter, nconv, norm(rzest(1:double(nev)),2));
end
end

% Post-process to compute eigenvalues/vectors
[nconv, d, z, v, comm, icomm, ifail] = f12aq(sigma, resid, v, comm, icomm);
% sort to avoid difference in order showing as an error

function [w] = f12_av(nx, v)

inx = double(nx); % nx is int64

w = complex(zeros(inx*inx,1));

h2 = double(-(inx+1)^2);

w(1:inx) = tv(inx, v(1:inx));
w(1:inx) = h2*v(inx+1:2*inx)+w(1:inx);

for j=2:double(inx-1)
lo = (j-1)*inx +1;
hi = j*inx;

w(lo:hi) = tv(inx, v(lo:hi));
w(lo:hi) = h2*v(lo-inx:lo-1)+w(lo:hi);
w(lo:hi) = h2*v(hi+1:hi+inx)+w(lo:hi);
end

lo = (inx-1)*inx +1;
hi = inx*inx;
w(lo:hi) = tv(inx, v(lo:hi));
w(lo:hi) = h2*v(lo-inx:lo-1)+w(lo:hi);

function [y] = tv(inx,x)

y = zeros(inx,1);

dd = double(4*(inx+1)^2);
dl = double(-(inx+1)^2 - 0.5*100*(inx+1));
du = double(-(inx+1)^2 + 0.5*100*(inx+1));

y(1) = dd*x(1) + du*x(2);
for j=2:double(inx-1)
y(j) = dl*x(j-1) + dd*x(j) + du*x(j+1);
end
y(inx) = dl*x(inx-1) + dd*x(inx);
```
```
Iteration 1, No. converged = 0, norm of estimates =        133.43269
Iteration 2, No. converged = 0, norm of estimates =        99.725711
Iteration 3, No. converged = 0, norm of estimates =         42.48146
Iteration 4, No. converged = 0, norm of estimates =        8.1805323
Iteration 5, No. converged = 0, norm of estimates =        1.7794793
Iteration 6, No. converged = 0, norm of estimates =       0.49794897
Iteration 7, No. converged = 0, norm of estimates =       0.12604717
Iteration 8, No. converged = 0, norm of estimates =      0.026883649
Iteration 9, No. converged = 0, norm of estimates =     0.0070182429
Iteration 10, No. converged = 0, norm of estimates =     0.0014438635
Iteration 11, No. converged = 0, norm of estimates =    0.00040007427
Iteration 12, No. converged = 0, norm of estimates =     0.0001059392
Iteration 13, No. converged = 0, norm of estimates =     2.803229e-05
Iteration 14, No. converged = 0, norm of estimates =    7.7343157e-06
Iteration 15, No. converged = 0, norm of estimates =    1.9579037e-06
Iteration 16, No. converged = 0, norm of estimates =      6.15616e-07
Iteration 17, No. converged = 0, norm of estimates =    1.2591405e-07
Iteration 18, No. converged = 0, norm of estimates =    3.7790713e-08
Iteration 19, No. converged = 2, norm of estimates =    8.3787181e-09
Iteration 20, No. converged = 2, norm of estimates =    1.8827432e-09
Iteration 21, No. converged = 2, norm of estimates =    1.6920778e-10
Iteration 22, No. converged = 2, norm of estimates =     2.299125e-11
Iteration 23, No. converged = 2, norm of estimates =     3.391976e-12
Iteration 24, No. converged = 2, norm of estimates =    5.5954988e-13

```