lmfit にはビルトイン (組み込み) 関数が多数用意されている。関数名を見ればだいたい何か分かるが、グラフで見れたほうが便利なので、主要な1次元の内蔵関数をグラフ化してみた
グラフ化のための関数は最後に書いてあります
正規分布 / ガウス分布 / ガウシアン lmfit.models.GaussianModel()
plot_model(lmfit.models.GaussianModel(), 'sigma', [0.5,1.0,2.0])
コーシー分布/ ローレンツ分布/ ブライト・ウィグナー分布 lmfit.models.LorentzianModel()
plot_model(lmfit.models.LorentzianModel(), 'sigma', [0.5,1.0,2.0])
対数正規分布 lmfit.models.LognormalModel()
x>0で定義できる。
plot_model(lmfit.models.LognormalModel(), 'sigma', [0.2,0.5,1.0])
歪曲を含む左右非対称な正規分布 lmfit.models.SkewedGaussianModel()
。非対称性を評価する「歪み/歪度」の項である gamma
を含んだ正規分布。gammaが正だと右側(正側)にテールを引く、負だと左側(負側)。
plot_model(lmfit.models.SkewedGaussianModel(), 'gamma', [-2.0,0,2.0])
定数 / コンスタント lmfit.models.ConstantModel()
plot_model(lmfit.models.ConstantModel(), 'c', [2.0,0,-2.0])
線形分布 / 1次関数 / リニア関数 lmfit.models.LinearModel()
slope * x + intercept
plot_model(lmfit.models.LinearModel(), 'slope', [-2.0,0,2.0])
放物線 / 二次関数 lmfit.models.QuadraticModel()
plot_model(lmfit.models.QuadraticModel(), 'a', [2.0,0,-2.0])
正弦波 / 正弦曲線 / シヌソイド lmfit.models.SineModel()
plot_model(lmfit.models.SineModel(), 'frequency', ["2*np.pi/5","2*np.pi/10","2*np.pi/20",])
ステップ関数 lmfit.models.StepModel()
formはいくつかある。この例では erf
plot_model(lmfit.models.StepModel(form='erf'), 'sigma', [0,1.0,5.0])
指数関数 / エクスポネンシャル lmfit.models.ExponentialModel()
plot_model(lmfit.models.ExponentialModel(), 'decay', ["1.0/np.log(2)","2.0/np.log(2)","5.0/np.log(2)"], xrange=[0,10])
べき乗 / 累乗関数 lmfit.models.PowerLawModel()
plot_model(lmfit.models.PowerLawModel(), 'exponent', [-1,0.2,1,2], xrange=[0,2], yrange=[0,4])
import lmfit import matplotlib.pyplot as plt import numpy as np def plot_model(model, parameter, values, xrange = [-10,10], yrange = None): xx = np.linspace(*xrange,1000) for val in values: params = model.make_params() params[parameter].value= eval(val) if type(val) is str else val yy = model.eval(params, x=xx) if type(yy) is not np.ndarray: yy = [yy] * len(xx) plt.plot(xx, yy, label=f'{parameter}={val}') plt.ylim(yrange) plt.legend() plt.title(str(model)) plt.grid(alpha=0.3) plt.savefig("lmfit_model_"+str(model).split('(')[1].split(')')[0]+".png",dpi=300) plt.show()
よく使うモデルは以下のようにしておくと便利
# from lmfit.models import GaussianModel, LorentzianModel, LognormalModel, SkewedGaussianModel # from lmfit.models import ConstantModel, LinearModel, QuadraticModel # from lmfit.models import SineModel, StepModel # from lmfit.models import ExponentialModel, PowerLawModel