我跟随sicp用黎曼和计算积分:
#+begin_src ipython :session sicp :results output
def integral(f, a, b, dx):
add_dx = lambda x: x + dx
return sum_recur(f, a+(dx/2), add_dx, b) * dx
from functools import lru_cache
@lru_cache(maxsize=None)
def sum_recur(term, a, next, b):
if a > b: return 0
return term(a) + sum_recur(term, next(a), next, b)
def cube(x): return x ** 3
print(integral(cube, 0, 1, 0.01))
#+end_src
#+RESULTS:
: 0.24998750000000042
它工作正常,但当实现它与列表理解
#+begin_src ipython :session sicp :results output
def integral(f, a, b, dx):
return sum(a+dx/2+n*dx for n in range(b-1)) * dx
print(integral(cube, 0, 1, 0.001))
#+end_src
#+RESULTS:
: 5e-07
它没有像预期的那样工作,有什么问题吗? 问题来源StackOverflow 地址:/questions/59383439/approximate-the-riemann-sum-with-comprehensions
在您的示例中,range(a-b)部分是取值范围(-1)。而且,您不会在任何地方调用多维数据集函数。 试试这个:
def cube(x): return x ** 3
def integral(f, a, b, dx):
return sum(f(a+dx/2+n*dx) for n in range(int((b-a)/dx)) ) * dx
print(integral(cube, 0, 1, 0.01))
打印:
0.24998750000000006
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。