我是python的新手,我正在尝试用newmans计算物理学习它。 我试图制作一个程序来解决其中一个练习。 它是使用近似公式计算最高结合能。我做了这个程序,找到了约束能量:
from numpy import *
Z=int(raw_input("What is the atomic number?"))
a1,a2,a3,a4 = 15.67,17.23,0.75,93.2
for A in range(Z, 3*Z):
if A%2==1:
a5=0
elif A%2==0 and Z%2==0:
a5=12.0
elif A%2==0 and Z%2==1:
a5=-12.0
B=a1*A-a2*A**(2/3.0)-a3*Z**2/A**(1/3.0)-a4*(A-2*Z)**2/A+a5/A**(1/2.0)
print B
我的问题是找到B的最大值。我尝试使用列表,数组和最大函数。
答案 0 :(得分:0)
将您的代码放在函数binding_energy
中,将Z
作为参数:
def binding_energy(Z):
a1,a2,a3,a4 = 15.67,17.23,0.75,93.2
for A in range(Z, 3*Z):
if A%2==1:
a5=0
elif A%2==0 and Z%2==0:
a5=12.0
elif A%2==0 and Z%2==1:
a5=-12.0
B=a1*A-a2*A**(2/3.0)-a3*Z**2/A**(1/3.0)-a4*(A-2*Z)**2/A+a5/A**(1/2.0)
yield B
然后它将返回结果的生成器,您可以使用max()
获取最大值B
:
>>> max(binding_energy(Z))
如果您想要找出A
最大化B
的值,请替换
yield B
与
yield (A, B)
答案 1 :(得分:0)
除非您在其他地方使用,否则可以删除from numpy import *
。除了使用列表工作正常。要获得最大值,请按以下方式调用max(B):
Z=int(raw_input("What is the atomic number?"))
a1,a2,a3,a4 = 15.67,17.23,0.75,93.2
B = []
for A in range(Z, 3*Z):
if A%2==1:
a5=0
elif A%2==0 and Z%2==0:
a5=12.0
elif A%2==0 and Z%2==1:
a5=-12.0
num = a1*A-a2*A**(2/3.0)-a3*Z**2/A**(1/3.0)-a4*(A-2*Z)**2/A+a5/A**(1/2.0)
print num
B.append(num)
print max(B)