In [1]:
import numpy as np
import numpy.linalg as lg
import scipy.linalg as sg
In [2]:
#a=np.array([[0.159758,-0.000103486,-0.0270744,0.0281025],[-0.000103484,0.159758,0.0281025,-0.0270744],[-0.0270744,0.0281025,0.293894,-8.66569e-05],[0.0281025,-0.0270744,-8.66584e-05,0.293894]])
In [3]:
a=np.array([[0.15987,0.000574572,-0.0152401,0.0399866],[0.000574574,0.15987,0.0399866,-0.0152401],[-0.0152401,0.0399866,0.293519,0.00061436],[0.0399866,-0.0152401,0.00061436,0.293519]])
In [4]:
values,vectors=lg.eig(a)
print values
(values[1]-values[0])*13.6/2.0
Out[4]:
In [5]:
print vectors
In [6]:
#V_eff
In [7]:
Veff=a[1,0]-a[2,0]*a[2,1]/(a[2,2]-0.5*(a[0,0]+a[1,1]))-a[3,0]*a[3,1]/(a[3,3]-0.5*(a[0,0]+a[1,1]))
In [8]:
print Veff*13.6
In [9]:
J=np.array([[0.15987,0.000574569,-0.0152401,0.0399866],[0.000574574,0.15987,0.0399866,-0.0152401],[-0.0152401,0.0399866,0.293519,0.00061436],[0.0399866,-0.0152401,0.00061436,0.293519]])
In [10]:
S=np.array([[0.999015,0.00295997,0.0517151,0.0528857],[0.00295997,0.999015,0.0528857,0.0517151],[0.0517151,0.0528857,0.999058,0.00293647],[0.0528857,0.0517151,0.00293647,0.999058]])
In [11]:
print J
print S
In [12]:
eigenvals=sg.eigvals(J,b=S).real
print eigenvals
In [13]:
Stilde=S-np.identity(4)
In [14]:
print Stilde
In [15]:
def lowdintrans(J,S):
values,vectors=lg.eigh(S)
print values
sqrtS=np.zeros_like(S)+np.diag(np.sqrt(1/values))
Sm1=np.dot(np.dot(vectors,sqrtS),vectors.T)
Jeff=np.dot(np.dot(Sm1,J),Sm1)
return Jeff
In [16]:
Jeff=lowdintrans(J,S)
#Jeff=J
print Jeff
In [17]:
print Jeff
Jeff=0.5*(Jeff+Jeff.T)
In [18]:
e1,vec1=lg.eig(Jeff[:2,:2])
e2,vec2=lg.eig(Jeff[2:,2:])
print e1, e2
In [19]:
T=np.zeros((4,4))
T[:2,:2]=vec1
T[2:,2:]=vec2
print T
JP=np.dot(T.T,np.dot(Jeff,T))
print JP
In [20]:
ep=np.zeros((2,2))
ep[0,0]=JP[0,0]+JP[0,3]*JP[3,0]/(JP[0,0]-JP[3,3])+JP[0,2]*JP[2,0]/(JP[0,0]-JP[2,2])
ep[1,1]=JP[1,1]+JP[1,3]*JP[3,1]/(JP[1,1]-JP[3,3])+JP[1,2]*JP[2,1]/(JP[1,1]-JP[2,2])
In [21]:
print ep
Jfinal=np.dot(vec1,np.dot(ep,vec1.T))
In [22]:
print Jfinal
In [23]:
print Jfinal[0,1]*13.6
In [24]:
e,vec=lg.eig(Jeff)
In [25]:
print e
print vec
subT=vec[:2,:2]/np.sqrt(np.sum(vec[:2,:2]**2,axis=0))
print subT
In [26]:
esub=np.diag(e[:2])
print esub
In [27]:
Jfinal2=np.dot(subT,np.dot(esub,subT.T))
print Jfinal2
In [28]:
print Jfinal2[0,1]*13.6
In [29]:
(0.138920995861-0.136391729)/0.138920995861
Out[29]:
In [30]:
q
In [ ]: