拟合未知曲线

Kit*_*chi 10 c algorithm statistics curve-fitting

我遇到了一些相关的问题(比如这个,这个,这个这个),但它们都处理将数据拟合到已知曲线.有没有办法将给定数据拟合到未知曲线?我的意思是,给定一些数据,算法将给出一个拟合,即一个函数或一个函数的总和.我正在用C语言编程,但我完全不知道如何使用gsl包来完成这项工作.我愿意使用任何可以(理想情况下)通过C管道输送的东西.但是,对于我应该看哪个方向的任何帮助都将非常感激.

编辑:这基本上是我收集的实验(物理)数据,因此数据会有一些趋势由加性高斯分布噪声修改.一般来说趋势是非线性的,所以我猜一个线性回归拟合方法是不合适的.至于排序,数据是按时间排序的,因此曲线必须按此顺序排列.

ami*_*mit 9

您可能正在寻找数值分析领域的多项式插值.

在多项式插值中 - 给定一组点(x,y) - 您试图找到适合这些点的最佳多项式.一种方法是使用牛顿插值,这很容易编程.

特定领域的数值分析和插值领域得到了广泛的研究,您可能能够获得多项式误差的一个很好的上界.

但请注意,因为您正在寻找最适合您的数据的多项式,并且该函数实际上不是多项式 - 当您远离初始训练集时,错误的大小会消失.


另请注意,您的数据集是有限的,并且存在可以适合数据(精确或近似)的inifnite数(实际上,不可枚举的无穷大) - 所以这些中的哪一个最好可能是特定于您的实际上是在努力实现.

如果您正在寻找适合您数据的模型,请注意线性回归和多项式插值位于比例的两端:多项式插值可能是对模型的过度拟合,而线性回归可能不适合它,究竟应该是什么使用是特定于案例的,并且因应用程序而异.


简单多项式插值示例:

假设我们有(0,1),(1,2),(3,10)我们的数据.

我们使用newton方法得到的表1是:

0  | 1 |                 |
1  | 2 | (2-1)/(1-0)=1   |
3  | 9 | (10-2)/(3-1)=4  | (4-1)/(3-0)=1
Run Code Online (Sandbox Code Playgroud)

现在,我们得到的多项式是以最后一个元素结尾的"对角线":

1 + 1*(x-0) + 1*(x-0)(x-1) = 1 + x + x^2 - x = x^2 +1 
Run Code Online (Sandbox Code Playgroud)

(这与我们使用的数据完全吻合)


(1)递归创建表:前两列是x,y值 - 每个下一列基于前一列.一旦你得到它就很容易实现,完整的解释是在维基百科页面中进行牛顿插值.