我正在使用等分算法来查找函数的最大值。

这是我的代码:

from math import exp

h = 6.62606876e-34
c = 2.99792458e8
k = 1.3806504e-23
T = 7000
epsilon = 1.e-10

def fct(lam) :
    return 2*h**2*c**3*exp(h*c/(lam*k*T))/(k*T*lam**7*(exp(h*c/(lam*k*T)) - 1)) - 10*c**2*h/(lam**6*(exp(h*c/(lam*k*T)) - 1))

lam1 = 100.e-9
lam2 = 1000.e-9

delta = lam2 - lam1

f1 = fct(lam1)
f2 = fct(lam2)

while delta > epsilon :
    lamm = 0.5*(lam1 + lam2)
    fm = fct(lamm)
    f2=fct(lam2)
    if fm*f2 > 0 :
        lam2 = lamm
    else :
        lam1 = lamm
    delta = lam2 - lam1
    print('racine de la fonction: {}+/-{}'.format(lamm,delta))


问题是,由于浮子的精度有限,所以在评估线fm = fct(lamm)时得到零误差除法。

如何解决此问题?

最佳答案

我认为使用python进行数学运算的最佳选择是使用许多数学处理库之一。 https://stackoverflow.com/a/13442742/2534876为您的浮点问题建议mpmathbigfloat可能就足够了。 numpy也有类似float128这样的东西。

挖掘周围,找到您喜欢的东西。

09-30 23:55