2014-10-19 129 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,以使其在該範圍內。