【问题标题】:Approximate a curve given n 2d points and calculate angle/derivate at those n locations给定 n 个 2d 点的近似曲线并计算这 n 个位置的角度/导数
【发布时间】:2021-10-16 20:09:25
【问题描述】:

我正在寻找包含 n x,y 点的曲线,例如 x=[0,2,3,5,8] 和 y=[8,3,-1,0,-2]。我正在寻找使用 n-1 次多项式。然后我想计算每个 x 位置的角度/一阶导数。

到目前为止,我已经尝试了 numpy.polifit 和 scipy 曲线拟合的混合,但没有取得多大成功。我还检查了样条曲线,但对进一步分割间隔不太感兴趣,因为我知道我已经想要计算角度的点。

有什么想法吗?

【问题讨论】:

  • “到目前为止,我已经尝试过混合使用 numpy.polifit 和 scipy 曲线拟合,但没有取得多大成功。” 显示您尝试过的内容 - 以及出了什么问题 - 在问题。

标签: numpy math scipy calculus


【解决方案1】:

由于点数和您要查找的度数相匹配,您可以使用拉格朗日插值法找到唯一解。

from scipy.interpolate import lagrange

X=[0,2,3,5,8]
Y=[8,3,-1,0,-2]

P = lagrange(X,Y)
P_deriv = P.deriv()
derivatives = [P_deriv(x) for x in X]

print(P)
print(P_deriv)
print(derivatives)

#           4         3         2
# -0.08611 x + 1.261 x - 5.169 x + 3.483 x + 8
#
#          3         2
# -0.3444 x + 3.783 x - 10.34 x + 3.483
#
# [3.483, -4.817, -2.783, 3.317, -13.45]

如果你想得到切线角而不是导数,你可以在数组derivatives上调用numpy.arctan

【讨论】:

  • 嗨,Stef,非常感谢您的代码,它完全符合我的要求。使用 Langrange 方法很有趣,正是我所需要的。不过要注意的一件事是,我认为打印出来的实际方程式并不是真实的。因为它是 5 分,所以它应该是 x^4 ......这是我在运行代码时实际得到的。可能值得仔细检查以供其他人用作指导。再次感谢!
  • @HectorArroyoGzlez 哎呀,你是对的。固定。
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多