私は物理プロセスを記述する関数Imaginary
を持っています。これをデータセットx_interpolate, y_interpolate
に適合させたいと思います。この関数はLorentzianピーク関数の形式であり、私はピーク検出アルゴリズムを使って見つけたf_peak
(ピーク位置)を除き、ユーザーが与えた初期値をいくつか持っています。オフセットを除くすべてのフィットパラメータは正であると予想され、したがって私はbounds_I
をそれに応じて設定しました。私はフィッティングプロセス中に固定パラメータf_peak
を維持したいいくつかの状況でcurve_fitの適合パラメータを固定する
def Imaginary(freq, alpha, res, Ms, off):
numerator = (2*alpha*freq*res**2)
denominator = (4*(alpha*res*freq)**2) + (res**2 - freq**2)**2
Im = Ms*(numerator/denominator) + off
return Im
pI = np.array([alpha_init, f_peak, Ms_init, 0])
bounds_I = ([0,0,0,0, -np.inf], [np.inf,np.inf,np.inf, np.inf])
poptI, pcovI = curve_fit(Imaginary, x_interpolate, y_interpolate, pI, bounds=bounds_I)
。これは多くの理由のためにこれを行うよりPython的な方法がある場合ので、私は思っていたこれを行うのではない最適な方法である
bounds_I = ([0,f_peak+0.001,0,0, -np.inf], [np.inf,f_peak-0.001,np.inf, np.inf])
:私はへbounds_I
を変更することにより、簡単な解決策を試してみましたか?あなたの助けをありがとう