scipy (scipy.optimize.curve_fit) を使用して Python プログラムを作成しています。データセットに複数の曲線を当てはめ、それらを合計する必要があります。最初のステップは、すべての最大値を見つけることです。少なくとも 1 つはありますが、通常はそれ以上です。以下のようなものを一般化したいと思います。
if (len(Maxima) == 1):
f = lambda a, b, c : a * exp((b * x) + c)
else if (len(Maxima) == 2):
f = lambda a, b, c, d, e, f : (a * exp((b * x) + c)) + (d * exp((e * x) + f)
などなど。それが必要なので、curve_fit は (3 * Maxima) パラメータがあることを認識し、そこでそれらを見つけてくれます。最大 20 程度の曲線が存在する可能性があるため、上記のステートメントを実行することは実用的ではありません。
どんな助けでも大歓迎です。
ありがとう。
編集:申し訳ありませんが、関数が最大値に依存していることを見逃していました。実際には、各最大値に集中するガウス分布です。
つまり、用語は実際には
f = (a * (Gamma ** 2) / (((E - Maxima[i])**2) + (b**2)))
E は、args が開始しなければならない独立変数です。
たとえば、
len(Maxima) == 2
引数は、
E, a0, b0, Maxima[0], a1, b1, Maxima[1]
私の間違いで申し訳ありません。
編集2:
私はこのようなことを考えています:
GaussianDistribution = lambda E, E0, I0, Sigma : (I0 * np.exp(-(((E - E0) / Sigma)**2)))
args = tuple([long] * ((len(Maxima) * 3) + 1))
d1, d2 = sc.curve_fit(GaussianDistribution(*args), Data[:, 0], Data[:, 1])