2017-03-06 31 views
0

我遇到了辛普森規則的問題。跟它浮點對象不能在範圍被解釋爲整數對於i(1,(N/2)+ 1):Python辛普森規則浮點對象錯誤

def simpson(f, a, b, n): 
h=(b-a)/n 
k=0.0 
x= a + h 
for i in range(1, (n/2) + 1): 
    k += 4*f(x) 
    x += 2*h 

x = a + 2*h 
for i in range(1, n/2): 
    k +=2*f(x) 
    x += 2*h 
return (h/3)*(f(a)+f(b)+k) 

結果=辛普森(拉姆達X:X,0,1,4) print(result)

+2

[Python TypeError:'float'object can not be interpret as a integer](http://stackoverflow.com/questions/33355608/python-typeerror-float-object-cannot-be-interpreted-as-一個整數) –

回答

0

n/2在Python 3中返回float,而range只能用於整數。您需要使用整數除法(//):

range(1, (n // 2) + 1)

+0

好吧,我會試一試 –

+0

它的工作感謝你。我使用第二種方法。那麼你能否向我解釋第一個如何工作。我的意思是我必須在使用這個之前導入任何函數,因爲當我嘗試第一個函數時,它說底層函數沒有被定義。 –

+0

@PemaChidaSherpa事實上,爲了使用'floor',你需要導入它:'從數學輸入層'。我把它從我的答案中刪除了,因爲簡單地使用'//'更容易。 – DeepSpace