Python 3.x 用梯形法则计算指数积分函数
我想用梯形规则数值计算指数积分函数。该函数定义为: 参考资料可用。 此功能已在某些库中可用,例如scipy.special。出于某些原因,我不想使用这些库。相反,我需要用梯形规则直接计算这个函数。我写了梯形规则,并检查它,以确保它工作良好。 然后我用它来数值计算Ei函数。不幸的是,结果是不正确的,例如,我想计算等于1.89511的Ei(1),但我编写的代码返回的是无穷大,这是错误的。代码如下:Python 3.x 用梯形法则计算指数积分函数,python-3.x,math,exponential,integral,numerical-integration,Python 3.x,Math,Exponential,Integral,Numerical Integration,我想用梯形规则数值计算指数积分函数。该函数定义为: 参考资料可用。 此功能已在某些库中可用,例如scipy.special。出于某些原因,我不想使用这些库。相反,我需要用梯形规则直接计算这个函数。我写了梯形规则,并检查它,以确保它工作良好。 然后我用它来数值计算Ei函数。不幸的是,结果是不正确的,例如,我想计算等于1.89511的Ei(1),但我编写的代码返回的是无穷大,这是错误的。代码如下: import numpy as np # Integration using Trapezoida
import numpy as np
# Integration using Trapezoidal rule
def trapezoidal(f, a, b, n):
h = float(b - a) / n
s = 0.0
s += f(a)/2.0
for i in range(1, n):
s += f(a + i*h)
s += f(b)/2.0
return s * h
# Define integrand
def Ei(t):
return - np.exp(-t) / t
# Define Ei(1)
A = trapezoidal(Ei, -1, np.inf, 20)
print (A)
# Checking Ei(1)
from scipy.special import expi
print (expi(1))
你知道我如何修改上面的代码以便得到正确的结果吗?
谢谢 1)不能定义以+inf
结尾的范围并将其划分为20个部分
相反,您可以选择任意右极限并将其增大,直到差值abs(积分(极限(i+1))-integral(极限(i))
变得可以忽略不计
(p>2)考虑零点(如果发生)的函数评价。它导致除零
若参数太接近于零,尝试将其移位一点