最小二乗法 / N 次函数近似 / numpy.polyfit()

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

f:id:ti-nspire:20180402091854p:plain:w400