spEigv¶
Purpose¶
Computes a specified number of eigenvalues and eigenvectors of a square, sparse matrix a.
Format¶
-
{ va, ve } =
spEigv
(a, nev, which, tol, maxit, ncv)¶ - Parameters:
a (sparse matrix) – NxN square, sparse matrix.
nev (scalar) – number of eigenvalues to compute.
which (string) – may be one of the following:
"LM"
largest magnitude,"LR"
largest real,"LI"
largest imaginary,"SR"
smallest real, or “SI” smallest imaginary. Default input 0, sets which to"LM"
.tol (scalar) – tolerance for eigenvalues. Default input 0, sets tol to 1e-15.
maxit (scalar) – maximum number of iterations. Default input 0, sets maxit to \(nev * (\text{columns of a}) * 100\).
ncv (scalar) – size of Arnoldi factorization. The minimum setting is the greater of \(nev+2\) and 20. See Remarks on how to set ncv. Default input 0, sets ncv to \(2 * (nev+1)\).
- Returns:
va (nevx1 dense vector) – containing the computed eigenvalues of input matrix a.
ve (Nxnev dense matrix) – containing the corresponding eigenvectors of input matrix a.
Examples¶
// Set random seed
rndseed 3456;
// Declare sparse matrix a
sparse matrix a;
// Create random matrix x
x = 10*rndn(5, 5);
// Convert x to dense matrix
a = densetosp(x, 4);
21.276135 5.4078872 -19.817044 9.6771132 -19.211952
0.0000000 -4.4011007 10.445221 -5.1742289 -16.336474
a = 0.0000000 -20.853017 7.6285434 0.0000000 -15.626397
-12.637055 8.1227002 0.0000000 -8.7817892 0.0000000
0.0000000 -7.8181517 15.326816 0.0000000 0.0000000
/*
** This call is equivalent to calling
** { va, ve } = spEigv(a, 2,"LM", 1e-15, 2*5*100, 5);
*/
{ va, ve } = spEigv(a, 2, 0, 0, 0, 0);
va = 21.089832
-3.4769986 + 20.141970i
ve = -0.92097057 0.29490584 - 0.38519280i
-0.10091920 -0.18070330 - 0.38405816i
0.061241324 0.24121182 - 0.56419722i
0.36217049 0.017643612 + 0.26254313i
0.081917964 -0.31466284 - 0.19936942i
Below we show that the first eigenvalue times the corresponding eigenvector (1) equals the input matrix times the first eigenvector (2).
(1) va[1]*ve[.,1] = (2) a*ve[.,1] =
-19.423115 -19.423115
-2.1283690 -2.1283690
1.2915693 1.2915693
7.6381149 7.6381149
1.7276361 1.7276361
Remarks¶
The ideal setting for input ncv is problem dependent and cannot be
easily predicted ahead of time. Increasing ncv will increase the amount
of memory used during computation. For a large, sparse matrix, ncv
should be small compared to the order of input matrix a. spEigv()
is not
thread-safe.
Technical Notes¶
spEigv()
implements functions from the ARPACK library.