计算Python中的精确积分

时间:2014-10-19 18:57:59

标签: python

我需要编写一个python代码来计算1 /(1 + x ^ 2)的积分(-5,5)的精确值。 我知道答案是2arctan(5),大致相当于2.746801 ......

我在我编写的代码之下,但是我得到了一个稍微不同的答案,我想知道我能做些什么来使这段代码更准确?谢谢你的帮助!

## The function to be integrated
def func(x):
    return 1/(1 + x**2)


## Defining variables
a = -5.0
b = 5.0
dx = 1.0
Area = 0


## Number of trapezoids
n = int((b-a)/dx)

## Loop to calculate area and sum
for i in range(1, n+1):
    x0 = a + (i-1)*dx
    x1 = a + i*dx

    ## Area of each trapezoid
    Ai = dx*(func(x0) + func(x1))/2.0

    ## Cumulative sum of areas
    Area = Area + Ai

print("The exact value is:  ", Area)

我得到的答案是2.756108 ...... 我知道这是一个小小的差异,然而,这是一个区别,我想尝试更精确的东西。

1 个答案:

答案 0 :(得分:1)

获得积分的近似值的原因是因为您使用的是近似技术(一阶近似来计算定积分的值)。

评估积分有两种方法:分析或数值(通过近似)。你的方法是第二种,因为它是一个近似值,它将产生一个在实际值的一定误差范围内的值。

我的回答是,您无法使用数值方法计算积分的精确值(绝对不是在此函数的情况下)。所以你必须满足于你愿意接受的一定误差,然后选择一个足够小的delta-x来让你在这个范围内。