如何找到最大值

时间:2015-06-17 19:56:22

标签: python max

我是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的最大值。我尝试使用列表,数组和最大函数。

2 个答案:

答案 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)