# -*- coding: UTF-8 -*- from math import * import numpy as np ############################################ # ラグランジュ補間法 # n : 次数(n=1は線形補間) # x, y : (n+1)個の点の座標 # x1 : 補間したい点のx座標 # return : 補間結果 # coded by Y.Suganuma ############################################ def Lagrange(n, x, y, x1) : y1 = 0.0 for i1 in range(0, n+1) : s1 = 1.0 s2 = 1.0 for i2 in range(0, n+1) : if i2 != i1 : s1 *= (x1 - x[i2]) s2 *= (x[i1] - x[i2]) y1 += y[i1] * s1 / s2 return y1 ---------------------------------- # -*- coding: UTF-8 -*- import numpy as np from math import * from function import Lagrange ############################################ # 補間法(ラグランジュ) # coded by Y.Suganuma ############################################ x = np.array([0, 2, 2], np.float) y = np.array([0, 4, 4], np.float) # 線形補間 n = 1 print("線形補間") x1 = 0.0 for i1 in range(0, 9) : y1 = Lagrange(n, x, y, x1) print(" x " + str(x1) + " y " + str(y1)) x1 += 0.25 # 2次補間 n = 2 x[1] = 1.0 y[1] = 1.0 print("2次補間") x1 = 0.0 for i1 in range(0, 9) : y1 = Lagrange(n, x, y, x1) print(" x " + str(x1) + " y " + str(y1)) x1 += 0.25