文章目录
引入
插值: 求过已知有限个数据点的近似函数。(强调这个近似函数要过所有已知点)
拟合: 已知有限个数据点,求近似函数,可不过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。
插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。 而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显。
一、插值
在工程和数学应用中,经常有这样一类数据处理问题,在平面上给定一组离散点列,要求一条曲线,把这些点按次序连接起来,称为插值。
我们为什么要进行插值呢?
我们进行数据处理的理想,当然是希望数据非常的完备,啥玩意儿都有。但现实往往不尽如人意,数据经常会缺东少西的,那怎么办呢?
我们需要对一些不存在的数据进行一些插补。比如,我们分析某个餐馆在一段时间内的营收情况,但某一天收银系统出问题了,这天都是手工收款入账的,我们的系统里面就没有这一天的营收数据。那怎么办呢?我们就需要根据一定的办法把这天的营收数据给找补回来,那怎么找补呢?常用的方法有:
已知 n + 1 n+1 n+1 个点 ( x i , y i ) \left(x_{i}, y_{i}\right) (xi,yi) ( i = 0 , 1 , . . . , n ) (i=0,1,...,n) (i=0,1,...,n),下面求各种插值函数。
1.1 分段线性插值
简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性插值函数。计算 x x x点的插值时,只用到 x x x左右的两个节点,计算量与节点个数 n n n无关。但 n n n越大,分段越多,插值误差越小。
假设两个节点为 ( x 1 , y 1 ) ( x 2 , y 2 ) \left(x_{1}, y_{1}\right)\left(x_{2}, y_{2}\right) (x1,y1)(x2,y2),则该区间上的一次线性方程为:
其证明过程非常简单:
以上就是分段线性插值的原理,可以看出原理十分简单。分段线性插值运算量较小,插值误差较小,插值函数具有连续性,但是由于在已知点的斜率是不变的,所以导致插值结果不光滑,存在角点。
该方法可用matlab自带的interp1函数
实现。
x = 0:10; % 已知x值
y = x.*sin(x); % 已知y值(表达式)
x1 = 0:0.25:10; % 要求的插值点
y1 = interp1(x,y,x1); % 用一维插值方法求出的值,默认method为linear
plot(x,y,'k*',x1,y1)
其运行的结果如下所示:
实际上用函数表作插值计算时,分段线性插值就足够了,如数学、物理中用的特殊函数表,数理统计中用的概率分布表等。
1.2 牛顿插值法
首先我们要知道牛顿多项式的形式: N n ( x ) = a 0 + a 1 ( x − x 0 ) + a 2 ( x − x 0 ) ( x − x 1 ) + ⋯ + a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) \mathrm{N}_{\mathrm{n}}(\mathrm{x})=\mathrm{a}_0+\mathrm{a}_1\left(\mathrm{x}-\mathrm{x}_0\right)+\mathrm{a}_2\left(\mathrm{x}-\mathrm{x}_0\right)\left(\mathrm{x}-\mathrm{x}_1\right)+\cdots+\mathrm{a}_{\mathrm{n}}\left(\mathrm{x}-\mathrm{x}_0\right)\left(\mathrm{x}-\mathrm{x}_1\right) \cdots\left(\mathrm{x}-\mathrm{x}_{\mathrm{n}-1}\right) Nn(x)=a0+a1(x−x0)+a2(x−x0)(x−x1)+⋯+an(x−x0)(x−x1)⋯(x−xn−1)
其中 a k ( k = 0 , 1 , . . . , n ) a_k (k=0,1,...,n) ak(k=0,1,...,n)为待定系数。
自变量之差与因变量之差之比叫差商。
定义: 函数 y = f ( x ) \mathrm{y}=\mathrm{f}(\mathrm{x}) y=f(x) 在区间 [ x i , x i + 1 ] \left[\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{i}+1}\right] [xi,xi+1] 上的平均变化率
f [ x i , x i + 1 ] = f ( x i + 1 ) − f ( x i ) x i + 1 − x i \mathrm{f}\left[\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{i}+1}\right]=\frac{\mathrm{f}\left(\mathrm{x}_{\mathrm{i}+1}\right)-\mathrm{f}\left(\mathrm{x}_{\mathrm{i}}\right)}{\mathrm{x}_{\mathrm{i}+1}-\mathrm{x}_{\mathrm{i}}} f[xi,xi+1]=xi+1−xif(xi+1)−f(xi)
称为 f ( x ) f(x) f(x) 关于 x i , x i + 1 x_i, x_{i+1} xi,xi+1 的一阶差商,并记为 f [ x i , x i + 1 ] f\left[x_i, x_{i+1}\right] f[xi,xi+1]
二阶差商:
f [ x i , x i + 1 , x i + 2 ] = f [ x i + 1 , x i + 2 ] − f [ x i , x i + 1 ] x i + 2 − x i \mathrm{f}\left[\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{i}+1}, \mathrm{x}_{\mathrm{i}+2}\right]=\frac{\mathrm{f}\left[\mathrm{x}_{\mathrm{i}+1}, \mathrm{x}_{\mathrm{i}+2}\right]-\mathrm{f}\left[\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{i}+1}\right]}{\mathrm{x}_{\mathrm{i}+2}-\mathrm{x}_{\mathrm{i}}} f[xi,xi+1,xi+2]=xi+2−xif[x