首页 > 编程知识 正文

python高斯函数拟合,python拟合曲线求方程

时间:2023-05-05 22:11:24 阅读:230288 作者:840

Python实现lhdct曲线拟合
1.目的
针对光谱离散数据,寻峰完成后截取near峰值的数据,利用lhdct拟合重绘单峰曲线,进而实现分峰功能

2.原理


3.代码

import numpy as npfrom math import log, expimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fitfrom scipy import asarray as ar,exp # 将txt文件读入numpy数组yOriginal = np.loadtxt('C:\工作数据.txt')#一维数据#yOriginal = np.array([5.81528E-05, 0.000111682, 0.000271214, 0.000391546, 0.000786933, 0.002034528, 0.002968284, 0.005004177, 0.007329225, 0.011119662, 0.017025547, 0.02488255, 0.04219861, 0.040429801, 0.035320014, 0.05154864, 0.06894745, # 0.105841984, 0.083166325, 0.110311517, 0.055681743, 0.093540639, 0.066621081, 0.056688568, 0.045128754, 0.045911571, 0.028179728, 0.021262112, 0.018781554, 0.008240159, 0.008562607, 0.004372914, 0.002847578, 0.001717186, 0.001081616])xOriginal = np.arange(len(yOriginal))print("输入数据n", yOriginal)average = sum(yOriginal)/len(yOriginal) #y = yOriginal#x = xOriginal #print("过滤数据n", y) y = np.log(y)zMatrix = np.matrix(y)print("取对数n", y) # 构造 X 矩阵 xMatrixT = np.matrix(np.reshape(np.concatenate( (np.ones((len(y))), x, x*x)), (3, len(y))))xMatrix = np.matrix(xMatrixT.T)print("X 矩阵n", xMatrix) #np.matrix.__mul__ = np.dot # 重载运算符print(xMatrixT*xMatrix)bMatrix = ((xMatrixT*xMatrix).I*xMatrixT)*zMatrix.T#矩阵运算print("B 矩阵n", bMatrix) b2, b1, b0 = float(bMatrix[2][0]), float(bMatrix[1][0]), float(bMatrix[0][0])print("b0={}b1={}b2={}".format(b0, b1, b2))s = -1/b2xMaxi = s*b1/2yMaxi = exp(b0+xMaxi**2/s)print(yMaxi, xMaxi, s)def gaussian(x,*param): return param[0]*np.exp(-np.power(x - param[1], 2.) / (2 * np.power(param[2], 2.)))#lhdct公式popt,pcov = curve_fit(gaussian,xOriginal,yOriginal,p0=[yMaxi,xMaxi,s])print(popt)print(pcov) plt.plot(xOriginal,yOriginal,'b+:',label='data')plt.plot(xOriginal,gaussian(xOriginal,*popt),'ro:',label='fit')#绘图plt.legend()plt.show()

4.效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。