LoginSignup
16
20

More than 5 years have passed since last update.

[Pythonによる科学・技術計算] 3次スプライン補間,scipy

Last updated at Posted at 2017-07-20

scipy.interpolateのinterp1dメソッドを利用して3次スプライン補間を行う。

内容

例題:$y=1/(1+x^2)$を考える。11点のデータセット$(x_i, y_i)$をサンプルし,補間する。
この関数は,ラグランジュ補間ではうまくいかない(Qiita記事を参照)。


from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt

x =np.linspace(-5,5,num=11)
y = 1.0/(1.0+x**2)
f_line = interp1d(x, y)
f_CS = interp1d(x, y, kind='cubic')  #3次スプライン補間実行!

#for plot

xnew =np.linspace(-5,5,num=51)
plt.plot(x, y, 'o',   xnew, f_CS(xnew), '-')
plt.legend(['Raw data','Lagrange', 'Cubic spline'], loc='best')
plt.xlim([-6, 6])
plt.ylim([0, 1.4])
plt.show()

結果

t.png
青印がサンプルした11個のデータ点。オレンジ線がスプライン補間したもの。

[補遺]

以下の図で示されるように,ラグランジュ補間ではこの関数をうまく補間できない。

t2.png
青印がサンプルした11個のデータ点。オレンジ線がスプライン補間,緑線がラグランジュ補間したもので,両端近傍で不自然な振動を起こす。

16
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
20