插值,拟合和代码实现

用某个简单函数在满足 定条件下在某个范围内近似代替另一个较为复杂或者解析表达式未给出的函数,以便于简化对后者的各种计算或揭示后者的某些性质。在数学上称为逼近。
可分为
1. 数学函数的逼近问题,特点是(1)要求是高精度逼近 要求是高精度逼近; (2)要快速计算(计算量越小越好 计算量越小越好)
2. 建立实验数据的数学模型,特点是(1)只要求适度的精度; (2)尽可能表现数据的趋势。
举个栗子:最小二乘意义下的拟合,是要求拟合函数与原始数据的均方误差达到极小,是一种整体意义的逼近,对局部性质没有要求。解决的是预测实验数据的整体趋势的问题。
而所谓“插值”,就是要在原有离散数据之间“插入”一些值,这就要求插值函数必须通过所有的离散点,插值函数在离散点之外的那些点都相当于“插入”的值。插值有全局插值,也有局部插值(比如分段线性插值),插值误差通常考虑的是逐点误差或最大模误差,插值的好坏往往通过某些局部的性质来体现,比如龙格现象或吉布斯振荡。
(ps. 龙格现象:https://zh.wikipedia.org/wiki/%E9%BE%99%E6%A0%BC%E7%8E%B0%E8%B1%A1


插值,拟合和代码实现
文章图片
红色曲线是龙格函数,蓝色曲线是 5 阶多项式,绿色曲线是 9 阶多项式。随着阶次的增加,误差逐渐变大,近似于[a,b]上一致收敛函数f(x)的多项式函数P并不能保证也具有一致收敛性,一般把这种次数越高而插值结果越偏离原函数的现象称为龙格现象。所以在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。
吉布斯震荡:吉布斯现象(英语:Gibbs phenomenon),由Henry Wilbraham于1848年最先提出[1],并由约西亚·吉布斯于1899年证明[2]。在工程应用时常用有限正弦项正弦波叠加逼近原周期信号。所用的谐波次数N的大小决定逼近原波形的程度,N增加,逼近的精度不断改善。但是由于对于具有不连续点的周期信号会发生一种现象:当选取的傅里叶级数的项数N增加时,合成的波形虽然更逼近原函数,但在不连续点附近会出现一个固定高度的过冲,N越大,过冲的最大值越靠近不连续点,但其峰值并不下降,而是大约等于原函数在不连续点处跳变值的9%,且在不连续点两侧呈现衰减振荡的形式。(wiki)


插值,拟合和代码实现
文章图片

插值,拟合和代码实现
文章图片
拟合方法:
最小二乘法https://www.bragitoff.com/2015/09/c-program-for-polynomial-fit-least-squares/
插值方法:


插值,拟合和代码实现
文章图片
线性,拉格朗日,牛顿,样条,cubic
线性插值 liner interpolation




插值,拟合和代码实现
文章图片
插值,拟合和代码实现
文章图片
这样的已知x求y的方式,即为线性插值


插值,拟合和代码实现
文章图片
线性插值的特点是计算简便,但光滑性很差。如果用线性插值拟合一条光滑曲线,对每一段线段,原曲线在该段内二阶导数绝对值的最大值越大,拟合的误差越大。

实现代码:
https://bulldozer00.com/2016/05/10/linear-interpolation-in-c/


二次插值&三次插值
如果按照线性插值的形式,以每3个相邻点做插值,就得到了二次插值:

插值,拟合和代码实现
文章图片
二次插值在每段二次曲线内是光滑的,但在每条曲线的连接处其光滑性可能甚至比线性插值还差。二次插值只适合3个节点的情形,当节点数超过3个时,就需要分段插值了。
拉格朗日多项式插值
按照线性插值








牛顿插值










Cubic插值
【插值,拟合和代码实现】









样条插值

    推荐阅读