Skip to main content
 首页 » 编程设计

python之得到 4 而不是 4.76 作为数学/科学问题的答案(总是整数而不是小数)

2025年05月04日14三少

所以这在某种程度上与我绘制能量水平等问题有关。link to the problem .

任何人,我正在使用离散化来获得各种势能的能级和波函数,我可能是编程工具,因为我不知道如何获得能量特征值的数值结果。我有一种强烈的感觉,即必须能够从给定的代码中提取该信息(该代码具有来自 linalg 模块的 eig_banded 例程)。但我只是一个工具,不知道该怎么做:\

所以我只需要我绘制的能量的数值...

我试过(这是链接中代码的一部分):

    def calc(Nmesh,POWER,L ,numwav=0): 
    # 
    dx=L/Nmesh 
    x = np.arange(-L,L+0.0001,dx) 
    Npts=len(x) 
 
    V = x**POWER 
 
    # 
    ai = np.empty((2,Npts))   # ai[:,i] = a[:,i-1] 
    ai[0,:] = 1/dx**2 + V     # 
    ai[1,:] = -1.0/dx**2/2    # 
    ai[1,Npts-2] = -99.0      # 
    a = ai[:,1:-1] 
    f = report_time(linalg.eig_banded) 
    eig, vec = f(a, lower=True,overwrite_a_band=True, 
                 select='i',select_range=(0,numwav) 
                 ) # 
 
    wave = np.empty(Npts) 
    wave[1:-1] = vec[:,numwav] 
    wave[0] = 0             # 
    wave[Npts-1] = 0        # 
    wave = 150*wave + eig[numwav] 
    return x, V, wave, eig[numwav] 
 
def main(): 
    try: numwav = int(sys.argv[1]) 
    except (IndexError, ValueError): 
        numwav = 2 
    POWER=4 
    L=4.0 
    Nmesh = 512 
    print 'Nmesh=%d' % Nmesh 
    x, V, wave, y = calc(Nmesh, POWER, L,numwav) 
    print 'Energy eigenvalue is: %d' % y 

但是对于这个例子,它给出的特征值为 4,并且在图上它更接近 4.76...

我做错了什么? :(

请您参考如下方法:

这是你的问题:

>>> '%d' % 1.2 
'1' 

你想要的格式字符串是 %f 来显示小数点

>>> '%f' % 1.2 
'1.200000' 

诊断的关键在于它是一个整数而不是您看到的 float 。

更多信息可以在 http://docs.python.org/library/stdtypes.html 找到 例如可以使用如下格式进行取整:

>>> '%.2f' % 1.234 
'1.23' 
>>> '%.2f' % 1.236 
'1.24'