はじめに
指数関数って右半分の形だけなら、二次関数になんとなく似ていますよね。二次多項式を持ってくれば近似的にできそうな気ができるので、やってみましょう。
とはだいたい同じようなものじゃないの? という話です。
プログラム
pythonのscipyを使います。コードを載せますが、読み流して頂いても構いません。
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit def exp_f(x): return np.exp(x) def pow_f(x, a, b, c): return a + b * x + c * x ** 2 def main(): np.random.seed(0) x = np.arange(0, 3, 0.05) y = exp_f(x) + np.random.normal(scale=1, size=x.shape) params, cov = curve_fit(pow_f, x, y) plt.scatter(x, y, c="b", alpha=0.2) plot_x = np.arange(0, 4, 0.1) plt.plot(plot_x, exp_f(plot_x), color="b", label="y=exp(x)") plt.plot(plot_x, pow_f(plot_x, *params), color="r", label="y={0:.2f}+{1:.2f}x+{2:.2f}x^2".format(*params)) plt.legend() plt.savefig("result.png") if __name__ == "__main__": main()
内挿で見るとぱっと見なんとなくフィットしているような気もしますが、外挿は案の定だめです。
でも、限られた区間であればこれでいいような気も・・・
できる理由
指数関数をテイラー展開すると、多項式になるからです。更に、低い次数のものほど係数が大きい多項式なので、低次の多項式でけっこううまく近似できます。有名な話ですね。
こちらのページでぽちぽち動かしてみると実感できます。