【发布时间】:2010-10-09 12:47:36
【问题描述】:
我正在尝试在我的程序中以数字方式集成任意(我编码时已知)函数 使用数值积分方法。我正在使用 Python 2.5.2 和 SciPy 的数值集成包。为了感受一下,我决定尝试整合 sin(x) 并观察这种行为-
>>> from math import pi
>>> from scipy.integrate import quad
>>> from math import sin
>>> def integrand(x):
... return sin(x)
...
>>> quad(integrand, -pi, pi)
(0.0, 4.3998892617846002e-14)
>>> quad(integrand, 0, 2*pi)
(2.2579473462709165e-16, 4.3998892617846002e-14)
我觉得这种行为很奇怪,因为 -
1. 在普通积分中,在整个周期内积分为零。
2.在数值积分中,这(1)不一定是这种情况,因为你可能只是
近似曲线下的总面积。
在任何情况下,假设 1 为 True 或假设 2 为 True,我发现行为不一致。两种积分(-pi 到 pi 和 0 到 2*pi)都应该返回 0.0(元组中的第一个值是结果,第二个是错误)或返回 2.257...
有人能解释一下为什么会这样吗?这真的是矛盾吗?有人能告诉我我是否遗漏了一些关于数值方法的基本知识吗?
无论如何,在我的最终应用中,我打算使用上述方法来求函数的弧长。如果有人在这方面有经验,请告诉我在 Python 中执行此操作的最佳策略。
编辑
注意
我已经在数组中存储了范围内所有点的第一个微分值。
当前的错误是可以容忍的。
结束说明
我已经阅读了有关这方面的维基百科。正如 Dimitry 所指出的,我将整合 sqrt(1+diff(f(x), x)^2) 以获得弧长。我想问的是 - 是否有更好的近似/最佳实践(?)/更快的方法来做到这一点。如果需要更多上下文,我会单独发布/在此处发布上下文,如您所愿。
【问题讨论】:
-
这是一篇博文algorithmist.wordpress.com/2009/01/05/…,您可能会觉得有用。来自博客的链接algorithmist.net/crlength.html
-
谢谢。我会看看链接。
标签: python integration scipy numerical-methods