插值、拟合、线性和非线性的区别

插值、拟合、线性和非线性的区别

 

从一组实验数据Qixy)怎样得到他们的所代表的函数(曲线)f(x)呢?拟合(fitting)就是做这个工作的。当然插值也可以做些粗燥的未知值的求取。但它们有区别。

一、“插值”与“拟合”区别

1. 插值:曲线过用来插值的所有点。以 2点确定一条直线(一次多项式)三点确定一条抛物线(二次多项式)10个点就可以确定一个9次多项式(9次多项式里面还有一个常数项,就是10个未知数,我们有10个数据点,刚好可以求解)为原则,除了求解参数,必要的方程数(点的个数)外,其他的都是多余的,没有利用上。为了避免龙格(Runge)现象,一般在给定的nn>8)个点中选择8个点进行插值(7次多项式)《常用算法程序集》--徐士良p192   当然 样条插值不同,它利用了全部采样点得到具有整体曲线二阶光滑的分段函数表达式。

2. 拟合:利用一个函数来逼近所给的这一组实验数据Qixy)得所有点。也就是用所有点来选取函数f(x)的一组参数,使得函数f(x)曲线最逼近所有点。常用最小二乘原则,当然也可以契比雪夫原则,见《数值计算方法》--冯康p148

二、线性拟合与非线性拟合

 

1. 拟合的线性与非线性的区别不是在于将被拟合的函数是线性还是非线性的,而是在于,是否满足一般表达式:

        y = b0+ b1x1+ b2x2 +… + bmxm     也即: y = b0x0+ b1x1+ b2x2 +… + bmxm   (1)

所以,一般的多项式拟合y=b0 + b1 x+ b2x2 +… + bmxm 可以通过变量代换如:x1=x,x2=x2,…, xm = x变成(1)的形式,仍然用“线性拟合”实现。

一定要注意,本文所说的线性与非线性,指的是待拟合的各个参数线性组合还是非线性组合,而不是函数解析式中自变量的线性/非线性组合。

2. 插值的线性和非线性一般只函数的形式 是否 为直线方程f(x) = ax + b. 如:一般的二次多项式f(x) = c + bx + ax2 插值,是属于“非线性插值”。

三、线性拟合与非线性拟合的方法

方法:1)确定表达式的形式(观察或者用数学方法《数值计算方法》--冯康

2)确定表达式中参数(实质:解矛盾方程组)

A.最小二乘意义下

a) 线性最小二乘拟合:把矛盾方程组 转化为“法方程组(有唯一解)”,就可以用一般方法求解,如SVD。

b)非线性最小二乘拟合:Levenberg Marquardt 方法 (gnuplot 和gsl中都有)。

B.非最小二乘意义下: 如:契比雪夫曲线拟合。

 

http://www.bb.ustc.edu.cn/jpkc/xiaoji/szjsff/jsffkj/chapt3_3_0_p2.htm

*点评:  在实际问题中,怎样由测量的数据设计和确定“最贴近”的拟合曲线? 关键在于选择适当的拟合曲线类型,有时根据专业知识和工作经验即可确定拟合曲线类型; 在对拟合曲线一无所知的情况下,不妨先绘制数据的粗略图形,或许从中观测出拟合曲线的类型; 更一般地,对数据进行多种曲线类型的拟合(如:用gnuplot手动拟合确定初始值),并计算均方误差,用数学实验的方法找出在最小二乘法意义下的误差最小的拟合函数。

 

 

拟合方法与目标:

大致有三种方法可以解决上面图中所示数据的直线与曲线的拟合问题。

第一种方法是非编程方法,即利用一些数据可视化工具读入数据,然后拟合,最后给出可视化的结果。本文使用的工具是Gnuplot

第二种方法是半编程方法,即调用现有的数值分析程序库中的黑箱函数完成数据拟合,然后给出拟合直线的参数、误差估计以及拟合优度。本文使用的程序库是GSL

第三种方法是全编程方法,即空手入白刃,在充分理解拟合原理的情况下,自己写出所有的代码来解决问题。这种做法,精神可嘉,但在一般情况下,特别是在第二种方法容易实现的情况下,不推荐这种做法。当然,理解拟合原理是非常有意义的。

感觉一篇文章中是很难将上述三种方法都讲述出来,况且此刻我对第三种方法还未有清晰的认识,所以暂时掘之为坑,只关注前两种方法。或许这样想会让我们轻松一下,不会炒菜,不意味不会品尝。

对于一组数据,无论是作直线/平面拟合,还是做曲线/曲面拟合,一个真正有用的拟合过程必须提供:(1)拟合的参数(2)拟合所得参数的误差估计(3)拟合优度的统计度量

如果上述 (3) 中的结果表明了所拟合的模型与数据不一致,那么 (1) (2)中的结果通常没有多少意义。所以我们在使用既有的如 GnuplotGSL 这些工具或程序库进行数据拟合时,必须要对拟合优度有量化上的认识,而不能仅靠肉眼对拟合优度的定性观察。

Gnuplot非常懒惰,它将线性最小二乘问题视为非线性最小二乘问题的特殊形式,所以它选择了一种更通用的拟合算法——用这种算法去拟合直线,宛若宰牛刀杀鸡。

来至于很好的一篇blog

http://rca.is-programmer.com/2013/1/2/modeling-of-data-00.36899.html

 

 

你可能感兴趣的:(Algorithm和原理)