Python 中点计算中的积分

问题描述 投票:0回答:1

我在一本书中发现了这个积分近似函数。它看起来很高效,并以更少的子区间 ((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))

python math data-science integration integral
1个回答
0
投票

我发现我的函数中的中点占了一个额外的区间。当我将第 i 次迭代减少 1 后,它就像书上的公式一样工作。

中点= a+(dx/2)+ ((i-1)*dx)

© www.soinside.com 2019 - 2024. All rights reserved.