Matrix Calculation The Heisenberg Model
Matrix Calculation The Heisenberg Model
1 H = 2 S j S j+1 = 2 j=1
j=1
j j+1
Notice that the spin states as we dened are a complete set of states (a basis) but are not eigenstates of H . So H is not diagonal on this basis.
Each row and column of H is labelled by a pattern of spins (spins state) and an element of H can be seen as linking 2 patterns. The diagonal elements of the matrix are computed as + 1 2 for each or , and 1 2 for every or . The only non-zero entries off the diagonal correspond to patterns that can be generated by changing into or into . In this case, the off-diagonal entry is then 1.
Example: conguration
( 1) Entry 2 + 6 2 = 2 on the diagonal of the matrix
1 2
Example: conguration
( 1) Entry 2 + 6 2 = 2 on the diagonal of the matrix
1 2
The matrix form of the Hamiltonian of the quantum y z x Heisenberg model of spins S j = (S j , S j , S j ) on a one-dimensional lattice of N = 4 sites with periodic boundary conditions SN +1 = S1 is given by
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 -2 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 -2 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
Matrix size 2N 2N .
Matrix size 2N 2N .
Physical systems have large values of N so we need N . For one-dimensional chains we can get N large enough to extrapolate to
N=
For two or three-dimensional lattices of spins and the size of the lattice is then N 1/2 N 1/2 or N 1/3 N 1/3 N 1/3 It is impossible to get N large enough to approximate real systems.
Matrix size 2N 2N .
Physical systems have large values of N so we need N . For one-dimensional chains we can get N large enough to extrapolate to
N=
For two or three-dimensional lattices of spins and the size of the lattice is then N 1/2 N 1/2 or N 1/3 N 1/3 N 1/3 It is impossible to get N large enough to approximate real systems. This is a simple problem whose accurate solution is beyond current computers. Using symmetry and hard work will get N 24 For larger matrices Monte Carlo is the only possibility.
Aun = n un .
The general methods are beyond this course and you would normally use a library program which converts the matrix into a tridiagonal one with the same eigenvalues. A tridiagonal matrix has all elements zero except on the diagonal and one stripe on either side. This step requires all the matrix in memory at once, so limits the maximum size of matrix.
x(k+1) =
1 Ax(k) , Lk
This algorithm involves operating with the matrix A on a vector. Only the vectors x(k+1) and x(k) need be in memory (A can be on disk). In the important applications most of the elements of the matrix are zero and do not appear in the calculation. Multiplication by A need not be evaluated as a matrix operation provided we have an algorithm for getting Ax from x. The limit on the matrix size is the memory to hold the two vectors. Beyond this Monte Carlo methods are possible!
Eigenvectors are orthogonal. Find the ground state eigenvector u0 . Repeat the iteration including an extra step to force v to be orthogonal to u0 . If u0 is a unit vector then v (u0 v)u0 is orthogonal to u0 . (A piece
of code is included in the program to do this.) Extrapolate as before.
# Main Program N=10 M=2**N pair=array([3<<i for i in range(0,20)], int) ; pair[N-1]=(M/2)+1 ## << left shift operator: add a trailing 0 in binary rapresentation # Compute eigenvalues using full matrix in memory H=zeros((M,M), float) u=zeros(M, float) for j in range(0,M): # Construct full matrix v=zeros(M, float) v[j]=1.0 matrix(u, v) H[:,j]=u[:] (H, val)=mateig(H) #compute eigenvalues print val/N
# Iterative method for ground state using 2 vectors only in memory u=zeros(M, float) v=array([uniform(1) for i in range(0,M)], float) normalise(v) E=1e10 lastE=0 while abs(E-lastE) > 1e-5*abs(E): lastE=E matrix(u, v) E=normalise(u) v[:]=u[:] # copy array u to v print E/N
Main Points
How nite difference approximate rst and second derivatives. The merits of nite difference solutions compared with theoretical
ones.
Lots of physics problems translate into linear equations. Some techniques for handling linear equations on computers. Simple physics problems can easily be beyond current average
computers.
Finding eigenvalues of very big matrices. Extrapolation to innite systems from nite ones.