[Python에 의한 과학·기술 계산] 3차 스플라인 보간, scipy

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()


결과




청인이 샘플한 11개의 데이터점. 오렌지선이 스플라인 보간한 것.

[부록]



아래 그림과 같이 라그랑주 보간에서는이 함수를 잘 보간 할 수 없습니다.


청인이 샘플한 11개의 데이터점. 오렌지선이 스플라인 보간, 녹색선이 라그랑주 보간한 것으로 양단 근방에서 부자연스러운 진동을 일으킨다.

좋은 웹페이지 즐겨찾기