Linear Algebra and a Band Structure Calculation

advertisement
Matrix Computing
This practical introduces the following:



LU decomposition for the solution of a set of linear equations
Comparison of 32 bit, 64 bit and 80 bit calculations of the Hilbert matrix
Solution of eigenvalue problems using the method of Jacobi rotation
Introduction
Many problems in computational physics can be reduced to linear algebra problems.
In this laboratory you will use several fundamental techniques of computational linear
algebra to solve physics problems common in many different areas of science. In
order to solve the problem with some variations you will need to solve a system of
linear equations by Gauss-Jordan Elimination, ‘LU decomposition plus back
substitution’, matrix inversion and matrix diagonalisation.
Solving a set of linear equations
A common problem in physics is the task of solving a set of linear equations
a11 x1 + a12 x2 + a13 x3 + a14 x4 + a15 x5 = b1
a21 x1 + a22 x2 + a23 x3 + a24 x4 + a25 x5 = b2
a31 x1 + a32 x2 + a33 x3 + a34 x4 + a35 x5 = b3
a41 x1 + a42 x2 + a43 x3 + a44 x4 + a45 x5 = b4
a51 x1 + a52 x2 + a53 x3 + a54 x4 + a55 x5 = b5
In matrix form this becomes A . x = b with A, b and x given by
a11
a21
a31
a41
a51
a12
a22
a32
a42
a52
a13 a14 a15
a23 a24 a25
a33 a34 a35
a43 a44 a45
a53 a54 a55
b1
b2
b3
b4
b5
x1
x1
x1
x1
x1
The standard method for solving for the vector x is Gaussian elimination. A
particularly useful formulation in terms of numerical treatment is called LU
decomposition. Here the matrix A is written as the product of a lower triangular
matrix L and an upper triangular matrix U, A = L . U. Note that the vector b does not
enter here. This means that once the decomposition has been performed, it can be
applied to solve A . x = b for any value of b. The determinant of A is simply given by
the product of the diagonal elements of L. For a detailed discussion of both Gaussian
Elimination and LU decomposition see DeVries pp 119-131 and your lecture notes
from course 342, Numerical Methods. The function lu_solver.c (Appendix A) takes
as input the matrix A and the vector b (and specification of the array sizes). It returns
the solution x and the determinant. In the course of the decomposition A is
overwritten by L and U (note that the rows become interchanged).
Exercise 1
Solution of Linear Equations by LU Decomposition
Write a programme that solves the equation A . x = b for
 3 1 1


A   3 2 1
 1 1 1


 2
 
b   3
1
 
(1)
using LU decomposition and solve the problem yourself on paper. Compare results of
each method of solution. The main() function (here called lin_eq.c) contains the
value of the matrix elements and the vector b. It should call the external function
lu_solver.c. Thus use as header:
#include "lu_solver.h"
#include <math.h>
extern void lu_solve(double a[][],double x[],double b[], double det, int ndim, int n);
Exercise 2
Hilbert Matrices
The nxn Hilbert matrix is the square matrix with elements
H ij 
1
i  j -1
(2)
For example, the 3x3 Hilbert matrix is
 1 1/ 2 1/ 3 


H  1 / 2 1 / 3 1 / 4 
1/ 3 1/ 4 1/ 5 


(3)
The Hilbert matrix has the property that its determinant decreases rapidly with
increasing matrix dimension. Using your LU decomposition program, solve the
equation H . x = b with bi = i, e.g. for the 3x3 matrix b = (1,2,3) and compute the
determinant of H. The numerical accuracy of your program may be checked by
setting
n
bi   H ij
(4)
j 1
which has the solution x = (1,1,1). Up to what values of n do your computations
agree with this? How does it change when you define the Hilbert matrix as a) float b)
double c) long double. Using long double compute the determinant as a function of
n (for a reasonable range of n) and plot the data. The format statements in the fprintf
command should be %f, %lf and %Lf, respectively.
Eigenvalue problems
The eigenvalue problem is defined by the equation
A . xn  λ n xn
(5)
where A is a matrix of constants and xn and n are the nth eigenvector and eigenvalue
solutions of the problem. In all, if A is an NXN matrix, there are N eigenvectors and
eigenvalues. The problem may be solved by computing the following determinant
det A - I  0
(6)
where I is the unit matrix of the same dimension as A. Evaluation of this determinant
for an NxN matrix A results in an Nth order polynomial in . This is called the
characteristic equation or secular equation for the matrix A. Its N roots give the
eigenvalues of A, n. Obviously this is challenging for n > 2, so one generally adopts
a numerical solution for larger matrices. A square matrix A can be diagonalised by a
unitary transformation (see lecture notes from course Numerical Simulations of
Physical Systems MA 342 or Linear Algebra and its Applications, G. Strang S-LEN
512.5 L6*2).
A' = S-1 . A . S
(7)
The transformation matrix S turns A into a diagonal matrix A'. Once the
transformation matrix S has been found, the eigenvectors of A are contained in the
columns of the transformation matrix on the right in Eq. 7 and in the rows of its
inverse in Eq. 7, S-1. The eigenvalues A are the diagonal elements of A' and the
eigenvalue in the nth diagonal element corresponds to the eigenvector in the nth
column of S. Numerical diagonalisation is achieved by bringing the matrix A
gradually towards diagonal form using a sequence of similarity transformations. For
symmetric matrices a sequence of orthogonal similarity transformations is used. One
such procedure is called Jacobi transformation. The routine jacobi_trans.c performs
just such a transformation. Its input is the matrix A, the outputs are the eigenvalues in
array e[i] and the eigenvectors in matrix v[i][j]. Note that typedef statements have
been used for declaration of scalars, matrices and vectors. (For further details, see
your course JS 3065 Computational Methods).
Exercise 3
3x3 Matrix Diagonalisation
Write a programme which calls jacobi and solves the eigenvalue problem for
2
 2 1


A    1 2  2
 2 2
5 

Calculate the eigenvalues and eigenvectors of this matrix by hand and compare your
numerical results with your analytical result.
Exercise 4
Nearly Free Electron Energy Band Structure
The question of what determines whether a material is an electrical conductor,
insulator or semi-conductor is of great importance in solid state physics. The free
electron model, where electrons are treated as an ideal Fermi gas, gives good insight
into heat capacity and thermal conductivity but fails to explain the electrical
conductivity of solids. It is found that the crystal structure is most important in this
problem as Bragg reflections of electron waves within the crystal lead to the
formation of energy band gaps, which in turn determine the electrical conductivity of
the solid. The Schrödinger equation for electrons in a ‘1-D crystal’ is
1
  2ψ k (x)  V(x)ψ k (x)  ε k ψ k (x)
2
(8)
ψk (x) is the eigenfunction for wavenumber k, ε k are the allowed energies and V(x) is
a periodic potential energy. A plot of ε k versus k is called the band structure. Since
the potential energy operator and the eigenfunctions both contain periodic functions
they can be expanded in Fourier series. We will use the complex form of Fourier
series to expand the periodic function f(x) = f(x+na) (a = period, n is 0, 1, 2, ..)
f(x) 

 cn exp[ i 2x/a]
n  
(9)
In the nearly free electron problem we choose to limit the expansion for the potential
and wavefunction such that only coefficients with –2  n  2 are nonzero. Solutions
to the Schrödinger equation using such a limited expansion for the wave function are
quite accurate provided the magnitudes of the potential energy Fourier components in
the problem are much less than the kinetic energies of the electrons. The expansions
for the potential energy and wave functions are
V(x) 
2
 vn exp[ i 2x/a]  v0  2v1 cos(2x/a)  2v2 cos(x/a)
n  2
 k (x) 
2

n  2
c n exp[
i 2x
 ikx]
a
(10a)
(10b)
The right hand equality in Eq. 10a is valid provided v1 = v-1 and v2 = v-2. We also
choose v0 = 0. The factor exp[ikx] multiplying each term in Eq. 10b is necessary to
make k a Bloch eigenfunction. (See lecture notes from course JS 3014 Thermal and
Electronic Properties). When the potential and eigenfunction are substituted into Eq.
8, the resulting set of linear equations is
1
2
 (k  G  2 )  ε k
2

v-1


v-2



0


0


v1
v2
0
1
(k  G 1 ) 2  ε k
2
v1
v2
v-1
1 2
k  εk
2
v1
v-2
v-1
1
(k  G1) 2  ε k
2
0
v-2
v-1



 c 2 
0
 c 
 -1 
v2
 c0   0
 c 
 1 
v1
 c2 

1
(k  G 2 ) 2  ε k 
2

0
Inspection of the matrix equation above shows that its diagonal elements depend on
wave number k. An energy band calculation using these equations consists of
repeated construction of the matrix and computation of its eigenvalues. The notation
Gn in the equations above means 2n/a. In 1-D the reciprocal lattice consists of
points given by k = Gn with n integer. The equations are given in atomic units in
which h bar = e = me = 1. It will be helpful if you choose units for wavenumbers to
be in units of /a so that k = ±1 correspond to the Brillouin zone boundaries for the
problem and Gn =2n.
Exercise 4
Write a programme which contains a function which constructs the 5x5 matrix above
as a function of k. The programme should also call the diagonalisation routine to
obtain the eigenvalues of the matrix.
Use your programme to obtain the bandstructure of a solid where all of the Fourier
components of the potential are weak (v-2 = v-1 = v1 = v2 = 0.1) and for a solid
where some of the Fourier components of the potential are strong (v-2 = 0.3 v-1 = 0.7
v1 = v2 = 0.1). Compare the band gaps calculated in your programme at the
Brillouin zone centre and at its edges with the result from perturbation theory that the
nth band gap is twice the nth Fourier component of the periodic potential, e.g. the first
gap at k = 1 (in units of /a) is equal to 2 v1.
Download