Matematik bilgim sınırlıdır, bu yüzden muhtemelen sıkışmış durumdayım. İki Gauss zirvesine uymaya çalıştığım bir spektrumum var. En büyük zirveye uyabilirim, ama en küçük zirveye sığamam. Anladığım kadarıyla, iki zirve için Gauss işlevini toplamalıyım ama nerede yanlış gittiğimi bilmiyorum. benim şimdiki çıkışı bir görüntüsü gösterilmiştir:Python: doğrusal olmayan en küçük kareler ile iki eğri Gauss uydurma
mavi çizgi verilerim ve yeşil hat benim şimdiki seçimdir. Şu anda aşağıdaki kodu kullanarak, sığdırıyorum benim verilerindeki ana zirvenin solunda bir omuz vardır: Bu kod bana sadece bir fonksiyonu uydurma gösterilmesi koşulu çalıştı
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()
Bu durumda, bu iki tepe noktasının birbirine çok yakın olması nedeniyle, bu durum oldukça zor olacaktır - daha küçük 'gauss'lar için kesin bir zirve yoktur. Tipik olarak bir kişi (bence) ilgilenilen tüm zirveleri tanımlar, ardından her pikte diğer tüm zirveleri maskeleyerek ve her bir zirveye uydurur. Toplam uyum o zaman bütün bu uyuşmaların toplamıdır. Yapmanız gereken gibi görünen şey, büyük zirveyi tanımlamak ve kapsamıdır ve daha sonra, daha küçük olan – Chris