[lmfit] 21. 擬フォークト分布関数モデルによるカーブフィッティング

lmfit

はじめに

lmfitは非線形最小二乗法を用いてカーブフィットするためのライブラリであり、Scipy.optimize.curve_fitの拡張版に位置する。ここでは、データを擬フォークト分布関数モデルによりカーブフィッティングする方法について説明する。

コード

解説

モジュールのインポート

バージョン

データの生成

Scipyのspecial.voigt_profileでフォークト分布のラインプロファイルを作成する。xとyの関係を図で示すと以下のようになる。

モデルの定義

lmfit.modelsPseudoVoigtModelをモデル関数として用いる。擬Voigt関数は以下の式で表される。パラメータはamplitude, center, sigmaと ガウス成分とローレンツ成分の割合(α)となる。

\[f(x; A, \mu, \sigma, \alpha) = \frac{(1-\alpha)A}{\sigma_g\sqrt{2\pi}}
e^{[{-{(x-\mu)^2}/{{2\sigma_g}^2}}]}
+ \frac{\alpha A}{\pi} \big[\frac{\sigma}{(x – \mu)^2 + \sigma^2}\big]\]

初期パタメータの推定

model.guess(y, x=x)により、上図のデータを擬フォークト関数モデルで近似するためのフィッティングパラメータについて、初期値を推定する。パラメータ(params)は以下のようになる。

カーブフィット

model.fit(y, params, 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
scipy.special.voigt_profile — SciPy v1.13.0 Manual

コメント