2017-03-06 66 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