我只是用Python测试我的手,用中间点Riemann和,但我似乎错过了一步,因为我的答案是错误的。下面是我的代码示例:
from math import pi, sin
a=0
b=pi/2
n=10
dx=(b-a)/n
ends = [a+i*dx for i in range(n+1)]
mids=[(i+i-1)/2 for i in ends]
f = lambda x: x*sin(x)
area = [f(i)*dx for i in mids]
sum(area)我的答案应该是1,但我得到了0.5022。我怀疑我在mids下的理解列表是错误的,但我想不出如何修复它。任何帮助都将不胜感激。
发布于 2021-02-20 09:11:57
mids应该是
mids = [(ends[i] + ends[i-1]) / 2 for i in range(1, len(ends))]i-1不是ends的i-1第四元素。它只是i第四元素减去1。
发布于 2021-02-20 09:15:18
首先,您将选择11段,而不是10段,因为有了range(n+1)
那你的计算就错了。
ends[0] == 0 (a == 0, i == 0 => a+i*dx == 0)
=> mids[0] == -1/2 (i == ends[0] => (i+i-1)/2 == -1/2)如果您使用range(1, n+1)代替,您将得到:
ends[0] == pi/20 (a == 0, i == 1 => a+i*dx == pi/20)
=> mids[0] == pi/20-1/2 (i == ends[0] == pi/20 => (i+i-1)/2 == (pi/10-1)/2)这些仍然是不正确的-- ends看起来不错,但是mids[0]需要计算为pi/40
我的建议是使用调试器在这里的每个点检查值,并确认它们是您认为应该的值。
https://stackoverflow.com/questions/66289676
复制相似问题