如何找到最大值
How to find a max value
我是 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 的最大值。我尝试过使用列表、数组和 max 函数。
将您的代码放入函数 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
然后它会return一个结果生成器,你可以使用max()
得到最大值B
:
>>> max(binding_energy(Z))
如果您想找出 A
的哪个值最大化 B
,请替换
yield B
和
yield (A, B)
您可以删除 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)
我是 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 的最大值。我尝试过使用列表、数组和 max 函数。
将您的代码放入函数 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
然后它会return一个结果生成器,你可以使用max()
得到最大值B
:
>>> max(binding_energy(Z))
如果您想找出 A
的哪个值最大化 B
,请替换
yield B
和
yield (A, B)
您可以删除 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)