Python の場合は numpy.polyfit() を使えば簡単に近似多項式が求まる。
構文: numpy.polyfit([x 軸の点列], [y 軸の点列], 次数)
返値: N 次 ~ 0 次の順番に係数の並んだリスト
import matplotlib.pyplot as plt import numpy as np import sympy as sym x = sym.Symbol("x") xList = np.array([1,2,3,4,5,6,7,8,9,10]) yList = np.array([3,5,4,2,6,7,9,7,6,4]) N = 5 coeffs = np.polyfit(xList, yList, N) print("%s ~ 0 次の係数: %s" % (N, coeffs)) eq = np.poly1d(coeffs) print("近似多項式: %s" % (sym.expand(eq(x)))) x_numbers = np.linspace(xList[0], xList[-1], 2**6+1) plt.scatter(xList, yList) plt.plot(x_numbers, eq(x_numbers)) plt.show()
実行結果:
5 ~ 0 次の係数: [ 1.00000000e-02 -2.80244755e-01 2.82261072e+00 -1.23598485e+01 2.30121445e+01 -1.01333333e+01] 近似多項式: 0.0100000000000009*x**5 - 0.280244755244777*x**4 + 2.82261072261092*x**3 - 12.3598484848493*x**2 + 23.0121445221459*x - 10.1333333333339