繁体   English   中英

scipy曲线拟合未拟合洛伦兹

[英]scipy curve fit failing to fit Lorentzian

我试图在scipy中使用curve_fit函数将一系列洛伦兹曲线拟合为一系列峰。 当前与我的问题有关的代码是:

def fit_a_Lorentzian_peak(wavenumber_position,amplitude,peak_center,linewidth):
    x =  ( wavenumber_position - peak_center)/ (linewidth/2.0)     
    return amplitude/( 1.0 + x**2)


Xdata, Ydata= numpy.loadtxt(....) 
Xdata= numpy.array(Xdata) 
Ydata= numpy.array(Ydata)

initialGuess = [Ydata[maximum_point_index], Xdata[maximum_point_index], 2.0] 

fitting_parameters, covarance_matrix_of_fitting_parameters  = curve_fit(fit_a_Lorentzian_peak, Xdata[data_range_to_fit_to_lower:data_range_to_fit_to_upper],Ydata[data_range_to_fit_to_lower:data_range_to_fit_to_upper],p0=initialGuess)

我已经省略了获取data_range_to_fit_to_lower:data_range_to_fit_to_upper的代码,因为它与发生的错误无关。

发生的错误如下:

 File "D:\Python\Python27\lib\site-packages\scipy\optimize\minpack.py", line 515, in curve_fit
    res = leastsq(func, p0, args=args, full_output=1, **kw)
  File "D:\Python\Python27\lib\site-packages\scipy\optimize\minpack.py", line 354, in leastsq
    shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
  File "D:\Python\Python27\lib\site-packages\scipy\optimize\minpack.py", line 17, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
  File "D:\Python\Python27\lib\site-packages\scipy\optimize\minpack.py", line 427, in _general_function
    return function(xdata, *params) - ydata
  File "D:\DropBox\Dropbox\PhD\Time resolved spectroscopy data\utility\transmission_plotting_and_analysis_V_09.py", line 38, in fit_a_Lorentzian_peak
    x =  ( wavenumber_position - peak_center)/ (linewidth/2.0)     
ValueError: operands could not be broadcast together with shapes (73757) (10332) 

现在我确切地知道问题出在哪里,但我完全不知道为什么会发生或如何解决。 为什么我的拟合函数需要使用curve_fit进给参数和大小不同的自变量数组?

现在,我已经确定其他人起初似乎是这个问题: ValueError:使用optimize.curve时,操作数不能与形状(0)(26)一起广播

但是,我在添加的行中明确确保了我的Xdata和Ydata都是numpy数组,因此这不可能是同一个问题。

这里有没有人遇到过这个问题并能够解决? 如果是这样,怎么办?

感谢您的见解。

没关系,我的initialGuess数组是错误的。 意外地将max_point_index作为整数数组而不是整数进行馈入,因此给出的初始参数估计要比参数多得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM