如何在python和scipy中适应这些数据?
我有如下所示的一些函数,即一些锥形/衰减振荡 我想使用。我之前问过一个与scipy拟合函数相关的问题,并强调了拟合参数值初始猜测的重要性 然而,我正在努力适应一种既能捕捉振荡又能捕捉衰减的方式。我的做法如下:如何在python和scipy中适应这些数据?,python,scipy,curve-fitting,scipy-optimize,Python,Scipy,Curve Fitting,Scipy Optimize,我有如下所示的一些函数,即一些锥形/衰减振荡 我想使用。我之前问过一个与scipy拟合函数相关的问题,并强调了拟合参数值初始猜测的重要性 然而,我正在努力适应一种既能捕捉振荡又能捕捉衰减的方式。我的做法如下: from scipy.optimize import curve_fit import numpy as np def Fit(x,y): #Define the function fit func = ansatz #Define the initia
from scipy.optimize import curve_fit
import numpy as np
def Fit(x,y):
#Define the function fit
func = ansatz
#Define the initial guess of parameters
mag = (y.max() + y.min()) / 2
y_shifted = y - mag
omega_guess = np.pi * np.sum(y_shifted[:-1] * y_shifted[1:] < 0) / (x.max() - x.min())
lam = np.log(2) / 1e7 #Rough guess based on approximate half life
p0 = (mag,mag, omega_guess,mag,lam)
#Do the fit
popt, pcov = curve_fit(func, x,y,p0=p0)
# return
return func(x, *popt)
def ansatz(x,A,B,omega,offset,lam):
osc = A*np.sin(omega*x) + B*np.cos(omega*x)
linear = offset
decay = np.exp(-x*lam)
return decay*osc + linear
data = np.load('example.npy')
x = data[:,0]
y = data[:,1]
yFit = Fit(x,y)
来自scipy.optimize import curve\u fit的
将numpy作为np导入
def配合(x,y):
#定义函数拟合
func=ansatz
#定义参数的初始猜测
磁极=(y.max()+y.min())/2
y_移位=y-mag
omega_guess=np.pi*np.sum(y_移位[:-1]*y_移位[1::<0)/(x.max()-x.min())
lam=np.log(2)/1e7#基于近似半衰期的粗略猜测
p0=(mag,mag,omega_猜,mag,lam)
#合身
popt,pcov=曲线拟合(func,x,y,p0=p0)
#返回
返回函数(x,*popt)
def ansatz(x,A,B,ω,偏移量,lam):
osc=A*np.sin(ω*x)+B*np.cos(ω*x)
线性=偏移
衰减=np.exp(-x*lam)
返回衰减*osc+线性
data=np.load('example.npy')
x=数据[:,0]
y=数据[:,1]
yFit=配合(x,y)
这种方法捕捉衰减,但不捕捉振荡。我的方法有什么错误?猜测拟合参数?安萨茨函数?代码实现 你可以让succeive fit找到一个好的初始猜测。首先拟合偏移量,然后去除它,然后拟合指数并去除它,然后只拟合振荡。你可以通过成功拟合来找到初始值,这是一个很好的初始猜测。首先拟合偏移量,然后删除它,然后拟合指数并删除它,然后只拟合振荡。