【发布时间】:2012-07-05 09:48:25
【问题描述】:
我需要以相当间接的方式拟合数据。要在拟合中恢复的原始数据是一些线性函数,上面有小的振荡和漂移,我想识别它。我们称之为 f(t)。我们不能在实验中直接记录这个参数,只能间接记录,比如 g(f) = sin(a f(t))。 (真正的传递函数比较复杂,但在这里应该不起作用)
因此,如果 f(t) 向 sin 函数的转折点改变方向,则很难识别,我尝试了一种替代方法来恢复 f(t),而不仅仅是 g 的反函数和一些数据继续猜测:
我创建了一个模型函数 fm(t),它经历相同且已知的传递函数 g() 并将 g(fm(t)) 拟合到数据。由于数据集很大,我对连续的数据块进行分段处理,以保证 fm 在整个数据集中的连续性。
第一次尝试是使用使用 optimize.leastsq 的线性函数,其中误差估计来自 g(fm)。这并不完全令人满意,我认为最好将样条拟合到数据中以获得 fspline(t) 作为 f(t) 的模型,从而保证数据及其导数的连续性。
它的问题是,插值包中的样条拟合直接作用于数据,所以我不能使用 g(fspline) 包装样条并对此进行样条插值。有没有办法在 scipy 中做到这一点?
还有其他想法吗?
我尝试了二次函数并修复了偏移量和斜率,以匹配前面拟合的数据块,所以只有一个拟合参数,曲率,它很快就会开始偏离
谢谢
【问题讨论】:
标签: scipy curve-fitting spline