# Understanding Heisenberg, Hamiltonians and Spin Chains

1. Oct 3, 2007

### genloz

1. The problem statement, all variables and given/known data
Hi! I'm studying a computational physics course and have been ok so far but the newest problem relates to quantum mechanics (which I haven't studied) and I am struggling to understand... I would really appreciate it if someone could help me understand the physics side of things. The question relates to the energy spectrum of quantum spin chains.
The problem:
Write a program which sets up the Hamiltonian matrix for the Heisenberg model for
arbitrary chain size, N, and solve the matrix eigenvalue problem. Calculate the low
lying levels of the energy spectrum for various values of N. Compare your results for
the ground state energy density E0/N with the infinite chain result, E0/N = ?ln2+
1/4 (N ?infinity).

2. Relevant equations
The Hamiltonian of the Heisenberg model is given as:
H=$$\sum^{k=0}_{N-1}[H_{z}(k)+H_{f}(k)]$$
where
$$H_{z}(k)=S^{z}(k)S^{z}(k+1)$$
$$H_{f}(k)=1/2[S^{+}(k)S^{-}(k+1)+S^{-}(k)S^{+}(k+1)]$$
The operation of the diagonal operator, $$H_{z}(k)$$, and the flipping operator, $$H_{f}(k)$$on a
basis state gives:
$$H_{z}(k)|s^{z}(1)...s^{z}(k)s^{z}(k+1)...s^{z}(N)\right>\rangle = s^{z}(k)s^{z}(k+1)|s^{z}(1)...s^{z}(k)s^{z}(k+1)...s^{z}(N)$$
and
$$H_{f}(k)|s^{z}(1)...s^{z}(k)s^{z}(k+1)...s^{z}(N)\right>\rangle = 1/2|s^{z}(1)...-s^{z}(k)-s^{z}(k+1)...s^{z}(N) (for s^{z}(k)s^{z}(k+1)=-1)$$
or
$$=0 (for s^{z}(k)s^{z}(k+1)=+1)$$

3. The attempt at a solution
I'm completely lost. I understand what a Hamiltonian is, but no matter how much I read about the Heisenberg model I remain confused. Nothing outlines it simply and I have no idea how to set up a matrix with the equations above. Once I have the matrix I can easily program the row reduction but I really need some help to get my head around the concepts! Thankyou.
1. The problem statement, all variables and given/known data

2. Relevant equations

3. The attempt at a solution

2. Oct 3, 2007

### Avodyne

OK, let me take a stab at it. First, let's take just one spin. There are two possible basis states, "up" and "down". Let the "up" state be represented by the column vector $$\left({1\atop 0}\right)$$, and the "down" state by $$\left({0\atop 1}\right)$$. Then the operators for that spin are
$$S^z = \left({+1 \;\;\;\;\; 0 \atop \;\; 0 \;\;\; {-1}}\right), \quad S^+ = \left({0 \;\;\; 1 \atop 0 \;\;\; 0}\right), \quad S^- = \left({0 \;\;\; 0 \atop 1 \;\;\; 0}\right).$$

Now, with two spins, the basis states are up-up, up-down, down-up, and down-down. When there is a product of operators, like $$S^+(1)S^-(2)$$, where 1 refers to the first spin and 2 to the second, each operator acts on its own spin. So, $$S^+(1)S^-(2)$$ acting on down-up would convert it to up-down, and would give the null vector when acting on any other basis state.

And so on with more spins. With N spins, the hamiltonian is ultimately a 2N by 2N matrix that you have to diagonalize.

3. Oct 7, 2007

### genloz

Thanks very much but I'm still a bit confused. Do you know of any good links describing the quantum spin chain problem? Everything google comes up with seems to be academic abstracts with purchase only links to the papers...

I did find something called 'quantum wang landau' though which seemed to be an algorithm for thermodynamic spin chains but I can't find much info about that either...

Any help at all would be greatly appreciated - I would really like to understand what's happening here...

4. Oct 8, 2007

### Avodyne

5. Oct 18, 2007

### genloz

Thanks for your help. I'm still confused about where the operators came from and how they relate to the problem....

And more confusingly is that fact that you mention 'with two spins, the basis states are up-up, up-down, down-up, and down-down'. That appears to be 8 matrix elements rather than 2^2 x 2^2 which would require 16 matrix elements. I'm still very confused about how to generate these 'basis states'... all the papers I read have bra-ket notation which I can't find a good explanation about anywhere...

I was under the impression that the matrix is set up with these 'basis states', diagonalised to obtain the eigenvectors and eigenvalues. The energy spectrum would be the sum of the eigen values and I was equally dumbfounded as to where the external applied magnetic field came in...

6. Oct 19, 2007

### javierR

Physically, you want to consider the quantum mechanical problem of particles, like electrons, that have a dipole moment because they are charged and carry an intrinsic angular momentum called spin. The classical interaction of dipoles involves the angular momentum vectors in a dot product; in the case of the Heisenberg model, the contribution to the potential energy (and therefore the Hamiltonian in a static system) of two particles is
-(constant)*S1 "dot" S2,
where S1 and S2 are vectors and so have components Sx, Sy, Sz. In quantum mechanics, you turn these components into operators. The dot product of the vector operators can then be expanded as in the problem statement if you change variables Sx and Sy to S+ and S-. The operators act on quantum states as has been described; they are eigenstates of Sz operator. The potential energy of a given state is then determined by an eigenvalue equation involving the "S1 dot S2" Hamiltonian operator.

Now, if the magnitude of the spin is 1/2, then there are two eigenstates with respect to Sz (two directions it can point along our "preferred" z-axis): +1/2 and -1/2. As described in one of the responses above, these eigenstates can be written as 2-component column vectors. Then the operators Sz S+ S- must act as 2X2 matrices, as also written. If you want to consider 2 particles, the states must be expanded to 4-component column vectors acted on by 4X4 matrices (the operators)...that is, a tensor product of the single particle state space with tensor product of operators acting. The operator
Sz(1) X Sz(2) is constructed as a 4x4 matrix as
1 0 | 0 0
0 -1 | 0 0
-----------
0 0 | -1 0
0 0 | 0 1

The top left box of the matrix is "an Sz matrix multiplied by the top left element of another Sz matrix", the top right box is "an Sz matrix mutiplied by the top right element of another Sz matrix", and so on. Then the eigenstates of this matrix are (check)
(1000) for a |++> state, with eigenvalue being the product of spin values (+1)(+1)=+1
(0100) for a |-+> state, with eigenvalue (-1)(+1)= -1
(0010) for a |+-> state, etc
(0001) for a |--> state, etc

For N particles, the above matrix will have a diagonal that alternaties with
+1 0
0 -1
and
-1 0
0 +1
and you can figure out the pattern for the N-component eigenstates.

To form the tensor product operator
S+(1) X S-(2), use the previously mentioned recipe to get
0 0 | 0 0
0 0 | 0 0
---------
0 1 | 0 0
0 0 | 0 0

Check that on a |-+> state (above), this matrix turns it into a (+-) state, and on all other states it gives zero. This is because the operator is supposed to raise the first particle's spin value, which it can only do if that is s1=-1/2; and it lowers the second particle's spin value, which it can only do if that is s2=+1/2.

You should be able to form the S-(1)XS+(2) matrix and verify that it takes the |+-> state to |-+>.

The full Hamiltonian is then the sum of matrices SzXSz, etc., which is not diagonal so that the states we've written are not eigenstates of the Hamiltonian. As you know by now, you have to diagonalize the matrix to get the eigenvalues and eigenstates to get the energy spectrum.

7. Oct 21, 2007

### genloz

are the first couple of matrices for N=1,2,3 etc published anywhere so I can check what I'm doing?
Thanks for the detailed explanation btw!

8. Oct 22, 2007

### genloz

I'm sorry I know I'm dumb but I still don't quite understand. Is there an algorithm for setting up the matrix anyone could point me to? Thanks!

9. Nov 1, 2007

### genloz

Okay, I found the following pieces of code but I don't know anything about fortran so I was wondering if someone could please explain them to me?

This is for setting up the basis states:
subroutine makebasis(nup)
sigma(:)=0
nstates=0
do a=0,2**n-1
nu0
do i=1,n
nu=nu+sigma(i)
end do
if(nu==nup) then
nstates=nstates+1
state(nstates)=a
end if
k=1
1 sigma(k)=sigma(k)+1
if (sigma(k)>1.and.k<n) then
sigma(k)=0
k=k+1
goto 1
end if
end do

And this is for construction of the hamiltonian (But I'm particularly confused about where the bonds and bondspin came from??):
subroutine hamiltonian
do a=1,nstates
call makestate(state(a),sigma,n)
do bond=1,nb
s1=bondspins(1,bond)
s2=bondspins(2,bond)
ss1=sigma(s1)
ss2=sigma(s2)
ham(a,a)=ham(a,a)+jz(bond)*(ss1-0.5d0)*(ss2-0.5d0)
if (ss1/=ss2) then
sigma(s1)=1-ss1
sigma(s2)=1-ss2
call findstate(statecode(sgima,n),b)
ham(a,b)=ham(a,b)+jxy(bond)/2.d0
sigma(s1)=ss1
sigma(s2)=ss2
end if
end do
end do