はじめに
lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、データを減衰高調波発振器モデルによりカーブフィッティングする方法について説明する。
解説
モジュールのインポート
バージョン
データの生成
\[ f(x; A, \mu, \sigma, \gamma) = \frac{A\sigma}{\pi [1 – \exp(-x/\gamma)]}
\Big[ \frac{1}{(x-\mu)^2 + \sigma^2} – \frac{1}{(x+\mu)^2 + \sigma^2} \Big]\]
上記の関数でデータを作成する。作成したデータは下のようになる。
モデルの定義
lmfit.models
の DampedHarmonicOscillatorModel
をモデル関数として用いる。
初期パタメータの推定
damp_mod.guess(y, x=x)
により、初期値を推定する。
カーブフィット
out = damp_mod.fit(y, pars, x=x)
により、カーブフィッティングを実行する。
フィッティング結果の表示
print(result.fit_report())
により、フィッティングの結果を見ることができる。
result.plot_fit()
によりデータとフィッティングカーブが表示される。
result.plot()
とすることで残差とともにフィッティング結果が表示される。
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
参考
Built-in Fitting Models in the models module — Non-Linear Least-Squares Minimization and Curve-Fitting for Python
コメント