【固体物理】体心立方A6A12常数计算
记录一下固体物理课程写的作业。
关于体心立方A6与A12的简单计算。
写了几个函数,构造点阵,计算距离排序,记录近邻的距离以及个数,单位换算累加求和。
最后画了两个图(A6/A12的值随近邻数的变化曲线)代码已注释
简单立方也可以使用同样的逻辑。
import numpy,math
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# 整体以(0,0,0)点为中心考察
#构造体心立方点阵
def BCC(stage):point = []n = stage -1#体心点for i in range(-n,n+1):for j in range(-n,n+1):for k in range(-n,n+1):point.append((i,j,k))passpasspasspass#非体心点for i in numpy.arange(-n-0.5,n+1.5,1):for j in numpy.arange(-n-0.5,n+1.5,1):for k in numpy.arange(-n-0.5,n+1.5,1):point.append((i,j,k))passpasspasspasspoint.remove((0,0,0))return point# 距离储存 获得r和对应的个数,按照r的大小从小到大排列[(r1,num1),(r2,num2)...]
def dis_numstore(point):dis_and_number = []dis = []for i in point:distance = math.sqrt(i[0] * i[0] + i[1] * i[1] + i[2] * i[2])# 需要进行一个单位的换算,以及距离储存dis.append(distance * 2 * math.sqrt(3) / 3)passnon_repeat_dis = list(set(dis))non_repeat_dis.sort()for i in non_repeat_dis:dis_and_number.append((i, dis.count(i)))passreturn dis_and_number# 计算A6的函数
def A6computing(precision,dis_and_number):A6 = 0for i in range(1,precision+1):r = dis_and_number[i-1][0]number = dis_and_number[i-1][1]A6 = A6 + 1/(r**6)*numberpassreturn A6# 计算A12的函数
def A12computing(precision,dis_and_number):A12 = 0for i in range(1,precision+1):r = dis_and_number[i-1][0]number = dis_and_number[i-1][1]A12 = A12 + 1/(r**12)*numberpassreturn A12stage = int(input('请输入立方扩展的次数:(扩展得多,可以算的近邻就多)'))
precision = int(input('请输入想算到第几近邻:'))
point = BCC(stage)
dis_and_number = dis_numstore(point)
A6 = A6computing(precision,dis_and_number)
A12 = A12computing(precision,dis_and_number)
print('A6=',A6,'A12=',A12)# 图像绘制部分
# stage = 8
#
# A6x = []
# A6y = []
# A12x = []
# A12y = []
#
# for precision in range(1,70):
# point = BCC(stage)
# dis_and_number = dis_numstore(point)
# A6 = A6computing(precision,dis_and_number)
# A12 = A12computing(precision,dis_and_number)
# A6x.append(precision)
# A6y.append(A6)
# A12x.append(precision)
# A12y.append(A12)
# pass# plt.plot(A6x,A6y,linestyle='dashed')
# plt.xlabel('计算到第x近邻')
# plt.ylabel('A6的值')
# plt.title('A6的值随计算近邻数的变化趋势')
# my_y_ticks = numpy.arange(8, 13, 0.3)# plt.plot(A12x,A12y,linestyle='dashed')
# plt.xlabel('计算到第x近邻')
# plt.ylabel('A12的值')
# plt.title('A12的值随计算近邻数的变化趋势')
# my_y_ticks = numpy.arange(7, 9.5, 0.3)
# plt.yticks(my_y_ticks)
# plt.show()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
