Python 黎曼和编码
我只是在用中点黎曼和测试Python,但我似乎遗漏了一步,因为我的答案是错误的。以下是我的代码示例:Python 黎曼和编码,python,numerical-integration,Python,Numerical Integration,我只是在用中点黎曼和测试Python,但我似乎遗漏了一步,因为我的答案是错误的。以下是我的代码示例: 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,但我得到了
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下的理解列表是错误的,但我不知道如何修复它。任何帮助都将不胜感激。
mids
应
mids = [(ends[i] + ends[i-1]) / 2 for i in range(1, len(ends))]
i-1
不是end
的i-1
th元素。它只是i
th元素减去1。mids
应该是
mids = [(ends[i] + ends[i-1]) / 2 for i in range(1, len(ends))]
i-1
不是end
的i-1
th元素。这只是i
th元素减去1。首先,由于范围(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)
如果改用范围(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)
这些仍然不正确-结束
看起来正常,但是mids[0]
需要计算为pi/40
我的建议是使用调试器检查此处每个点的值,并确认它们是您认为应该的值。对于初学者,由于
范围(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)
如果改用范围(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)
这些仍然不正确-结束
看起来正常,但是mids[0]
需要计算为pi/40
我的建议是使用调试器检查此处每个点的值,并确认它们是您认为应该的值。这很好!那很好!仅供参考,这位先生的名字是。哈哈哈。。。谢谢你指出这一点!仅供参考,这位先生的名字是。哈哈哈。。。谢谢你指出这一点!