गणित का मेरा ज्ञान सीमित है इसलिए मैं शायद अटक गया हूं। मेरे पास एक स्पेक्ट्रा है जिसमें मैं दो गाऊसी चोटियों को फिट करने की कोशिश कर रहा हूं। मैं सबसे बड़ी चोटी पर फिट हो सकता हूं, लेकिन मैं सबसे छोटी चोटी पर फिट नहीं हो सकता। मैं समझता हूं कि मुझे दो चोटियों के लिए गॉसियन फ़ंक्शन को जोड़ना होगा, लेकिन मुझे नहीं पता कि मैं कहां गलत हो गया हूं। मेरे वर्तमान उत्पादन की एक छवि दिखाया गया है:पायथन: गैर-रैखिक कम-वर्गों के साथ दो-वक्र गाऊशियन फिटिंग
नीली रेखा अपने डेटा है और हरे रंग की लाइन मेरे वर्तमान फिट है। मेरे डेटा में मुख्य शिखर के बाईं ओर एक कंधे जो मैं वर्तमान में निम्नलिखित कोड का उपयोग कर, फिट करने के लिए कोशिश कर रहा हूँ है:
import matplotlib.pyplot as pt
import numpy as np
from scipy.optimize import leastsq
from pylab import *
time = []
counts = []
for i in open('/some/folder/to/file.txt', 'r'):
segs = i.split()
time.append(float(segs[0]))
counts.append(segs[1])
time_array = arange(len(time), dtype=float)
counts_array = arange(len(counts))
time_array[0:] = time
counts_array[0:] = counts
def model(time_array0, coeffs0):
a = coeffs0[0] + coeffs0[1] * np.exp(- ((time_array0-coeffs0[2])/coeffs0[3])**2)
b = coeffs0[4] + coeffs0[5] * np.exp(- ((time_array0-coeffs0[6])/coeffs0[7])**2)
c = a+b
return c
def residuals(coeffs, counts_array, time_array):
return counts_array - model(time_array, coeffs)
# 0 = baseline, 1 = amplitude, 2 = centre, 3 = width
peak1 = np.array([0,6337,16.2,4.47,0,2300,13.5,2], dtype=float)
#peak2 = np.array([0,2300,13.5,2], dtype=float)
x, flag = leastsq(residuals, peak1, args=(counts_array, time_array))
#z, flag = leastsq(residuals, peak2, args=(counts_array, time_array))
plt.plot(time_array, counts_array)
plt.plot(time_array, model(time_array, x), color = 'g')
#plt.plot(time_array, model(time_array, z), color = 'r')
plt.show()
इस मामले में यह काफी मुश्किल होगा, क्योंकि दो चोटियों के साथ मिलकर करीब हैं - छोटे 'गाऊशियन' के लिए एक निश्चित शिखर नहीं है। आम तौर पर एक (मुझे लगता है) ब्याज के सभी चोटियों की पहचान करेगा, फिर प्रत्येक चोटी पर सभी चोटी के मुखौटा और प्रत्येक चोटी को फिट करने के लिए फिर से शुरू करें। कुल फिट तब इन सभी फिट बैठता है। ऐसा लगता है कि आपको ऐसा करने की ज़रूरत है, यह बड़ी चोटी और इसकी सीमा की पहचान है और उसके बाद मास्क कि छोटे चोटी – Chris