给定 n 个 2d 点近似曲线并在这 n 个位置计算 angle/derivate

Approximate a curve given n 2d points and calculate angle/derivate at those n locations

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

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

有什么想法吗?

由于点的数量和你要找的度数相匹配,你可以使用拉格朗日插值找到唯一的解决方案。

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