# 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)$$. 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.