我在一本书中发现了这个积分近似函数。它看起来很高效,并以更少的子区间 ((n)) 提供准确的结果。
def approximate_integral(a, b, n, f):
delta_x = (b - a) / n
total_sum = 0
for i in range(1, n + 1):
midpoint = 0.5 * (2 * a + delta_x * (2 * i - 1))
total_sum += f(midpoint)
return total_sum * delta_x
由于上面的中点计算不太明显,所以我搜索了数学公式并实现了。然而,只有当我使用比书中发现的实现更多的间隔时,它才接近正确答案。
中点 = a + 2 * dx + i * dx
def approximate_integral(a, b, n, f):
dx = (b - a) / n
tot_sum = 0
for i in range(1, n + 1):
midpoint = a + (dx / 2) + (i * dx)
tot_sum += f(midpoint)
return tot_sum * dx
请解释一下这个公式的效率以及与我使用的公式之间的差异。midpoint = 0.5 * (2 * a + delta_x * (2 * i - 1))
我发现我的函数中的中点占了一个额外的区间。当我将第 i 次迭代减少 1 后,它就像书上的公式一样工作。
中点= a+(dx/2)+ ((i-1)*dx)