スプライン補間

モジュールのインポート

import numpy as np  
import scipy as sp
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import scienceplots
#Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')).
plt.style.use(['science', 'notebook'])

関数値のプロット

def func(x):
    return x**2 * np.sin(x)
x = np.linspace(0, np.pi*4, 9)
y = func(x)
x,y
(array([ 0.        ,  1.57079633,  3.14159265,  4.71238898,  6.28318531,
         7.85398163,  9.42477796, 10.99557429, 12.56637061]),
 array([ 0.00000000e+00,  2.46740110e+00,  1.20867794e-15, -2.22066099e+01,
        -9.66942355e-15,  6.16850275e+01,  3.26343045e-14, -1.20902654e+02,
        -7.73553884e-14]))
fig = plt.figure() # グラフ領域の作成
plt.scatter(x,y)
fig.savefig('p1_ex13_1.pdf')

直線補間

f = interp1d(x,y, kind='linear') # 直線補間
x_dense = np.linspace(0, np.pi*4, 101)
y_dense = f(x_dense)
fig = plt.figure() # グラフ領域の作成
plt.plot(x_dense, y_dense)
plt.plot(x,y, "o")
plt.plot(x_dense, func(x_dense))
fig.savefig('p1_ex13_2.pdf')

スプライン補間

 何らかの連続条件によって多項式を接続した区分的な多項式をスプライン関数という(スプラインとは,離散点を滑らかな曲線でつなぐ自在定規を意味する).このつなぎ目(連続条件を与える点)を節点とよび,通常,実験データを得た点や複雑な関数値を求めた点が節点になる.また,これらの点を滑らかな曲線でつなぎ,その間の点を推定することは補間と呼ばれる.スプライン関数は多項式の次数に応じて定義できるが,多項式の次数を上げると余分な振動が生じ,逆に次数が低いと十分な精度が得られないため,3次スプライン関数が最もよく用いられる.
f2 = interp1d(x,y, kind='cubic') # 3次スプライン補間
y2_dense = f2(x_dense)
fig = plt.figure() # グラフ領域の作成
plt.plot(x_dense, y2_dense)
plt.plot(x,y, "o")
plt.plot(x_dense, func(x_dense))
fig.savefig('p1_ex13_3.pdf')