Skip to content

Instantly share code, notes, and snippets.

@TonyMooori
Created January 30, 2016 14:15
Show Gist options
  • Save TonyMooori/300ccbdb071ff45a6815 to your computer and use it in GitHub Desktop.
Save TonyMooori/300ccbdb071ff45a6815 to your computer and use it in GitHub Desktop.
#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
def approx(x,x_data,y_data):
""" x_data,y_dataを利用してy(x)の値をラグランジュ補間で予測する """
y = 0 # 予想されるf(x)の近似値
n_data = len(x_data) # サンプルデータの数
for i in range(n_data):
# indxにはi以外の0からn_data-1が代入される
indx = np.arange(n_data)[ np.arange(n_data) != i ]
# N(i,x)に当たる.np.productは全配列データの積を返す
N = np.product(x-x_data[indx])/np.product(x_data[i]-x_data[indx])
# f(x_data[i])*N(i,x)を足していく
y += y_data[i]*N
return y
# プロットデータを作成(0から2*piから6個)
x_data = np.linspace(0,2*np.pi,num=6)
y_data = np.sin(x_data)
# 試しに0から2*piまでのサイン関数を補間させてみる
x = np.linspace(0,2*np.pi,num=100)
y = np.array( [ approx(xi,x_data,y_data) for xi in x ] )
# 表示
plt.plot(x,y,label="approximation")
plt.plot(x,np.sin(x),label="sin(x)")
plt.title("Lagrange interpolation of sin(x)")
plt.legend()
plt.show()
@TonyMooori
Copy link
Author

ラグランジュ補間(Lagrange interpolation)のプログラムです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment