- •1 Introduction
- •1.1 What makes eigenvalues interesting?
- •1.2 Example 1: The vibrating string
- •1.2.1 Problem setting
- •1.2.2 The method of separation of variables
- •1.3.3 Global functions
- •1.3.4 A numerical comparison
- •1.4 Example 2: The heat equation
- •1.5 Example 3: The wave equation
- •1.6 The 2D Laplace eigenvalue problem
- •1.6.3 A numerical example
- •1.7 Cavity resonances in particle accelerators
- •1.8 Spectral clustering
- •1.8.1 The graph Laplacian
- •1.8.2 Spectral clustering
- •1.8.3 Normalized graph Laplacians
- •1.9 Other sources of eigenvalue problems
- •Bibliography
- •2 Basics
- •2.1 Notation
- •2.2 Statement of the problem
- •2.3 Similarity transformations
- •2.4 Schur decomposition
- •2.5 The real Schur decomposition
- •2.6 Normal matrices
- •2.7 Hermitian matrices
- •2.8 Cholesky factorization
- •2.9 The singular value decomposition (SVD)
- •2.10 Projections
- •2.11 Angles between vectors and subspaces
- •Bibliography
- •3 The QR Algorithm
- •3.1 The basic QR algorithm
- •3.1.1 Numerical experiments
- •3.2 The Hessenberg QR algorithm
- •3.2.1 A numerical experiment
- •3.2.2 Complexity
- •3.3 The Householder reduction to Hessenberg form
- •3.3.2 Reduction to Hessenberg form
- •3.4 Improving the convergence of the QR algorithm
- •3.4.1 A numerical example
- •3.4.2 QR algorithm with shifts
- •3.4.3 A numerical example
- •3.5 The double shift QR algorithm
- •3.5.1 A numerical example
- •3.5.2 The complexity
- •3.6 The symmetric tridiagonal QR algorithm
- •3.6.1 Reduction to tridiagonal form
- •3.6.2 The tridiagonal QR algorithm
- •3.7 Research
- •3.8 Summary
- •Bibliography
- •4.1 The divide and conquer idea
- •4.2 Partitioning the tridiagonal matrix
- •4.3 Solving the small systems
- •4.4 Deflation
- •4.4.1 Numerical examples
- •4.6 Solving the secular equation
- •4.7 A first algorithm
- •4.7.1 A numerical example
- •4.8 The algorithm of Gu and Eisenstat
- •4.8.1 A numerical example [continued]
- •Bibliography
- •5 LAPACK and the BLAS
- •5.1 LAPACK
- •5.2 BLAS
- •5.2.1 Typical performance numbers for the BLAS
- •5.3 Blocking
- •5.4 LAPACK solvers for the symmetric eigenproblems
- •5.6 An example of a LAPACK routines
- •Bibliography
- •6 Vector iteration (power method)
- •6.1 Simple vector iteration
- •6.2 Convergence analysis
- •6.3 A numerical example
- •6.4 The symmetric case
- •6.5 Inverse vector iteration
- •6.6 The generalized eigenvalue problem
- •6.7 Computing higher eigenvalues
- •6.8 Rayleigh quotient iteration
- •6.8.1 A numerical example
- •Bibliography
- •7 Simultaneous vector or subspace iterations
- •7.1 Basic subspace iteration
- •7.2 Convergence of basic subspace iteration
- •7.3 Accelerating subspace iteration
- •7.4 Relation between subspace iteration and QR algorithm
- •7.5 Addendum
- •Bibliography
- •8 Krylov subspaces
- •8.1 Introduction
- •8.3 Polynomial representation of Krylov subspaces
- •8.4 Error bounds of Saad
- •Bibliography
- •9 Arnoldi and Lanczos algorithms
- •9.2 Arnoldi algorithm with explicit restarts
- •9.3 The Lanczos basis
- •9.4 The Lanczos process as an iterative method
- •9.5 An error analysis of the unmodified Lanczos algorithm
- •9.6 Partial reorthogonalization
- •9.7 Block Lanczos
- •9.8 External selective reorthogonalization
- •Bibliography
- •10 Restarting Arnoldi and Lanczos algorithms
- •10.2 Implicit restart
- •10.3 Convergence criterion
- •10.4 The generalized eigenvalue problem
- •10.5 A numerical example
- •10.6 Another numerical example
- •10.7 The Lanczos algorithm with thick restarts
- •10.8 Krylov–Schur algorithm
- •10.9 The rational Krylov space method
- •Bibliography
- •11 The Jacobi-Davidson Method
- •11.1 The Davidson algorithm
- •11.2 The Jacobi orthogonal component correction
- •11.2.1 Restarts
- •11.2.2 The computation of several eigenvalues
- •11.2.3 Spectral shifts
- •11.3 The generalized Hermitian eigenvalue problem
- •11.4 A numerical example
- •11.6 Harmonic Ritz values and vectors
- •11.7 Refined Ritz vectors
- •11.8 The generalized Schur decomposition
- •11.9.1 Restart
- •11.9.3 Algorithm
- •Bibliography
- •12 Rayleigh quotient and trace minimization
- •12.1 Introduction
- •12.2 The method of steepest descent
- •12.3 The conjugate gradient algorithm
- •12.4 Locally optimal PCG (LOPCG)
- •12.5 The block Rayleigh quotient minimization algorithm (BRQMIN)
- •12.7 A numerical example
- •12.8 Trace minimization
- •Bibliography
188 CHAPTER 10. RESTARTING ARNOLDI AND LANCZOS ALGORITHMS
0.025 |
|
|
|
|
|
|
|
|
|
|
0.02 |
|
|
|
|
|
|
|
|
|
|
0.015 |
|
|
|
|
|
|
|
|
|
|
0.01 |
|
|
|
|
|
|
|
|
|
|
0.005 |
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
−0.005 |
|
|
|
|
|
|
|
|
|
|
−0.01 |
|
|
|
|
|
|
|
|
|
|
−0.015 |
|
|
|
|
|
|
|
|
|
|
−0.02 |
|
|
|
|
|
|
|
|
|
|
−0.025 |
−0.02 |
−0.015 |
−0.01 |
−0.005 |
0 |
0.005 |
0.01 |
0.015 |
0.02 |
0.025 |
−0.025 |
Figure 10.4: Smallest eigenvalues of the matrix west0479
>> 1./dsm
ans =
1.0e+03 *
5.8308 -3.4455
-0.0136 + 0.1752i -0.0136 - 0.1752i 0.0116 + 0.0573i 0.0116 - 0.0573i
-0.0473 0.0444
The computed eigenvalues are depicted in Fig. 10.4
10.6Another numerical example
We revisit the determination the acoustic eigenfrequencies and modes in the interior of a car, see section 1.6.3. The computations are done with the finest grid depicted in Fig. 1.9. We first compute the lowest ten eigenpairs with simultaneous inverse vector iteration (sivit). The dimension of the search space is 15.
>>[p,e,t]=initmesh(’auto’);
>>[p,e,t]=refinemesh(’auto’,p,e,t);
>>[p,e,t]=refinemesh(’auto’,p,e,t);
>>p=jigglemesh(p,e,t);
>>[A,M]=assema(p,t,1,1,0);
>>whos
Name |
Size |
Bytes Class |
10.6. ANOTHER NUMERICAL EXAMPLE |
189 |
||
A |
1095x1095 |
91540 |
double array (sparse) |
M |
1095x1095 |
91780 |
double array (sparse) |
e |
7x188 |
10528 |
double array |
p |
2x1095 |
17520 |
double array |
t |
4x2000 |
64000 |
double array |
Grand total is 26052 elements using 275368 bytes
>>sigma=-.01;
>>p=10; tol=1e-6; X0=rand(size(A,1),15);
>>[V,L] = sivit(A,M,p,X0,sigma,tol);
||Res(0)|| = 0.998973 ||Res(5)|| = 0.603809 ||Res(10)|| = 0.0171238 ||Res(15)|| = 0.00156298 ||Res(20)|| = 3.69725e-05 ||Res(25)|| = 7.11911e-07
>> % 25 x 15 = 375 matrix - vektor - multiplications until convergence
>>
>> format long, L
L =
0.00000000000000
0.01269007628847
0.04438457596824
0.05663501055565
0.11663116522140
0.13759210393200
0.14273438015546
0.20097619880776
0.27263682280769
0.29266080747831
>>format short
>>norm(V’*M*V - eye(10))
ans =
1.8382e-15
Then we use MATLAB’s solver eigs. We set the tolerance and the shift to be the same as with sivit. Notice that ARPACK applies a shift-and-invert spectral transformation if a shift is given.
>>options.tol=tol; options.issym=1;
>>[v,l,flag]=eigs(A,M,p,sigma,options);
Iteration 1: a few Ritz values of the 20-by-20 matrix: 0 0 0 0 0 0 0
190 CHAPTER 10. RESTARTING ARNOLDI AND LANCZOS ALGORITHMS
0
0
0
Iteration 2: a few Ritz values of the 20-by-20 matrix: 3.3039 3.5381 4.7399 6.5473 6.7754 7.8970 15.0071 18.3876 44.0721 100.0000
Iteration 3: a few Ritz values of the 20-by-20 matrix: 3.3040 3.5381 4.7399 6.5473 6.7754 7.8970 15.0071 18.3876 44.0721 100.0000
>>flag flag = 0
>>l=diag(l); l=l(end:-1:1); norm(l-L) ans =
3.7671e-14
>>norm(v’*M*v - eye(10))
ans = 8.0575e-15
Clearly the eigenvectors are mutually m-orthogonal. Notice that eigs returns the eigenvalues sorted from large to small such that they have to be reordered before comparing with those sivit computed.
In the next step we compute the largest eigenvalues of the matrix
(10.14) |
S = R(A |
− |
σM)−1RT , |
|
where RT R = M is the Cholesky factorization of M. The matrix in (10.14) is transferred to eigs as a function.
>> type afun
10.6. ANOTHER NUMERICAL EXAMPLE |
191 |
function x = afun(x) global RA RB
x = RB*(RA\(RA’\(RB’*x)));
>>global RA RB
>>RA = chol(A-sigma*M);
>>RB = chol(M);
>>[v,l1,flag]=eigs(’afun’,n,10,’lm’,options); Iteration 1: a few Ritz values of the 20-by-20 matrix:
0
0
0
0
0
0
0
0
0
0
Iteration 2: a few Ritz values of the 20-by-20 matrix: 3.3030 3.5380 4.7399 6.5473 6.7754 7.8970 15.0071 18.3876 44.0721 100.0000
Iteration 3: a few Ritz values of the 20-by-20 matrix: 3.3040 3.5381 4.7399 6.5473 6.7754 7.8970 15.0071 18.3876 44.0721 100.0000
>>flag flag = 0
>>l1 = diag(l1)
l1 =
