python
from pylab import *from scipy.optimize import curve_fit import pandas as pd import matplotlib.pyplot as plt import numpy as np #csvファイルの読み込みdata = pd.read_csv("C:/Users/rine/Desktop/CR-39_analysis/TD531/back/Minor.csv") #histの条件 alphaはグラフの透明性y,x,_ = plt.hist(data,bins=[i*0.48 for i in range(100)],alpha=.3,label='data',ec='black')plt.xlim(0,48)#plt.ylim(0,400) x = (x[1:]+x[:-1])/2 # for len(x)==len(y) def gauss(x,mu,sigma,A): return A*np.exp(-(x-mu)**2/(2*sigma**2)) def bimodal(x,mu1,sigma1,A1,mu2,sigma2,A2,mu3,sigma3,A3,mu4,sigma4,A4): return gauss(x,mu1,sigma1,A1)+gauss(x,mu2,sigma2,A2)+gauss(x,mu3,sigma3,A3)+gauss(x,mu4,sigma4,A4) expected = (13.7,2.87,87, 22.4,1.43,102, 28.5,1.41,367, 33.3,0.48,12000)params,cov = curve_fit(bimodal,x,y,expected)sigma = sqrt(diag(cov))plt.plot(x, bimodal(x,*params), color='red', lw=3, label='fitting')plt.legend()plt.show()print(params,'\n',sigma) w = np.ones(len(x))w[52:60] = 0.25 # 重みの設定(数値を小さく)params, cov = curve_fit(bimodal, x, y, expected, sigma = w) #print(x[52:60])#重みをかける位置の確認y,x,_ = plt.hist(data,bins=[i*0.48 for i in range(100)],alpha=.3,label='data',ec='black')plt.xlim(0,48)#plt.ylim(0,400)#plt.ylim(8000,12000) plt.plot(x, bimodal(x,*params), color='black', lw = 3, label = 'fitting')plt.show()print(params, '\n', sigma)

0 コメント