python - 使用 scipy 得到错误的弧长结果

标签 python math scipy

我正在尝试导出任意曲线的长度。

我从一个简单的例子开始,一个半径为 R 的圆。我得到了错误的结果!

结果似乎与 R 的真实结果有所不同,这可能会给问题带来一些提示。

以下代码:

from scipy.integrate import quad
from scipy.misc import derivative
import numpy as np

r = lambda t: 1
x = lambda t: r(t)*np.cos(t)
Dx = lambda t: derivative(x, t)
y = lambda t: r(t)*np.sin(t)
Dy = lambda t: derivative(y, t)

print(quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, 2*np.pi))

结果

(5.287118128162912, 5.869880279799524e-14)

对于 R=1,它应该是 2*pi = 6.28...

对于 R=5,它是

(26.435590640814564, 2.9349401398997623e-13)

有什么建议吗?

最佳答案

导数的文档字符串表示“使用带间距的中心差分公式dx,以及dx<的默认值 是 1,这个值太大了,无法期望得到函数导数的精确近似值。例如,尝试dx=1e-8

使用您的代码,但将 DxDy 更改为

In [21]: Dx = lambda t: derivative(x, t, dx=1e-8)

In [22]: Dy = lambda t: derivative(y, t, dx=1e-8)

这是我得到的:

In [23]: print(quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, 2*np.pi))
(6.283185278344876, 1.7738885483822232e-08)

关于python - 使用 scipy 得到错误的弧长结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381798/

相关文章:

python - 使用 optimize.leastsq() (Python) 在一组方程中进行最小二乘

python - 让 x 轴网格显示在 matplotlib 中

python - 如何比较 DataFrame 的 3 列,Python 3.6

Python 词典类别

Mysql ABS(AVG(field_name)) 作为总返回 float

java - 在 Java 中移动 Math.ceil

javascript - 根据先前计算的值计算出比率

python - 如何从python中的二面角计算笛卡尔坐标

python - 使用 scipy least_squares 时出现 ValueError

python - 使用 Python 对三对角对称稀疏矩阵进行对角化