Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. from math import sqrt
  2. from math import pi
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import scipy.integrate as integrate
  6.  
  7. def sn_sq(vn,vf):
  8. # sn und vn beginne bei v1 und s1
  9. return 1/2*((vn/(2*pi*vf)+1)/np.sqrt((vn/(2*pi*vf)+1)**2-(vn/(2*pi*vf))**2)-1)
  10.  
  11. def calc_cm(vn,vf):
  12. """
  13. cms beginnen bei c0 und gehen so weit wie möglich hoch.
  14. """
  15. sn_sq_arr = sn_sq(vn,vf)
  16. cms = np.array([1,])
  17. for m in range(1,len(sn_sq_arr)+1):
  18. cms = np.append(cms,np.sum(cms[::-1]*sn_sq_arr[:m])/m)
  19. return cms
  20.  
  21. def calc_al(vn,vf):
  22. """
  23. als beginnen bei 0 und gehen positiv soweit wie möglich hoch
  24. In der Summe muss mindestens 10 cms vorkommen
  25. """
  26. cms = calc_cm(vn,vf)
  27. sns = sn_sq(vn,vf)
  28. factor = np.exp(-2*np.sum(sns/(np.arange(len(sns))+1)))
  29. als = [np.sum(cms[:]*cms[:]),]
  30. cmin = 10
  31. # Hiernochmal richtig cms betrachten.
  32. for l in range(1,len(cms)-cmin):
  33. als.append(np.sum(cms[:-l]*cms[l:]))
  34. return np.array(als)*factor
  35.  
  36. def calc_bl(vn,vf,ls):
  37. # l ist relativ zur fermi nf als state n_(nf+l)
  38. # Schnellermachen indem wir die summe vorher berechnen und dann subtrahieren.
  39. als = calc_al(vn,vf)
  40. ns = []
  41. for l in ls:
  42. n = 0
  43. for i in range(len(als)-l):
  44. n += als[abs(l+i)]
  45. ns.append(n)
  46. return np.array(ns)
  47.  
  48. def vn_rechteck(v0,vf,nc,length):
  49. print("anomalous dimension: ",2*sn_sq(v0,vf))
  50. return np.append(np.ones(nc)*v0,np.zeros(length-nc))
  51.  
  52. def vn_noninteract(length):
  53. return np.zeros(length)
  54.  
  55. def vn_exp(v0,vf,nc,length):
  56. print("anomalous dimension: ",2*sn_sq(v0,vf))
  57. return np.exp(-np.arange(length)/nc)*v0
  58.  
  59. def thermodynlim(u,l,alpha):
  60. return -np.sin(l*u)/u/(2*pi)*(4/(4+u**2))**(alpha/2)
  61.  
  62. def integrate50(a, b, N,l,alpha):
  63. x = b-np.linspace(a, b, N,endpoint=False)
  64. fx = thermodynlim(x,l,alpha)
  65. area = np.sum(fx)*(b-a)/N
  66. return area
  67.  
  68. #/(1-np.exp(1j*u))/(2*pi)
  69. if __name__ == "__main__":
  70.  
  71. plot_range = 4
  72.  
  73. nc = 1000
  74. length = 10000
  75. vf = 1
  76. m = plot_range*nc
  77.  
  78. vn = vn_noninteract(length)
  79. vn2 = vn_rechteck(10,vf,nc,length)
  80. vn3 = vn_rechteck(80,vf,nc,length)
  81.  
  82. U = set(np.arange(-m,m+1)[::nc//4]) | set(np.arange(-m+nc,m-nc+1)[::nc//8]) | set(np.arange(-m+2*nc,m-2*nc+1)[::nc//32]) | set(np.arange(-m+3*nc,m-3*nc+1)[::nc//32]) | set(np.arange(-nc//8,nc//8))
  83. x = np.array(sorted(U))
  84. y = calc_bl(vn,vf,x)
  85. y2 = calc_bl(vn2,vf,x)
  86. y3 = calc_bl(vn3,vf,x)
  87.  
  88. #y4 = np.array([2*integrate50(0, 1000, 100001,l,alpha) for l in x/nc])
  89.  
  90. plt.figure()
  91. plt.plot(x/nc,y)
  92. plt.plot(x/nc,y2)
  93. plt.plot(x/nc,y3)
  94.  
  95. plt.xlabel("$\\frac{k-k_f}{k_c}$",size=15)
  96. plt.ylabel("$<n_k>$",size=15)
  97. plt.grid(linestyle='--',linewidth=0.3)
  98. plt.tick_params(axis='x', labelsize=15)
  99. plt.tick_params(axis='y', labelsize=15)
  100. plt.tight_layout()
  101. plt.minorticks_on()
  102. plt.tick_params(axis='both',which='minor',length=3,width=1)
  103. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement