1
我想用B樣條來計算numpy中閉合曲線的曲率。我想評估樣條表示中的衍生物而不是數據以得到平滑的結果。但是下面的代碼返回一個錯誤:如何從splprep評估樣條曲線?
Traceback (most recent call last):
File "<stdin>", line 16, in <module>
File "/Users/jfl/anaconda/lib/python2.7/site-packages/scipy/interpolate/fitpack.py", line 1212, in splder
c = (c[1:-1-k] - c[:-2-k]) * k/dt
TypeError: unsupported operand type(s) for -: 'list' and 'list'
shell returned 1
所以我如果我使用正確的splder
功能不知道...
import numpy as np
import scipy.interpolate as intplt
import matplotlib.pyplot as plt
t = np.linspace(0,2*np.pi,100)
x = np.cos(t)
y = np.sin(t)
pts = np.vstack((x,y))
tck, u = intplt.splprep(pts, u=None,k=3, s=0.0, per=1)
u_new = np.linspace(u.min(), u.max(), 1000)
x_new, y_new = intplt.splev(u_new, tck, der=0)
tck_der1 = intplt.splder(tck)
tck_der2 = intplt.splder(tck_der1)
xp, yp = intplt.splev(u_new, tck_der1, der=0)
xpp, ypp = intplt.splev(u_new, tck_der2, der=0)
plt.figure()
plt.plot(x,y,".")
plt.plot(x_new,y_new)
plt.figure()
curvature = np.abs(xp* ypp - yp* xpp)/np.power(xp** 2 + yp** 2, 3/2)
plt.plot(u_new,curvature)
plt.show()
哇好,我感到非常愚蠢的,我確實試過,但沒有注意到軸極限..無論如何,它很好地瞭解der方法的工作原理! – Jack