我正在用Python编写一个程序,它将高斯和洛伦兹的形状与某些给定的共振数据相匹配.我最初开始使用scipy.optimize.leastsq但是optimize.curve_fit在从协方差矩阵中检索优化参数中的错误之后变得难以使用.
我已经定义了一个函数来拟合Gaussian和Lorentzian的和:
def mix(x,*p):
ng = numg
p1 = p[:3*ng]
p2 = p[3*ng:]
a = sumarray(gaussian(x,p1),lorentzian(x,p2))
return a
Run Code Online (Sandbox Code Playgroud)
其中p是拟合参数的初始猜测数组.以下是使用curve_fit以下方法调用它的实例:
leastsq,covar = opt.curve_fit(mix,energy,intensity,inputtot)
Run Code Online (Sandbox Code Playgroud)
目前numg(高斯形状的数量)是一个全局变量.有没有什么方法可以将它curve_fit作为一个额外的参数纳入,就像可以做到的那样leastsq?
我有一些数据想要使用二阶、三阶或四阶傅立叶级数进行拟合。
虽然关于堆栈溢出的这个问题和答案接近我想要使用 scipy 做的事情,但他们已经将系数预先定义为 tau = 0.045 。我希望我的拟合能够找到具有 95% 置信区间的可能系数(a0、w1、w2、w3 等),就像傅里叶级数的MATLAB 曲线拟合等效项一样。我看到的另一个选项是使用sympy 中的 fourier_series,但是该函数仅适用于适合定义函数的符号参数,而不适用于原始数据。
1)有没有办法让 sympy fourier_series 接受原始数据而不是函数或使用该库的其他解决方法?
2)或者考虑到存在多个未知数(系数),对数据进行 scipy 曲线拟合