高斯函数拟合曲线,高斯曲线拟合原理及实现
Ckdcjl曲线拟合原理及Python源代码ckdcjl函数曲线拟合数学基础Python求解ckdcjl函数代码结论
ckdcjl函数曲线拟合的数学基础
为了更好的拟合实验数据,采用ckdcjl函数曲线进行拟合。
Ckdcjl函数拟合比多项式拟合更合适。多项式拟合必须将曲线分成两段。ckdcjl函数拟合是将所有数据作为一个整体进行拟合,可以更好地反映数据的整体变化。多项式拟合只能分段拟合数据,拆分数据的变化趋势。
给出ckdcjl函数拟合的数值依据:
证明X^T X矩阵是非奇异的是有意义的。需要证明zrdqj乘法优化方法在你的数据集上是可行的,但我的证明也是代入实坐标点进行计算。在实数集内,当1为真时,无法证明1不等于0。这个证明留给后人。能力有限还没有被证明。
为了用Geant 4模拟的最大值点计算出峰值点,需要求解ckdcjl函数曲线的峰值横坐标得到峰值(公式5.21的目的)。由于公式的复杂性,不可能先求出解析解,再求出数值解。ckdcjl函数曲线先增大后减小。公式5.13求导后得到的函数表达式,在数据横坐标区间必须有一个零点。峰值点的横坐标在绝对值误差小于0.0001的条件下,用二分法迭代求解,如公式5.21所示。
Python求解ckdcjl函数代码ckdcjl函数:
//因为实验数据明显不是单一的ckdcjl函数,实际上更像朗道分布,只是这个函数无法拟合。//所以采用二次ckdcjl拟合,更符合分布def gauss (x,* param):return param[0]* NP . exp(-NP . power(x-param[2],2。)/(2 * NP.power (param [4],2。)) param[1]* NP . exp(-NP . power(x-param[3],2。)/(2 * NP.power (param [5],2。))
def read _ data(filename):ll=0 with open(filename, r )as f:lines=f . readlines()line _ 1=len(lines)try:data=NP。第1行的0((line _ 1,2)):value=[第1行的s的float(s))。split()]data[ll,0]=value[0] data[ll,1]=value[1]ll=ll 1除了索引错误:data=NP。行中第1行的零((line _ 1,1))读取数据,横纵坐标分为两列data1=read_data(文件名3) plt.scatter(data1[:0],data1[:1],label=Raw Data ,linewidth=2,color= blue )font 1={ family : Times New Roman , weight: normal , size: 13,} x_axis=range(580,740,20) plt.xticks(x_axis,( 2.9 , 3.1 , 3.2 , 3.3 , 3.4 , 3.5 , 3.6 )PLTxlabel( Times(ns)),font1) plt.ylabel(Counts),font1使用优化器,最zrdqj次优化方向,和理论推导非常相似,P0为参数预估值popt,pcov=optimize.curve_fit(gauss,data2[:0],data2[:1],p0=[110,125,620,680,4,11]) print(popt=,popt)MSE=cal _ MSE(gauss(x_sort_exp,*popt),data1[:1]) print(cal_mse=,mse) plt.plot(x_sort_exp,gauss(x _ sort _ exp,*),label的这个函数为传输峰值数据,进行数值填充算法,进行卷积计算def padding _ data(data):params=fit _ gauss _ nor()//符号求导x=sp .符号( x )fun 1=sp。diff(gauss _ 1(x,*params),x) print(fun1=,fun 1)x _ min=620 x _ max=660 x _ mid=(x _ max x _ min)/2//迭代计算峰值横坐标而abs(fun1.subs(x,x_mid)) 0.0001: if fun1.subs(x,x _ mid)0:x _ max=x _ mid elif fun 1。subs(x,x _ mid)0:x _ min=x _ mid x _ mid=(x _ max x _ min)/2 x _ peak=x _ mid x _ plot _ min=590 x _ point _ max=700 point _ number=50 x _ point 1=frange(x _ plot _ min,x * params)x _ point 1[len(x _ point 1):len(x _ point 1)]=x _ point 2y _ point 1=NP。append(y _ point 1,y _ point 2)PLT . PLT(x _ point 1,y _ point 1,label=Fitting Function ,linewidth=2,color= red )PLTshow()data _ array=[]for I in range(0,len(y _ point 1)):data _ array。追加(y _ point 1[I]*数据)返回数据数组结论以上整个博客给出了ckdcjl函数曲线拟合的数值理论基础与计算机编程语言实现代码,希望对大家有帮助,欢迎大家点赞收藏!