# Expectation values

The fifth example discusses expectation values.

Expectation_values.Quanty
-- Using operators and wavefunctions as explained in
-- the Operators and Wavefunctions example we can do
-- simple calculations of expectation values

-- Define the basis:
-- For a p-shell we would like the have 6
-- spinorbitals, with the quantum numbers
-- spin up ml=-1,ml=0,ml=1 and
-- spin down with ml=-1, ml=0, ml=1
NF=6
NB=0
IndexDn={0,2,4}
IndexUp={1,3,5}

-- Define 6 one electron wave functions
psi0=NewWavefunction(NF,NB,{{"100000",1}})
psi0.Name = "psi(1 -1 1/2 -1/2)"
psi1=NewWavefunction(NF,NB,{{"001000",1}})
psi1.Name = "psi(1  0 1/2 -1/2)"
psi2=NewWavefunction(NF,NB,{{"000010",1}})
psi2.Name = "psi(1  1 1/2 -1/2)"
psi3=NewWavefunction(NF,NB,{{"010000",1}})
psi3.Name = "psi(1 -1 1/2  1/2)"
psi4=NewWavefunction(NF,NB,{{"000100",1}})
psi4.Name = "psi(1  0 1/2  1/2)"
psi5=NewWavefunction(NF,NB,{{"000001",1}})
psi5.Name = "psi(1  1 1/2  1/2)"

-- Define spin and angular momentum operators
OppSx   =NewOperator("Sx"   ,NF,IndexUp,IndexDn)
OppSy   =NewOperator("Sy"   ,NF,IndexUp,IndexDn)
OppSz   =NewOperator("Sz"   ,NF,IndexUp,IndexDn)
OppSsqr =NewOperator("Ssqr" ,NF,IndexUp,IndexDn)
OppSplus=NewOperator("Splus",NF,IndexUp,IndexDn)
OppSmin =NewOperator("Smin" ,NF,IndexUp,IndexDn)

OppLx   =NewOperator("Lx"   ,NF,IndexUp,IndexDn)
OppLy   =NewOperator("Ly"   ,NF,IndexUp,IndexDn)
OppLz   =NewOperator("Lz"   ,NF,IndexUp,IndexDn)
OppLsqr =NewOperator("Lsqr" ,NF,IndexUp,IndexDn)
OppLplus=NewOperator("Lplus",NF,IndexUp,IndexDn)
OppLmin =NewOperator("Lmin" ,NF,IndexUp,IndexDn)

OppJx   =NewOperator("Jx"   ,NF,IndexUp,IndexDn)
OppJy   =NewOperator("Jy"   ,NF,IndexUp,IndexDn)
OppJz   =NewOperator("Jz"   ,NF,IndexUp,IndexDn)
OppJsqr =NewOperator("Jsqr" ,NF,IndexUp,IndexDn)
OppJplus=NewOperator("Jplus",NF,IndexUp,IndexDn)
OppJmin =NewOperator("Jmin" ,NF,IndexUp,IndexDn)

Oppldots=NewOperator("ldots",NF,IndexUp,IndexDn)

-- We can look at expectation values by multiplying
-- a wavefunction with an operator with a
-- wavefunction
ExpLz = psi0 * OppLz * psi0
print("The expectation value for psi0 is given as <psi0 | Lz | psi0>=",ExpLz)
ExpSz = psi0 * OppSz * psi0
print("The expectation value for psi0 is given as <psi0 | Sz | psi0>=",ExpSz)
print("")

-- A print of the operator gives the operator in
-- second quantization. knowing a basis of
-- wavefunctions we can also look at a matrix
-- representation of the operators. To simplify
-- loops we first create a table of the functions
psiList={psi0,psi1,psi2,psi3,psi4,psi5}

-- print the Sz operator
print("The Sz operator on a basis of psi0 to psi5 looks like:")
for i = 1, 6 do
for j = 1, 6 do
io.write(string.format("%5.2f ",psiList[i] * OppSz * psiList[j]))
end
io.write("\n")
end
print("")

-- print the Lz operator
print("The Lz operator on a basis of psi0 to psi5 looks like:")
for i = 1, 6 do
for j = 1, 6 do
io.write(string.format("%5.2f ",psiList[i] * OppLz * psiList[j]))
end
io.write("\n")
end
print("")

-- the Lz and Sz operators are represented by
-- diagonal matrices. This is so while our basis
-- states are chosen (created) to be eigen states
-- of Lz and Sz. If one looks at other operators
-- this is different.
print("The spin orbit coupling operator l.s on a basis of psi0 to psi5 looks like:")
psiList={psi0,psi1,psi2,psi3,psi4,psi5}
for i = 1, 6 do
for j = 1, 6 do
io.write(string.format("%5.2f ",psiList[i] * Oppldots * psiList[j]))
end
io.write("\n");
end

-- The matrix form of the operators depends on the
-- basis states we take. For two electrons we need
-- to define 15 two particle states in the p-shell.
print("")
print("========== Two electrons in the p-shell ==========")
psi0 =NewWavefunction(NF,NB,{{"110000",1}})
psi1 =NewWavefunction(NF,NB,{{"101000",1}})
psi2 =NewWavefunction(NF,NB,{{"100100",1}})
psi3 =NewWavefunction(NF,NB,{{"100010",1}})
psi4 =NewWavefunction(NF,NB,{{"100001",1}})
psi5 =NewWavefunction(NF,NB,{{"011000",1}})
psi6 =NewWavefunction(NF,NB,{{"010100",1}})
psi7 =NewWavefunction(NF,NB,{{"010010",1}})
psi8 =NewWavefunction(NF,NB,{{"010001",1}})
psi9 =NewWavefunction(NF,NB,{{"001100",1}})
psi10=NewWavefunction(NF,NB,{{"001010",1}})
psi11=NewWavefunction(NF,NB,{{"001001",1}})
psi12=NewWavefunction(NF,NB,{{"000110",1}})
psi13=NewWavefunction(NF,NB,{{"000101",1}})
psi14=NewWavefunction(NF,NB,{{"000011",1}})

-- The operator in terms of creation and
-- annihilation operators is still the same
-- and can thus be used to calculate expectation
-- values
print("")
ExpLz = psi0 * OppLz * psi0
print("The expectation value for psi0 is given as <psi0 | Lz | psi0> =",ExpLz)
ExpSz = psi0 * OppSz * psi0
print("The expectation value for psi0 is given as <psi0 | Sz | psi0> =",ExpSz)
print("")

-- to simplify loops we first create a table of the
-- functions
psiList = {psi0, psi1, psi2, psi3, psi4, psi5, psi6, psi7, psi8, psi9, psi10, psi11, psi12, psi13, psi14}

-- print the Sz operator
print("The Sz operator on a basis of psi0 to psi14 looks like:")
for i = 1, 15 do
for j = 1, 15 do
io.write(string.format("%4.1f ",psiList[i] * OppSz * psiList[j]))
end
io.write("\n")
end
print("")

-- print the Lz operator
print("The Lz operator on a basis of psi0 to psi14 looks like:")
for i = 1, 15 do
for j = 1, 15 do
io.write(string.format("%4.1f ",psiList[i] * OppLz * psiList[j]))
end
io.write("\n")
end
print("")

-- print the Ssqr operator
print("The S^2 operator on a basis of psi0 to psi14 looks like:")
for i = 1, 15 do
for j = 1, 15 do
io.write(string.format("%4.1f ",psiList[i] * OppSsqr * psiList[j]))
end
io.write("\n")
end
print("")

The output is:

Expectation_values.out
The expectation value for psi0 is given as <psi0 | Lz | psi0>=	-1
The expectation value for psi0 is given as <psi0 | Sz | psi0>=	-0.5

The Sz operator on a basis of psi0 to psi5 looks like:
-0.50  0.00  0.00  0.00  0.00  0.00
0.00 -0.50  0.00  0.00  0.00  0.00
0.00  0.00 -0.50  0.00  0.00  0.00
0.00  0.00  0.00  0.50  0.00  0.00
0.00  0.00  0.00  0.00  0.50  0.00
0.00  0.00  0.00  0.00  0.00  0.50

The Lz operator on a basis of psi0 to psi5 looks like:
-1.00  0.00  0.00  0.00  0.00  0.00
0.00  0.00  0.00  0.00  0.00  0.00
0.00  0.00  1.00  0.00  0.00  0.00
0.00  0.00  0.00 -1.00  0.00  0.00
0.00  0.00  0.00  0.00  0.00  0.00
0.00  0.00  0.00  0.00  0.00  1.00

The spin orbit coupling operator l.s on a basis of psi0 to psi5 looks like:
0.50  0.00  0.00  0.00  0.00  0.00
0.00  0.00  0.00  0.71  0.00  0.00
0.00  0.00 -0.50  0.00  0.71  0.00
0.00  0.71  0.00 -0.50  0.00  0.00
0.00  0.00  0.71  0.00  0.00  0.00
0.00  0.00  0.00  0.00  0.00  0.50

========== Two electrons in the p-shell ==========

The expectation value for psi0 is given as <psi0 | Lz | psi0> =	-2
The expectation value for psi0 is given as <psi0 | Sz | psi0> =	0

The Sz operator on a basis of psi0 to psi14 looks like:
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 -1.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

The Lz operator on a basis of psi0 to psi14 looks like:
-2.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2.0

The S^2 operator on a basis of psi0 to psi14 looks like:
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  2.0  0.0  0.0  0.0  0.0  0.0  0.0  0.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.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  2.0  0.0  0.0  0.0  0.0  0.0  0.0  0.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.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.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  2.0  0.0  0.0  0.0  0.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.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  1.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  1.0  0.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2.0  0.0
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0