首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黎曼和编码

黎曼和编码
EN

Stack Overflow用户
提问于 2021-02-20 08:51:32
回答 2查看 174关注 0票数 0

我只是用Python测试我的手,用中间点Riemann和,但我似乎错过了一步,因为我的答案是错误的。下面是我的代码示例:

代码语言:javascript
复制
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下的理解列表是错误的,但我想不出如何修复它。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2021-02-20 09:11:57

mids应该是

代码语言:javascript
复制
mids = [(ends[i] + ends[i-1]) / 2 for i in range(1, len(ends))]

i-1不是endsi-1第四元素。它只是i第四元素减去1。

票数 2
EN

Stack Overflow用户

发布于 2021-02-20 09:15:18

首先,您将选择11段,而不是10段,因为有了range(n+1)

那你的计算就错了。

代码语言:javascript
复制
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)代替,您将得到:

代码语言:javascript
复制
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

我的建议是使用调试器在这里的每个点检查值,并确认它们是您认为应该的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66289676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档