2014-10-19 133 views
0

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

我已经写了下面的代码,但是我得到一个稍微不同的答案,我想知道如果有什么我可以为了让这段代码更加准确吗?谢谢你的帮助!

## 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

不应该在代码审查? – 2014-10-19 18:58:43

+1

[浮点数学是否被破坏?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – Pokechu22 2014-10-19 19:01:04

+1

提示:“dx”扮演什么角色? – DSM 2014-10-19 19:02:31

回答

1

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

有两种评估积分的方法:分析或数值(通过近似)。你的方法属于第二类,并且由于它是一个近似值,它会生成一个在真实值的一定误差范围内的值。

我的答案是,您无法使用数值方法(绝对不是此函数的情况下)计算整数的确切值。因此,您必须解决您愿意接受的某个误差范围,然后选择一个足够小的delta-x,以使其在该范围内。