我无法理解为什么函数给我一个不正确的结果1,000,100,000.7423575,而不是原来的结果应该是1,000,000,000.75。 工作已经给了我们,我们需要实现Python的功能,高阶函数并构建我的代码。只需提一下,代码的某些部分在社区中使用了其他代码。 如果你能帮我解决问题,我会很高兴。
谢谢
def summ(a, b, f, nextt):
total = f(a) / 2.0
while a <= b:
total += f(a)
a = nextt(a)
total += f(b) / 2.0
return total
def Tr(fx, a, b, n):
h = float(b - a) / n
return summ(a, b, fx, lambda a:a + h)
print(Tr(lambda x:x**9, 0.0, 10.0, 100000))
答案 0 :(得分:0)
这应该有效:
def trapezoidal(a, b, next, f = lambda x:x**9):
h = float(b - a) / next
s = 0.0
s += f(a)/2.0
for i in range(1, next):
s += f(a + i * h)
s += f(b)/2.0
return s * h
答案 1 :(得分:0)
首先,您要添加f(a)
和f(b)
两次的值,给出值的1.5倍,而不是您想要的值的一半。尝试
def summ(a, b, f, nextt):
total = f(a) / 2.0
a = nextt(a)
while a < b - 1e-9:
total += f(a)
a = nextt(a)
total += f(b) / 2.0
return total
这可以消除你的结果中额外的100,000。
其次,您应该将总和乘以每个矩形的宽度,即h
:
def Tr(fx, a, b, n):
h = float(b - a) / n
return summ(a, b, fx, lambda a:a + h) * h
否则,您的示例中的结果会超过10000倍(与您发布的结果相反。)
现在我得到的结果是1,000,000,000.7423584。你说它应该是1,000,000,000.75。差异可能是舍入错误。也许你可以通过使用内置和函数来减少这个:
def Tr(fx, a, b, n):
h = float(b - a) / n
tot = sum(fx(a + h*i) for i in range(1, n))
tot += (fx(a) + fx(b)) / 2.
return tot * h
现在我得到1,000,000,000.7500008,这与你陈述的结果非常接近。