【发布时间】:2017-12-21 12:18:16
【问题描述】:
我有一个函数Imaginary,它描述了一个物理过程,我想将它拟合到一个数据集x_interpolate, y_interpolate。该函数是洛伦兹峰值函数的一种形式,我有一些用户给定的初始值,除了f_peak(峰值位置),我使用峰值查找算法找到。除偏移量外,所有拟合参数都应为正值,因此我已相应地设置了bounds_I。
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)
在某些情况下,我想在拟合过程中保持参数f_peak 不变。我尝试了一个简单的解决方案,将bounds_I 更改为:
bounds_I = ([0,f_peak+0.001,0,0, -np.inf], [np.inf,f_peak-0.001,np.inf, np.inf])
由于许多原因,这不是最佳的执行方式,所以我想知道是否有更 Pythonic 的方式来执行此操作?谢谢你的帮助
【问题讨论】:
标签: python scipy curve-fitting