def trapezoidal(f, a, b, n):
h = float(b - a) / n
s = 0.0
s = s + f(a)
i=1
while i<=n-1:
s = s + f(a + i*h)
i= i +1
s = s + f(b)
s = s*h
return s
def f(x):
x = float(x)
return (-1/6)*(x-1)*(x-2)*(x+2)*(x-4)
lel = trapezoidal(f, -2, 4, 10)
print ("%.3f" % lel)
ok = f(-0.8)
print ok
我正在尝试构建一个使用梯形规则计算积分的程序。当我在纸上做它它工作正常但我的f功能不能正常工作。例如,f(-0.8)应该等于4.8384但是当我运行它时显示29.0304。请帮帮忙?
答案 0 :(得分:3)
如果您使用的是Python 2.x
def f(x):
x = float(x)
return (-1/6)*(x-1)*(x-2)*(x+2)*(x-4)
表达式中的第一项是进行整数除法。该除法的结果将在乘法过程中提升为float
,但到那时为时已晚。
>>> (-1/6)
-1
您需要将所有内容保存在floats
def f(x):
x = float(x)
return (-1.0/6.0)*(x-1)*(x-2)*(x+2)*(x-4)
答案 1 :(得分:1)
尝试
return (-1.0/6)*(x-1)*(x-2)*(x+2)*(x-4)