Python 我试图用scipy curve_fit将周期数据拟合到模板,但它没有';我找不到句号
我正试图写一个脚本,接收一颗潜在可变恒星的光度数据,并尝试将一个理论模板与之匹配,以确定它的几个特征,如周期和振幅 数据带有日期/时间(mjd,基本上是自公元前4713年1月1日以来的天数)和亮度(震级) 该模板是一个由相位和y值组成的数组,相位从t=0到t=0.998(增量为0.002),y在该期间从0到1再回到0 我的模型函数将拉伸和移动模板,使其具有与数据y值相同的峰间振幅和范围。我移动给定的t值,然后除以周期,得到相位方面的时间。我使用%1删除除小数以外的所有内容,因为我不关心数据来自哪个周期,只关心它位于哪个周期中。(ex 347.65->0.65) 这可以正确地找到t0、振幅和yoffset的值,但无法找到周期。如果我在初始猜测中给出了正确的周期(p0),那么这将成功地将模板与数据相匹配。但是,如果周期关闭,它将不会改变初始猜测的周期 我怀疑这是因为我如何折叠数据并切掉整数部分,但对曲线拟合函数了解不够,无法找到修复方法。我还尝试使用scipy的最小二乘函数(我知道curve_fit是它的包装器),但也无法让它工作 有什么更好的方法可以做到这一点呢?将在一段时间内“折叠”您的时间序列。然后,您可以将生成的折叠时间曲线拟合到正弦曲线(或任何模型),并查看哪个周期给出最佳结果 如果你不想随机尝试不同的时段,你可以对数据做一个简单的分析,然后寻找功率最高的时段。不过,我认为链接函数需要等间距的数据Python 我试图用scipy curve_fit将周期数据拟合到模板,但它没有';我找不到句号,python,scipy,scipy-optimize,astronomy,Python,Scipy,Scipy Optimize,Astronomy,我正试图写一个脚本,接收一颗潜在可变恒星的光度数据,并尝试将一个理论模板与之匹配,以确定它的几个特征,如周期和振幅 数据带有日期/时间(mjd,基本上是自公元前4713年1月1日以来的天数)和亮度(震级) 该模板是一个由相位和y值组成的数组,相位从t=0到t=0.998(增量为0.002),y在该期间从0到1再回到0 我的模型函数将拉伸和移动模板,使其具有与数据y值相同的峰间振幅和范围。我移动给定的t值,然后除以周期,得到相位方面的时间。我使用%1删除除小数以外的所有内容,因为我不关心数据来自哪
是一个很好的描述时间序列是如何处理造父变星的。一个玩具数据集可能会激励人们尝试一下。没有人希望重新创建您的数据格式,只是在事后被告知您的数据结构不同。
class tmpfitter:
def __init__ (self, templets)
self.n=0
self.tmps=templets
def model(self, t, period, t0, amplitude, yoffset):
# modify the template using peak-to-peak amplitude, yoffset
# shift times so phases line up, fold input times t by period
xtemp = self.tmps[self.n,:,0]
ytemp = self.tmps[self.n,:,1]*amplitude + yoffset
ph = (t - t0) / period % 1 #Folds data into single period
# interpolate the modified template at the phase we want
return interp1d(xtemp,ytemp)(ph)
def tmpfit(templets,data,pinit):
datfit = []
npars = []
fitter = tmpfitter(templets)
# Iterate through all templates, finding a best fit for each, find best fit of best fits at end.
for i in range(len(templets)):
fitter.n = i
pars, cov = curve_fit(fitter.model, data[:,0], data[:,1], sigma=data[:,2], p0=pinit, maxfev=10000)
datfit.append(median(abs(fitter.model(data[:,0],pars[0],pars[1],pars[2],pars[3])-data[:,1])))
npars.append(pars)
n = np.argmin(datfit)
return n, npars[n]