2015-03-25 185 views
0

我試圖在scipy中使用curve_fit函數來擬合一系列洛倫茲曲線到一系列的峯值。 目前有關我的問題的代碼是:scipy曲線擬合不合適洛倫茲

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: operands could not be broadcast together with shapes (0) (26) when using optimize.curve

然而,我的線在那裏我明確地保證我的擴展數據和YDATA都是numpy的陣列增加了,所以這不能是同一個問題。

有沒有人在這裏遇到過這個問題,並能解決它? 如果是這樣,怎麼樣?

感謝您的任何見解。

回答

0

沒關係,我的initialGuess數組是錯誤的。 意外地以maximum_point_index作爲整數數組而不是整數,因此給出了比參數更多的初始參數估計值。