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_real_monit (f12ae)

Purpose

nag_sparseig_real_monit (f12ae) can be used to return additional monitoring information during computation. It is in a suite of functions consisting of nag_sparseig_real_init (f12aa), nag_sparseig_real_iter (f12ab), nag_sparseig_real_proc (f12ac), nag_sparseig_real_option (f12ad) and nag_sparseig_real_monit (f12ae).

Syntax

[niter, nconv, ritzr, ritzi, rzest] = f12ae(icomm, comm)
[niter, nconv, ritzr, ritzi, rzest] = nag_sparseig_real_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 eigenvalue problem Ax = λx Ax = λx , or of a generalized 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, real and nonsymmetric. The suite can also be used to find selected eigenvalues/eigenvectors of smaller scale dense, real and nonsymmetric problems.
On an intermediate exit from nag_sparseig_real_iter (f12ab) with irevcm = 4 irevcm = 4 , nag_sparseig_real_monit (f12ae) may be called to return monitoring information on the progress of the Arnoldi iterative process. The information returned by nag_sparseig_real_monit (f12ae) is:
the number of the current Arnoldi iteration;
the number of converged eigenvalues at this point;
the real and imaginary parts of the converged eigenvalues;
the error bounds on the converged eigenvalues.
nag_sparseig_real_monit (f12ae) 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_real_monit (f12ae) should not be called at any time other than immediately following an irevcm = 4 irevcm = 4  return from nag_sparseig_real_iter (f12ab).

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_real_init (f12aa)).
The array icomm output by the preceding call to nag_sparseig_real_iter (f12ab).
2:     comm( : :) – double array
Note: the dimension of the array comm must be at least max (1, 3 × n + 3 × ncv × ncv + 6 × ncv + 60 )max(1,3×n+ 3×ncv× ncv+ 6×ncv +60 ) (see nag_sparseig_real_init (f12aa)).
The array comm output by the preceding call to nag_sparseig_real_iter (f12ab).

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:     ritzr( : :) – double array
Note: the dimension of the array ritzr must be at least ncvncv (see nag_sparseig_real_init (f12aa)).
The first nconv locations of the array ritzr contain the real parts of the converged approximate eigenvalues.
4:     ritzi( : :) – double array
Note: the dimension of the array ritzi must be at least ncvncv (see nag_sparseig_real_init (f12aa)).
The first nconv locations of the array ritzi contain the imaginary parts of the converged approximate eigenvalues.
5:     rzest( : :) – double array
Note: the dimension of the array rzest must be at least ncvncv (see nag_sparseig_real_init (f12aa)).
The first nconv locations of the array rzest contain the Ritz estimates (error bounds) on the converged approximate eigenvalues.

Error Indicators and Warnings

None.

Accuracy

A Ritz value, λ λ , is deemed to have converged if 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_real_monit_example
n = 100;
nev = 4;
ncv = 20;

h = 1/(double(n)+1);
rho = 10;
md = repmat(4*h, double(n), 1);
me = repmat(h, double(n-1), 1);

irevcm = int64(0);
resid = zeros(n,1);
v = zeros(n, ncv);
x = zeros(n, 1);
mx = zeros(n);

dd = 2/h;
dl = -1/h - rho/2;
du = -1/h + rho/2;
y = zeros(n,1);


[icomm, comm, ifail] = nag_sparseig_real_init(int64(n), int64(nev), int64(ncv));
[icomm, comm, ifail] = nag_sparseig_real_option('REGULAR INVERSE', icomm, comm);
[icomm, comm, ifail] = nag_sparseig_real_option('GENERALIZED', icomm, comm);

% Construct m and factorise
[md, me, info] = nag_lapack_dpttrf(md, me);

while (irevcm ~= 5)
  [irevcm, resid, v, x, mx, nshift, comm, icomm, ifail] = ...
    nag_sparseig_real_iter(irevcm, resid, v, x, mx, comm, icomm);
  if (irevcm == -1 || irevcm == 1)
    y(1) = dd*x(1) + du*x(2);
    for i = 2:n-1
      y(i) = dl*x(i-1) + dd*x(i) + du*x(i+1);
    end
    y(n) = dl*x(n-1) + dd*x(n);
    [x, info] = nag_lapack_dpttrs(md, me, y);
  elseif (irevcm == 2)
    y(1) = 4*x(1) + x(2);
    for i=2:n-1
      y(i) = x(i-1) + 4*x(i) + x(i+1);
    end
    y(n) = x(n-1) + 4*x(n);
    x = h*y;
  elseif (irevcm == 4)
    [niter, nconv, ritzr, ritzi, rzest] = nag_sparseig_real_monit(icomm, comm);
    if (niter == 1)
      fprintf('\n');
    end
    fprintf('Iteration %2d No. converged = %d Norm of estimates = %16.8e\n', niter, nconv, norm(rzest));
    converged(niter,1) = nconv;
    rzestNorms(niter,1) = norm(rzest);
  end
end
[nconv, dr, di, z, v, comm, icomm, ifail] = nag_sparseig_real_proc(0, 0, resid, v, comm, icomm);
 nconv, dr, di, ifail
 

Iteration  1 No. converged = 0 Norm of estimates =   5.56325675e+03
Iteration  2 No. converged = 0 Norm of estimates =   5.44836588e+03
Iteration  3 No. converged = 0 Norm of estimates =   5.30320774e+03
Iteration  4 No. converged = 0 Norm of estimates =   6.24234186e+03
Iteration  5 No. converged = 0 Norm of estimates =   7.15674705e+03
Iteration  6 No. converged = 0 Norm of estimates =   5.45460864e+03
Iteration  7 No. converged = 0 Norm of estimates =   6.43147571e+03
Iteration  8 No. converged = 0 Norm of estimates =   5.11241161e+03
Iteration  9 No. converged = 0 Norm of estimates =   7.19327824e+03
Iteration 10 No. converged = 1 Norm of estimates =   5.77945489e+03
Iteration 11 No. converged = 2 Norm of estimates =   4.73125738e+03
Iteration 12 No. converged = 3 Norm of estimates =   5.00078500e+03

nconv =

                    4


dr =

   1.0e+04 *

    2.0383
    2.0339
    2.0265
    2.0163


di =

     0
     0
     0
     0


ifail =

                    0


function f12ae_example
n = 100;
nev = 4;
ncv = 20;

h = 1/(double(n)+1);
rho = 10;
md = repmat(4*h, double(n), 1);
me = repmat(h, double(n-1), 1);

irevcm = int64(0);
resid = zeros(n,1);
v = zeros(n, ncv);
x = zeros(n, 1);
mx = zeros(n);

dd = 2/h;
dl = -1/h - rho/2;
du = -1/h + rho/2;
y = zeros(n,1);


[icomm, comm, ifail] = f12aa(int64(n), int64(nev), int64(ncv));
[icomm, comm, ifail] = f12ad('REGULAR INVERSE', icomm, comm);
[icomm, comm, ifail] = f12ad('GENERALIZED', icomm, comm);

% Construct m and factorise
[md, me, info] = f07jd(md, me);

while (irevcm ~= 5)
  [irevcm, resid, v, x, mx, nshift, comm, icomm, ifail] = ...
    f12ab(irevcm, resid, v, x, mx, comm, icomm);
  if (irevcm == -1 || irevcm == 1)
    y(1) = dd*x(1) + du*x(2);
    for i = 2:n-1
      y(i) = dl*x(i-1) + dd*x(i) + du*x(i+1);
    end
    y(n) = dl*x(n-1) + dd*x(n);
    [x, info] = f07je(md, me, y);
  elseif (irevcm == 2)
    y(1) = 4*x(1) + x(2);
    for i=2:n-1
      y(i) = x(i-1) + 4*x(i) + x(i+1);
    end
    y(n) = x(n-1) + 4*x(n);
    x = h*y;
  elseif (irevcm == 4)
    [niter, nconv, ritzr, ritzi, rzest] = f12ae(icomm, comm);
    if (niter == 1)
      fprintf('\n');
    end
    fprintf('Iteration %2d No. converged = %d Norm of estimates = %16.8e\n', ...
            niter, nconv, norm(rzest));
    converged(niter,1) = nconv;
    rzestNorms(niter,1) = norm(rzest);
  end
end
[nconv, dr, di, z, v, comm, icomm, ifail] = f12ac(0, 0, resid, v, comm, icomm);
 nconv, dr, di, ifail
 

Iteration  1 No. converged = 0 Norm of estimates =   5.56325675e+03
Iteration  2 No. converged = 0 Norm of estimates =   5.44836588e+03
Iteration  3 No. converged = 0 Norm of estimates =   5.30320774e+03
Iteration  4 No. converged = 0 Norm of estimates =   6.24234186e+03
Iteration  5 No. converged = 0 Norm of estimates =   7.15674705e+03
Iteration  6 No. converged = 0 Norm of estimates =   5.45460864e+03
Iteration  7 No. converged = 0 Norm of estimates =   6.43147571e+03
Iteration  8 No. converged = 0 Norm of estimates =   5.11241161e+03
Iteration  9 No. converged = 0 Norm of estimates =   7.19327824e+03
Iteration 10 No. converged = 1 Norm of estimates =   5.77945489e+03
Iteration 11 No. converged = 2 Norm of estimates =   4.73125738e+03
Iteration 12 No. converged = 3 Norm of estimates =   5.00078500e+03

nconv =

                    4


dr =

   1.0e+04 *

    2.0383
    2.0339
    2.0265
    2.0163


di =

     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