나는 성공적으로 scipy에서 곡선 맞춤을 사용하여 가우스 피팅을 구현하는 믿습니다. 하지만 내가 겪고있는 문제는 최적화가 매개 변수가 중심을 변경하기 때문에 적합성이 그리 좋지 않다는 것입니다.*** 사용하여 가우스 피팅 향상 *** scipy 및 python 3.x
data =np.loadtxt('mock.txt')
my_x=data[:,0]
my_y=data[:,1]
def gauss(x,mu,sigma,A):
return A*np.exp(-(x-mu)**2/2/sigma**2)
def trimodal_gauss(x,mu1,sigma1,A1,mu2,sigma2,A2,mu3,sigma3,A3):
return gauss(x,mu1,sigma1,A1)+gauss(x,mu2,sigma2,A2)+gauss(x,mu3,sigma3,A3)
"""""
Gaussian fitting parameters recognized in each file
"""""
first_centroid=(10180.4*2+9)/9
second_centroid=(10180.4*2+(58.6934*1)+7)/9
third_centroid=(10180.4*2+(58.6934*2)+5)/9
centroid=[]
centroid+=(first_centroid,second_centroid,third_centroid)
apparent_resolving_power=1200
sigma=[]
for i in range(len(centroid)):
sigma.append(centroid[i]/((apparent_resolving_power)*2.355))
height=[1,1,1]
p=[]
p = np.array([list(t) for t in zip(centroid, sigma, height)]).flatten()
popt, pcov = curve_fit(trimodal_gauss,my_x,my_y,p0=p)
내가 거기 피크의 많은 현재 위치하지만 난 정말 세 개의 가우시안에 맞게 할 필요가 있지만, 올바른 중심에서 (내 초기 추측에 주어진)을 이해합니다. 다른 말로 표현하자면, 내가주는 중심이 변하지 않기를 바란다. 누구도 그러한 도전을 경험 했습니까? 그 일이 가능하도록 내가 도와 줄 수 있겠 니?
, 당신이 더 정확한 숫자를 맞는 것 같다 (적어도 5, 어쩌면 6)의 3 가지 결과 만 가져옵니다. 피팅하지 않은 봉우리가 관심있는 세 가지 봉우리의 결과에 영향을 미치기 때문에 현재의 접근 방식은 좋지 않습니다. 추가 재료가 3 개의 봉우리의 일부라고 생각할 것입니다. 귀하의 의견에 – NichtJens