hide long namesshow long names
hide short namesshow short names
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_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, λ λ , (and optionally the corresponding eigenvectors, x x ) of a standard complex eigenvalue problem Ax = λx Ax = λx , or of a generalized complex eigenvalue problem Ax = λBx Ax = λ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 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 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)max(1,licomm), 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)max(1,lcomm), 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).

Optional Input Parameters

None.

Input Parameters Omitted from the MATLAB Interface

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 ncvncv (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 ncvncv (see nag_sparseig_complex_init (f12an)).
The first nconv locations of the array rzest contain the complex Ritz estimates on the converged approximate eigenvalues.

Error Indicators and Warnings

None.

Accuracy

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

Further Comments

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


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