私はBスプラインを使ってnumpyで閉じた曲線の曲率を計算したいと思っています。私はスムーズな結果を得るためにデータよりもスプライン表現の導関数を評価したいと思います。しかし、以下のコードはエラーを返します:私が正しくsplder
機能を使用していた場合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
は、だから私は疑問に思って...
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