私は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)
私はピークの多くがここにあることを理解し、私は本当にそれだけで3ガウス分布にフィットする必要があるが、右重心で(私の最初の推測で与えられます)。言い換えれば、私が与える重心が変わらないことを本当に望んでいない。誰もそのような挑戦に遭遇しましたか?それを実現させるためにできることを私に助けてくれますか?
、あなたがより良い、正しい番号に合うだろうと思われますピーク(少なくとも5、おそらく6)のうち、あなたが実際に気にかけている3つの結果だけを取ります。あなたが気にしていないピークが気になる3つのピークの結果に影響を与えるため、あなたの現在のアプローチは悪い仕事をします。それは、追加のものが3つのピークの一部であると「考える」。あなたのコメントのために – NichtJens