簡體   English   中英

在 python 中區分二維三次樣條

[英]Differentiate a 2d cubic spline in python

我正在使用 interpolate.interp2d() 在 function 上擬合二維樣條曲線。 如何獲得樣條曲線 w.r.t 的一階導數。 每個因變量? 到目前為止,這是我的代碼,Z 是我擁有的網格上的離散點

from scipy import interpolate
YY, XX = np.meshgrid(Y, X)
f = interpolate.interp2d(AA, XX, Z, kind='cubic')

所以,我需要 df/dx 和 df/dy。 另請注意,我的 Y 網格不是均勻分布的。 我想我可以對 Z 進行數值區分,然后擬合一個新的樣條曲線,但這似乎太麻煩了。 有沒有更簡單的方法?

您可以通過在插值器的tck屬性上使用bisplev interp2d可選的dy dx

如果您有一些已插值的網格數據:

X = np.arange(5.)

Y = np.arange(6., 11)
Y[0] = 4  # Demonstrate an irregular mesh
YY, XX = np.meshgrid(Y, X)
Z = np.sin(XX*2*np.pi/5 + YY*YY*2*np.pi/11)

f = sp.interpolate.interp2d(XX, YY, Z, kind='cubic')

xt = np.linspace(X.min(), X.max())
yt = np.linspace(Y.min(), Y.max())

然后您可以訪問f.tck bisplev f相對於x的偏導數可以評估為

Z_x = sp.interpolate.bisplev(xt, yt, f.tck, dx=1, dy=0)

編輯:從這個答案,看起來interp2d的結果本身可以采用dxdy的可選 arguments :

Z_x = f(xt, yt, dx=1, dy=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM