关于插值法一些事

插值多项式

    函数是一种“形”为艺术的美。书面讲函数就是反映某种内在规律的数量关系。而现实中我们往往
只能得到一系列数据点的值,为了研究函数的变化规律,我们就要做一个既能反映函数特性,又便于
计算的简单函数。

低阶插值多项式

插值函数

y = f ( x ) y=f(x) y=f(x) [ a , b ] [a,b] [a,b]上有定义,已知 a ≤ x 0 < x 1 < ⋯ < x n ≤ b a\le x_{0}< x_{1}<\dots < x_{n}\le b ax0<x1<<xnb (注意这里有 n + 1 n+1 n+1不同的点,下面不再重复),称 x 0 , x 1 , … , x n x_{0},x_{1},\dots,x_{n} x0,x1,,xn为插值节点, [ a , b ] [a,b] [a,b]为插值区间。若有一个简单函数 P ( x ) P(x) P(x)(这里的简单是相对意义),有 P ( x i ) = y i , i = 0 , 1 , … , n P(x_{i})=y_{i},i=0,1,\dots,n P(xi)=yi,i=0,1,,n则称 P ( x ) P(x) P(x)为插值函数,相应的求 P ( x ) P(x) P(x)的方法为插值法。
(1)若 P ( x ) P(x) P(x)是由 1 , x , x 2 , … , x n 1,x,x^{2},\dots,x^{n} 1,x,x2,,xn的线性组合,则称 P ( x ) P(x) P(x)为插值多项式,即: P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n P(x)=a_{0}+a_{1}x+a_{2}x^{2}+\dots+a_{n}x^{n} P(x)=a0+a1x+a2x2++anxn相应的插值法为多项式插值
(2)若 P ( x ) P(x) P(x)为分段多项式,例如后面要讲的分段插值就是这种。相应的插值方法为分段插值
(3)若 P ( x ) P(x) P(x)为三角多项式,例如傅里叶级数。相应的插值方法为三角插值

类型插值方法例子
插值多项式`多项式插值朗格朗日插值多项式、牛顿插值多项式
分段多项式分段插值分段线性插值、分段Hermit插值
三角多项式三角插值傅里叶级数展开

为什么要弄这么多类型的多项式呢?这涉及到数值分析中的一个基本思想——误差、复杂度。直观的讲,误差就是拟合函数与实际函数的贴合程度,复杂度就是拟合函数所需的数据量(这里的数据量指数据总量和类型)以及计算的负责度。一般情况下,想要误差越小,所需的数据量就要越多,两者是相互矛盾的。

插值多项式的次数*
[ a , b ] [a,b] [a,b]上,已知 n + 1 n+1 n+1个点, a ≤ x 0 < x 1 < ⋯ < x n ≤ b a\le x_{0}< x_{1}<\dots < x_{n}\le b ax0<x1<<xnb 上的函数值 y i = f ( x i ) ( i = 0 , 1 , … , n ) y_{i}=f(x_{i})(i=0,1,\dots,n) yi=f(xi)(i=0,1,,n)
插值多项式的两个基本思想

  • 经过每个节点。即: P ( x i ) = y i , i = 0 , 1 , … , n P(x_{i})=y_{i},i=0,1,\dots,n P(xi)=yi,i=0,1,,n
  • P ( x ) P(x) P(x)是由 1 , x , x 2 , … , x n 1,x,x^{2},\dots,x^{n} 1,x,x2,,xn的线性组合,即: P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n P(x)=a_{0}+a_{1}x+a_{2}x^{2}+\dots+a_{n}x^{n} P(x)=a0+a1x+a2x2++anxn
    因此,我们就建立了 n + 1 n+1 n+1元线性方程组:
    { a 0 + a 1 x 0 + ⋯ + a n x 0 n = y 0 a 0 + a 1 x 1 + ⋯ + a n x 1 n = y 1 ⋮ a 0 + a 1 x n + ⋯ + a n x n n = y n \left\{\begin{matrix} a_{0} +a_{1}x_{0}+\dots+a_{n}x_{0}^{n}=y_{0} \\a_{0} +a_{1}x_{1}+\dots+a_{n}x_{1}^{n}=y_{1}\\ \vdots & & & & \\ a_{0} +a_{1}x_{n}+\dots+a_{n}x_{n}^{n}=y_{n}\end{matrix}\right. a0+a1x0++anx0n=y0a0+a1x1++anx1n=y1a0+a1xn++anxnn=yn
    代数中讲,如果方程组的系数矩阵行列式不等于0,则解唯一。注意这里的 x x x y y y是已知的, a a a为未知量。因此此方程的系数矩阵为:
    [ 1 x 0 … x 0 n 1 x 1 … x 1 n ⋮ ⋮ ⋮ 1 x n … x n n ] \begin{bmatrix} 1 & x_{0} & \dots &x_{0}^{n} \\1 & x_{1} & \dots &x_{1}^{n}\\\vdots & \vdots & &\vdots\\1 & x_{n} & \dots &x_{n}^{n}\end{bmatrix} 111x0x1xnx0nx1nxnn
    这是一个 V a n d e r m o n d e Vandermonde Vandermonde矩阵,detA= ∏ i , j = 0 , i > j n ( x i − x j ) ≠ 0 \prod_{i,j=0,i>j}^{n}(x_{i}-x_{j})\ne 0 i,j=0,i>jn(xixj)=0 ( x x x互异),因此, a 0 , a 1 … , a n a_{0},a_{1}\dots,a_{n} a0,a1,an存在且唯一。如果最高次大于n,即未知数数量多于方程数量,有无穷多解。如果最高次小于n,存在无解的情况。因此这就是为什么构造最高次为n次的插值多项式需要 n + 1 n+1 n+1个数据的原因。

线性插值多项式

    通过上文,解线性方程组是求插值多项式系数的一种方法。解线性方程组就要求我们计算矩阵,
低阶矩阵还行,但是高阶呢?不止是我们,计算机也不愿意去做。因此数学家就想去探索一种更简
单的方法去求插值多项式的系数。于是就有了拉格朗日插值法以及牛顿插值法。(让我们一起来感受
数学之美)
拉格朗日插值

出于敬佩,必先了解这位杰出的数学家。拉格朗日简介.
我们知道插值多项式有两个基本思想(见前文)。所以,我们就想到这样一个形式:
L ( x ) = ∑ i = 0 n l i ( x ) y i L(x)=\sum_{i=0}^{n} l_{i}(x)y_{i} L(x)=i=0nli(x)yi
其中称 l i ( x ) l_{i}(x) li(x)为插值基函数。 l i ( x ) = { 1 x = x i 0 x ≠ x i l_{i}(x)=\left\{\begin{matrix} 1 &x=x_i \\ 0 &x\ne x_i\end{matrix}\right. li(x)={10x=xix=xi,也就是说 l i ( x ) l_{i}(x) li(x)有两个约束条件:在 x i x_i xi处取值为1,其它节点取值为0。用函数的语言讲 l i ( x ) l_i(x) li(x)的零点为 x 0 , x 1 , … , x i − 1 , x i + 1 , … , x n x_0,x_1,\dots,x_{i-1},x_{i+1},\dots,x_n x0,x1,,xi1,xi+1,,xn。因此,脑海中想到 l i ( x ) l_i(x) li(x)的一种构造方式为: l i ( x ) = K i ( x − x 0 ) … ( x − x i − 1 ) ( x − x i + 1 ) … ( x − x n ) = K i ∏ 0 , j ≠ i n ( x − x j ) l_{i}(x)=K_i(x-x_0)\dots(x-x_{i-1})(x-x_{i+1})\dots(x-x_n)=K_i\prod_{0,j\ne i}^{n} (x-x_j) li(x)=Ki(xx0)(xxi1)(xxi+1)(xxn)=Ki0,j=in(xxj)
这里的 K i K_i Ki为未知参数。但是别忘了 l i ( x ) l_{i}(x) li(x) x i x_i xi处取值为1,因此 K i = 1 ∏ j = 0 , j ≠ i n ( x i − x j ) K_i=\frac{1}{\prod_{j=0,j\ne i}^{n} (x_i-x_j)} Ki=j=0,j=in(xixj)1
因此,通过这种构造方法就可以很容易地给出 L ( x ) L(x) L(x)的形式:
L ( x ) = ∑ i = 0 n ∏ 0 , j ≠ i n ( x − x j ) ∏ j = 0 , j ≠ i n ( x i − x j ) y i L(x)=\sum_{i=0}^{n} \frac{\prod_{0,j\ne i}^{n} (x-x_j)}{\prod_{j=0,j\ne i}^{n} (x_i-x_j)}y_{i} L(x)=i=0nj=0,j=in(xixj)0,j=in(xxj)yi
这里有一种简单的系数记忆方法, y i = x 与其它所有节点的差的累乘 x i 与其它所有节点的差的累乘 y_i=\frac{x与其它所有节点的差的累乘}{x_i与其它所有节点的差的累乘} yi=xi与其它所有节点的差的累乘x与其它所有节点的差的累乘
虽然拉格朗日插值多项式 L ( x ) L(x) L(x)看起来和 P ( x ) P(x) P(x)好像不一样,但是其实展开后是一样的。因为我们前面讲过 P ( x ) P(x) P(x)是惟一的,而 L ( x ) L(x) L(x)也是一个最高次为 n n n次的多项式同时也满足插值多项式的两个基本条件。因此 L ( x ) ≡ P ( x ) L(x)\equiv P(x) L(x)P(x)

牛顿插值

既然有了拉格朗日插值多项式,为什么还有人构造牛顿多项式呢?举个例子:你辛辛苦苦构造完拉格朗日插值多项式后,发现还有一个节点你没算。这时你会感到崩溃,因为你做的拉格朗日插值多项式已经毫无意义了。这就有人想,有没有一种构造方法使得插值多项式是逐次生成的呢?这里不得不提另外一位大神——牛顿。牛顿简介.
数学中最重要的一个方法那就是从定义出发。我们现在不妨观察前几项来找规律

名称形式节点
N 0 ( x ) N_0(x) N0(x) y 0 y_0 y0 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)
N 1 ( x ) N_1(x) N1(x) y 0 + y 1 − y 0 x 1 − x 0 ( x − x 0 ) y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0) y0+x1x0y1y0(xx0) ( x 0 , y 0 ) , ( x 1 , y 1 ) (x_0,y_0),(x_1,y_1) (x0,y0),(x1,y1)
N 2 ( x ) N_2(x) N2(x) y 0 + y 1 − y 0 x 1 − x 0 ( x − x 0 ) + y 2 − y 0 x 2 − x 0 − y 1 − y 0 x 1 − x 0 x 2 − x 1 ( x − x 1 ) ( x − x 0 ) y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)+\frac{\frac{y_2-y_0}{x_2-x_0}-\frac{y_1-y_0}{x_1-x_0}}{x_2-x_1}(x-x_1)(x-x_0) y0+x1x0y1y0(xx0)+x2x1x2x0y2y0x1x0y1y0(xx1)(xx0) ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_0,y_0),(x_1,y_1),(x_2,y_2) (x0,y0),(x1,y1),(x2,y2)

像这样算,笔者要累死。牛顿当然不可能这样算呀,通过观察,牛顿引入了均差的概念。

名称形式
一阶均差 f [ x 0 , x 1 ] = y 1 − y 0 x 1 − x 0 f[x_0,x_1]=\frac{y_1-y_0}{x_1-x_0} f[x0,x1]=x1x0y1y0
二阶均差 f [ x 0 , x 1 , x 2 ] = f [ x 0 , x 2 ] − f [ x 0 , x 1 ] x 2 − x 1 f[x_0,x_1,x_2]=\frac{f[x_0,x_2]-f[x_0,x_1]}{x_2-x_1} f[x0,x1,x2]=x2x1f[x0,x2]f[x0,x1]
⋮ \vdots ⋮ \vdots
n阶均差 f [ x 0 , x 1 , … , x n ] = f [ x 0 , x 1 , … , x n − 2 , x n ] − f [ x 0 , x 1 , … , x n − 1 ] x n − x n − 1 f[x_0,x_1,\dots,x_n]=\frac{f[x_0,x_1,\dots,x_{n-2},x_n]-f[x_0,x_1,\dots,x_{n-1}]}{x_n-x_{n-1}} f[x0,x1,,xn]=xnxn1f[x0,x1,,xn2,xn]f[x0,x1,,xn1]

很多同学可能对均差不是很熟悉。现在我们从根本出发,介绍均差及其性质:

  • k k k阶均差可表示为 y 0 , y 1 , … , y n y_0,y_1,\dots,y_n y0,y1,,yn的线性组合,即:
    f [ x 0 , x 1 , … , x k ] = ∑ j = 0 n y j ( x j − x 0 ) … ( x j − x j − 1 ) ( x j − x j + 1 ) … ( x j − x k ) f[x_0,x_1,\dots,x_k]=\sum_{j=0}^{n}\frac{y_j}{(x_j-x_0)\dots(x_j-x_{j-1})(x_j-x_{j+1})\dots(x_j-x_{k})} f[x0,x1,,xk]=j=0n(xjx0)(xjxj1)(xjxj+1)(xjxk)yj
    证明如下(请先阅读牛顿插值多项式再来看这里):
    前面讲到 n + 1 n+1 n+1个点构造的插值多项式唯一,则 P ( x ) ≡ L n ( x ) ≡ N n ( x ) P(x)\equiv L_n(x)\equiv N_n(x) P(x)Ln(x)Nn(x)
    我们对 k + 1 k+1 k+1个点进行拉格朗日插值和牛顿插值,最高次数都为 k k k
    拉格朗日插值最高次项次数为:
    ∑ i = 0 n y i ∏ j = 0 , j ≠ i n ( x i − x j ) (1) \sum_{i=0}^{n} \frac{y_{i}}{\prod_{j=0,j\ne i}^{n} (x_i-x_j)}\tag{1} i=0nj=0,j=in(xixj)yi(1)
    牛顿插值最高项次数为:
    f [ x 0 , x 1 , … , x k ] f[x_0,x_1,\dots,x_k] f[x0,x1,,xk]
    两者都是最高次项的系数,多项式相等,则各项系数都要相等。 □ \Box
  • 由(1)知,均差内部元素的排列不影响其值 f [ x 0 , x 1 , … , x k ] ≡ f [ x 1 , x 0 , … , x k ] ≡ f [ x k , x 0 , … , x k − 1 ] f[x_0,x_1,\dots,x_k] \equiv f[x_1,x_0,\dots,x_k] \equiv f[x_k,x_0,\dots,x_{k-1}] f[x0,x1,,xk]f[x1,x0,,xk]f[xk,x0,,xk1]
    牛顿插值多项式
    有了均差的定义,我们就很容易给出牛顿插值多项式啦。
    N n ( x ) = y 0 + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + ⋯ + f [ x 0 , x 1 , … , x n ] ( x − x 0 ) … ( x − x n − 1 ) N_n(x)=y_0+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\dots+f[x_0,x_1,\dots,x_n](x-x_0)\dots(x-x_{n-1}) Nn(x)=y0+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)++f[x0,x1,,xn](xx0)(xxn1)
    至少在形式上是很舒服的。例如新增一个节点 x n + 1 x_{n+1} xn+1,则为 N n ( x ) + f [ x 0 , x 1 , … , x n + 1 ] ( x − x 0 ) … ( x − x n ) N_n(x)+f[x_0,x_1,\dots,x_{n+1}](x-x_0)\dots(x-x_n) Nn(x)+f[x0,x1,,xn+1](xx0)(xxn)现在就算忘记哪个节点,也没事了。等等!!!均差算起来好麻烦(ಥ_ಥ)。
    从前面的定义,我们知道了均差是一步一步来的。就是从前一项均差推出后一项均差。因此,构造均差表可以使得计算逻辑更加清晰。
x k x_k xk y k y_k yk一阶均差二阶均差三阶均差
x 0 x_0 x0 y 0 y_0 y0
x 1 x_1 x1 y 1 y_1 y1 f [ x 0 , x 1 ] f[x_0,x_1] f[x0,x1]
x 2 x_2 x2 y 2 y_2 y2 f [ x 0 , x 2 ] f[x_0,x_2] f[x0,x2] f [ x 0 , x 1 , x 2 ] f[x_0,x_1,x_2] f[x0,x1,x2]
x 3 x_3 x3 y 3 y_3 y3 f [ x 0 , x 3 ] f[x_0,x_3] f[x0,x3] f [ x 0 , x 2 , x 3 ] f[x_0,x_2,x_3] f[x0,x2,x3] f [ x 0 , x 1 , x 2 , x 3 ] f[x_0,x_1,x_2,x_3] f[x0,x1,x2,x3]
⋮ \vdots ⋮ \vdots ⋮ \vdots ⋮ \vdots ⋮ \vdots

(实际计算从左往右,从上向下,根据定义计算每个值。根据均差的性质,构造牛顿插值多项式)

两者的插值余项

因为 L n ( x ) L_n(x) Ln(x), N n ( x ) N_n(x) Nn(x)是对实际函数 f ( x ) f(x) f(x)的一个近似,则其截断误差为 R n ( x ) = f ( x ) − P n ( x ) (2) R_n(x)=f(x)-P_n(x)\tag{2} Rn(x)=f(x)Pn(x)(2)也叫作插值余项。注意这里的截断误差或插值余项都是估计的。回归主题,插值法的实际意义是使计算简便同时又能反映函数内在的数量规律。所以,有两种情形,一种我们不知道实际函数长啥样,但是想反映规律。另一种我们知道实际函数,但是太复杂不便于计算。因此为了衡量插值函数与真实函数的偏差,我们需要对“偏差”进行一个估计。
定理 f ( x ) ∈ C n + 1 [ a , b ] f(x) \in C^{n+1} \left [ a,b \right ] f(x)Cn+1[a,b](在数学中 C n + 1 C^{n+1} Cn+1表示连续且 n + 1 n+1 n+1阶导存在),插值余项 R n ( x ) = f ( x ) − P n ( x ) = f ( n + 1 ) ( ε ) ( n + 1 ) ! ∏ j = 0 n ( x − x j ) , ε ∈ ( a , b ) 且依赖于 x 0 , … , x n 的选取 R_n(x)=f(x)-P_n(x)=\frac{f^{(n+1)} (\varepsilon) }{(n+1)!}{\prod_{j=0}^{n} (x-x_j)},\varepsilon\in \left ( a,b \right )且依赖于x_0,\dots,x_n的选取 Rn(x)=f(x)Pn(x)=(n+1)!f(n+1)(ε)j=0n(xxj),ε(a,b)且依赖于x0,,xn的选取

两个典型的埃尔米特插值

第一种典型: H ( x i ) = y i ( i , 0 , 1 , 2 ) H(x_i)=y_i(i,0,1,2) H(xi)=yi(i,0,1,2) H ( x 1 ) ′ = y 1 ′ H(x_1)^{'}=y_1^{'} H(x1)=y1
用牛顿插值函数思想构造形式: H ( x ) = y 0 + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + A ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) H(x)=y_0+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+A(x-x_0)(x-x_1)(x-x_2) H(x)=y0+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)+A(xx0)(xx1)(xx2)
两边同时求一阶导,再利用 H ( x 1 ) ′ = y 1 ′ H(x_1)^{'}=y_1^{'} H(x1)=y1就能计算出 A A A:
A = y 1 ′ − f [ x 0 , x 1 ] − f [ x 0 , x 1 , x 2 ] ( x 1 − x 0 ) ( x 1 − x 0 ) ( x 1 − x 2 ) A=\frac{y_1^{'}-f[x_0,x_1]-f[x_0,x_1,x_2](x_1-x_0)}{(x_1-x_0)(x_1-x_2)} A=(x1x0)(x1x2)y1f[x0,x1]f[x0,x1,x2](x1x0)
实际上, x 1 x_1 x1处的一阶导数信息可以通过极限的思想去间接计算,或者已知实际函数求 x 1 x_1 x1的一阶导数。余项表达式: R ( x ) = f ( 4 ) ( ε ) 4 ! ( x − x 0 ) ( x − x 1 ) 2 ( x − x 2 ) , ε ∈ ( a , b ) 且依赖于 x 0 , x 1 , x 2 的选取 R(x)=\frac{f^{(4)} (\varepsilon) }{4!}{(x-x_0)(x-x_1)^2(x-x_2)},\varepsilon\in \left ( a,b \right )且依赖于x_0,x_1,x_2的选取 R(x)=4!f(4)(ε)(xx0)(xx1)2(xx2),ε(a,b)且依赖于x0,x1,x2的选取

第二种典型:两点三次Hermit插值,插值点为 x k x_k xk x k + 1 x_{k+1} xk+1,已知:
H 3 ( x k ) = y k , H 3 ( x k + 1 ) = y k + 1 H 3 ′ ( x k ) = m k H 3 ′ ( x k + 1 ) = m k + 1 } \left.\begin{matrix} H_3(x_k)=y_k, & H_3(x_{k+1})=y_{k+1}\\ H_3^{'}(x_k)=m_k &H_3^{'}(x_{k+1})=m_{k+1}\end{matrix}\right\} H3(xk)=yk,H3(xk)=mkH3(xk+1)=yk+1H3(xk+1)=mk+1}
用拉格朗日插值思想构造形式:
H 3 ( x ) = α k ( x ) y k + α k + 1 ( x ) y k + 1 + β k ( x ) y k ′ + β k + 1 ( x ) y k + 1 ′ H_3(x)=\alpha _k(x)y_k+\alpha _{k+1}(x)y_{k+1}+\beta _k(x)y_k^{'}+\beta _{k+1}(x)y_{k+1}^{'} H3(x)=αk(x)yk+αk+1(x)yk+1+βk(x)yk+βk+1(x)yk+1
这里的 α k ( x ) \alpha _k(x) αk(x), α k + 1 ( x ) \alpha _{k+1}(x) αk+1(x), β k ( x ) \beta _k(x) βk(x), β k + 1 ( x ) \beta _{k+1}(x) βk+1(x)为三次埃尔米特插值基函数。满足两个基本条件,在节点处的取值相等,在节点处的导数值相等。具体参考Hermite插值法.
最终结果: H 3 ( x ) = ( 1 + 2 x − x k x k + 1 − x k ) ( x − x k + 1 x k − x k + 1 ) 2 y k + ( 1 + 2 x − x k + 1 x k − x k + 1 ) ( x − x k + 1 x k − x k + 1 ) 2 y k + 1 + ( x − x k ) ( x − x k + 1 x k − x k + 1 ) 2 m k + ( x − x k + 1 ) ( x − x k + 1 x k − x k + 1 ) 2 m k + 1 H_3(x)=(1+2\frac{x-x_k}{x_{k+1}-x_k})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2y_k+(1+2\frac{x-x_{k+1}}{x_{k}-x_{k+1}})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2y_{k+1}+(x-x_k)(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2m_k+(x-x_{k+1})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2m_{k+1} H3(x)=(1+2xk+1xkxxk)(xkxk+1xxk+1)2yk+(1+2xkxk+1xxk+1)(xkxk+1xxk+1)2yk+1+(xxk)(xkxk+1xxk+1)2mk+(xxk+1)(xkxk+1xxk+1)2mk+1
插值余项: R ( x ) = f ( 4 ) ( ε ) 4 ! ( x − x k ) 2 ( x − x k + 1 ) 2 , ε ∈ ( x k , x k + 1 ) R(x)=\frac{f^{(4)} (\varepsilon) }{4!}{(x-x_k)^2(x-x_{k+1})^2},\varepsilon\in \left ( x_k,x_{k+1}\right ) R(x)=4!f(4)(ε)(xxk)2(xxk+1)2,ε(xk,xk+1)

高阶插值的病态性质(龙格现象)

通过学习Hermite插值,我们可以构造高次的插值多项式。这有人就会问多项式的次数是不是越高越好?但实际上并非如此,当 n → ∞ n\to \infty n, P ( x ) P(x) P(x)不一定收敛于 f ( x ) f(x) f(x),这我们称为是高次插值的病态性质,也叫龙格现象。龙格现象.

分段插值

既然我们不能用次数太高的插值多项式拟合,但是我们又想尽可能的提高精度,又怎么办呢?数学中的有一个重要思想划分(分割),图论中讲的是图的等价类划分、微积分里讲的是分割取点求极限、最优化里讲的动态规划等等。名称有很多,但是思想是一个,就是将复杂问题分解成若干简单问题。既然我们不能从总体上构造足够“完美”的插值多项式,那么我们可以划分每个小区间去求小区间上的“完美”插值多项式。分段线性插值就应运而生了。

分段线性插值

分段线性插值就是通过插值点用折线段连接起来逼近 f ( x ) f(x) f(x),在 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]上,插值多项式为 P k ( x ) = x − x k + 1 x k − x k + 1 y k + x − x k x k + 1 − x k y k + 1 P_k(x)=\frac{x-x_{k+1}}{x_k-x_{k+1}}y_k+\frac{x-x_{k}}{x_{k+1}-x_k}y_{k+1} Pk(x)=xkxk+1xxk+1yk+xk+1xkxxkyk+1

分段三次埃尔米特插值

分段线性插值函数 P k ( x ) P_k(x) Pk(x)的导数是间断的(也就节点处两侧一阶导数不相同),因此分段三次埃尔米特插值函数具有一阶导数连续的优良性质,在 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]上,插值多项式为 H 3 ( x ) = ( 1 + 2 x − x k x k + 1 − x k ) ( x − x k + 1 x k − x k + 1 ) 2 y k + ( 1 + 2 x − x k + 1 x k − x k + 1 ) ( x − x k + 1 x k − x k + 1 ) 2 y k + 1 + ( x − x k ) ( x − x k + 1 x k − x k + 1 ) 2 m k + ( x − x k + 1 ) ( x − x k + 1 x k − x k + 1 ) 2 m k + 1 H_3(x)=(1+2\frac{x-x_k}{x_{k+1}-x_k})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2y_k+(1+2\frac{x-x_{k+1}}{x_{k}-x_{k+1}})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2y_{k+1}+(x-x_k)(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2m_k+(x-x_{k+1})(\frac{x-x_{k+1}}{x_k-x_{k+1}})^2m_{k+1} H3(x)=(1+2xk+1xkxxk)(xkxk+1xxk+1)2yk+(1+2xkxk+1xxk+1)(xkxk+1xxk+1)2yk+1+(xxk)(xkxk+1xxk+1)2mk+(xxk+1)(xkxk+1xxk+1)2mk+1

三次样条插值*

分段低次插值都有一致收敛性,但光滑性较差。实际中,有很多问题需要二阶连续导数的,那这又怎么办?工程师给出了一个很完美的模型——样条模型。(( ͡° ͜ʖ ͡°)所以说,当你数学学到心烦意乱时,不妨出去走走)回到主题,什么是三次样条函数呢?
定义 S ( x ) ∈ C 2 [ a , b ] S(x)\in C^{2} \left [ a,b \right ] S(x)C2[a,b],经过每个节点且每个小区间 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]上是三次多项式,则称 S ( x ) S(x) S(x)是节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,,xn上的三次样条函数。(注意这里的 S ( x ) S(x) S(x)是分段函数)
因为 S ( x ) S(x) S(x)是三次多项式,所以每个小区间 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]上要确定4个待定系数。根据 S ( x ) ∈ C 2 [ a , b ] S(x)\in C^{2} \left [ a,b \right ] S(x)C2[a,b],在节点处应满足:
S ( x k − 0 ) = S ( x k + 0 ) S(x_k-0)=S(x_k+0) S(xk0)=S(xk+0) S ′ ( x k − 0 ) = S ′ ( x k + 0 ) S^{'}(x_k-0)=S^{'}(x_k+0) S(xk0)=S(xk+0) S ′ ′ ( x k − 0 ) = S ′ ′ ( x k + 0 ) S^{''}(x_k-0)=S^{''}(x_k+0) S′′(xk0)=S′′(xk+0)
这里一共有 3 n − 3 3n-3 3n3个条件,在加上通过每个节点,共有 4 n − 2 4n-2 4n2个条件。因此还需要2个条件才能确定 S ( x ) S(x) S(x)。我们常在左右端点处各加一个边界条件(左端点 x 0 x_0 x0,右端点 x n x_n xn),根据实际情况有以下三种:

  • 已知两端的一阶导数值,即:
    S ′ ( x 0 ) = f 0 ′ , S ′ ( x n ) = f n ′ (3) S^{'}(x_0)=f_0^{'},S^{'}(x_n)=f_n^{'}\tag{3} S(x0)=f0S(xn)=fn(3)
  • 已知两端的二阶导数值,即:
    S ′ ′ ( x 0 ) = f 0 ′ ′ , S ′ ′ ( x n ) = f n ′ ′ (4) S^{''}(x_0)=f_0^{''},S^{''}(x_n)=f_n^{''}\tag{4} S′′(x0)=f0′′S′′(xn)=fn′′(4)
    特殊情况(自然边界条件):
    S ′ ′ ( x 0 ) = S ′ ′ ( x n ) = 0 (4’) S^{''}(x_0)=S^{''}(x_n)=0\tag{4'} S′′(x0)=S′′(xn)=0(4’)
  • f ( x ) f(x) f(x)是以 x n − x 0 x_n-x_0 xnx0为周期的的周期函数时,则要求 S ( x ) S(x) S(x)也为周期函数,即:
    { S ( x 0 + 0 ) = S ( x n − 0 ) , S ′ ( x 0 + 0 ) = S ′ ( x n − 0 ) S ′ ′ ( x 0 + 0 ) = S ′ ′ ( x n − 0 ) , (5) \left\{\begin{matrix} S(x_0+0)=S(x_n-0),&S^{'}(x_0+0)=S^{'}(x_n-0) \\ S^{''}(x_0+0)=S^{''}(x_n-0),&\end{matrix}\right.\tag{5} {S(x0+0)=S(xn0),S′′(x0+0)=S′′(xn0),S(x0+0)=S(xn0)(5)
    y 0 = y n y_0=y_n y0=yn,则称 S ( x ) S(x) S(x)为周期样条函数。
    下面是求解过程
    (1)因为 S ( x ) " S(x)^{"} S(x)"在每个小区间 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]连续,即通过拉格朗日插值思想,构造形式:
    S ( x ) " = M k x − x k + 1 x k − x k + 1 + M k + 1 x − x k x k + 1 − x k S(x)^{"}=M_k\frac{x-x_{k+1}}{x_k-x_{k+1}}+M_{k+1}\frac{x-x_k}{x_{k+1}-x_k} S(x)"=Mkxkxk+1xxk+1+Mk+1xk+1xkxxk
    在这里我们令 h k = x k + 1 − x k h_k=x_{k+1}-x_k hk=xk+1xk
    (2)我们对两端取积分并利用节点函数值得:
    S ( x ) = M k ( x k + 1 − x ) 3 6 h k + M k + 1 ( x − x k ) 3 6 h k + ( y k − M k h k 2 6 ) x k + 1 − x h k + ( y k + 1 − M k + 1 h k 2 6 ) x − x k h k , k = 0 , … , n − 1 S(x)=M_k\frac{(x_{k+1}-x)^3}{6h_k}+M_{k+1}\frac{(x-x_k)^3}{6h_k}+(y_k-\frac{M_kh_k^2}{6})\frac{x_{k+1}-x}{h_k}+(y_{k+1}-\frac{M_{k+1}h_k^2}{6})\frac{x-x_k}{h_k},k=0,\dots,n-1 S(x)=Mk6hk(xk+1x)3+Mk+16hk(xxk)3+(yk6Mkhk2)hkxk+1x+(yk+16Mk+1hk2)hkxxk,k=0,,n1
    这里的 M k M_k Mk是待定参数。
    (3)根据 S ′ ( x k − 0 ) = S ′ ( x k + 0 ) S^{'}(x_k-0)=S^{'}(x_k+0) S(xk0)=S(xk+0)条件有:
    { S ′ ( x k − 0 ) = h k − 1 6 M k − 1 + h k − 1 3 M k + y k − y k − 1 h k S ′ ( x k + 0 ) = − h k 3 M k − h k 6 M k + 1 + y k + 1 − y k h k + 1 \left\{\begin{matrix} S^{'}(x_k-0)=\frac{h_{k-1}}{6}M_{k-1}+\frac{h_{k-1}}{3}M_{k}+\frac{y_k-y_{k-1}}{h_k}\\S^{'}(x_k+0)=-\frac{h_k}{3}M_k-\frac{h_k}{6}M_{k+1}+\frac{y_{k+1}-y_k}{h_{k+1}}\end{matrix}\right. {S(xk0)=6hk1Mk1+3hk1Mk+hkykyk1S(xk+0)=3hkMk6hkMk+1+hk+1yk+1yk
    因此有:
    μ k M k − 1 + 2 M k + λ k M k + 1 = d k , k = 1 , … , n − 1 \mu _{k} M_{k-1}+2M_k+\lambda _kM_{k+1}=d_k,k=1,\dots,n-1 μkMk1+2Mk+λkMk+1=dk,k=1,,n1
    其中: μ k = h k − 1 h k − 1 + h k , λ k = h k h k − 1 + h k , d k = 6 f [ x k − 1 , x k , x k + 1 ] , k = 1 , … , n − 1 \mu _k=\frac{h_{k-1}}{h_{k-1}+h_k},\lambda _k=\frac{h_k}{h_{k-1}+h_k},d_k=6f[x_{k-1},x_k,x_{k+1}],k=1,\dots,n-1 μk=hk1+hkhk1,λk=hk1+hkhk,dk=6f[xk1,xk,xk+1],k=1,,n1
    对于边界条件(3),有: [ 2 λ 0 μ 1 2 λ 1 ⋱ ⋱ ⋱ μ n − 1 2 λ n − 1 μ n 2 ] = [ M 0 M 1 ⋮ M n − 1 M n ] = [ d 0 d 1 ⋮ d n − 1 d n ] (*) \begin{bmatrix} 2 & \lambda_0 & & & \\ \mu_1 & 2 & \lambda_1 & & \\ & \ddots & \ddots & \ddots & \\ & & \mu _{n-1} & 2 &\lambda _{n-1} \\ & & & \mu _n &2\end{bmatrix}=\begin{bmatrix} M_0\\M_1 \\\vdots\\ M_{n-1}\\ M_{n}\end{bmatrix}=\begin{bmatrix}d_0\\d_1 \\\vdots\\ d_{n-1}\\ d_{n}\end{bmatrix}\tag{*} 2μ1λ02λ1μn12μnλn12 = M0M1Mn1Mn = d0d1dn1dn (*)
    其中 λ 0 = 1 , d 0 = 6 h 0 ( f [ x 0 , x 1 ] − f 0 ′ ) , μ n = 1 , d n = 6 h n − 1 ( f n ′ − f [ x n − 1 , x n ] ) \lambda _0=1,d_0=\frac{6}{h_0}(f[x_0,x_1]-f_0^{'}),\mu_n=1,d_n=\frac{6}{h_{n-1}}(f_n^{'}-f[x_{n-1},x_n]) λ0=1,d0=h06(f[x0,x1]f0),μn=1,dn=hn16(fnf[xn1,xn])
    对于边界条件(4),有:
    [ 2 λ 0 μ 1 2 λ 1 ⋱ ⋱ ⋱ μ n − 1 2 λ n − 1 μ n 2 ] = [ M 0 M 1 ⋮ M n − 1 M n ] = [ d 0 d 1 ⋮ d n − 1 d n ] \begin{bmatrix} 2 & \lambda_0 & & & \\ \mu_1 & 2 & \lambda_1 & & \\ & \ddots & \ddots & \ddots & \\ & & \mu _{n-1} & 2 &\lambda _{n-1} \\ & & & \mu _n &2\end{bmatrix}=\begin{bmatrix} M_0\\M_1 \\\vdots\\ M_{n-1}\\ M_{n}\end{bmatrix}=\begin{bmatrix}d_0\\d_1 \\\vdots\\ d_{n-1}\\ d_{n}\end{bmatrix} 2μ1λ02λ1μn12μnλn12 = M0M1Mn1Mn = d0d1dn1dn
    其中 M 0 = f 0 ′ ′ , M n = f n ′ ′ , λ 0 = μ n , = 0 , d 0 = 2 f 0 ′ ′ , d n = 2 f n ′ ′ M_0=f_0^{''},M_n=f_n^{''},\lambda _0=\mu_n,=0,d_0=2f_0^{''},d_n=2f_n^{''} M0=f0′′,Mn=fn′′,λ0=μn,=0d0=2f0′′,dn=2fn′′
    对于边界(5),有: M 0 = M n , μ n M 1 + μ n M n − 1 + 2 M n = d n M_0=M_n,\mu _{n} M_{1}+\mu_nM_{n-1}+2M_{n}=d_n M0=Mn,μnM1+μnMn1+2Mn=dn
    即: [ 2 λ 0 μ 1 2 λ 1 ⋱ ⋱ ⋱ μ n − 1 2 λ n − 1 μ n 2 ] = [ M 0 M 1 ⋮ M n − 1 M n ] = [ d 0 d 1 ⋮ d n − 1 d n ] \begin{bmatrix} 2 & \lambda_0 & & & \\ \mu_1 & 2 & \lambda_1 & & \\ & \ddots & \ddots & \ddots & \\ & & \mu _{n-1} & 2 &\lambda _{n-1} \\ & & & \mu _n &2\end{bmatrix}=\begin{bmatrix} M_0\\M_1 \\\vdots\\ M_{n-1}\\ M_{n}\end{bmatrix}=\begin{bmatrix}d_0\\d_1 \\\vdots\\ d_{n-1}\\ d_{n}\end{bmatrix} 2μ1λ02λ1μn12μnλn12 = M0M1Mn1Mn = d0d1dn1dn
    其中 λ n = h 0 h n − 1 + h 0 , μ n = h n − 1 h n − 1 + h 0 , d k = 6 f [ x 0 , x 1 ] − f [ x n − 1 , x n ] h 0 + h n − 1 \lambda _n=\frac{h_0}{h_{n-1}+h_0},\mu _n=\frac{h_{n-1}}{h_{n-1}+h_0},d_k=6\frac{f[x_0,x_1]-f[x_{n-1},x_n]}{h_0+h_{n-1}} λn=hn1+h0h0,μn=hn1+h0hn1,dk=6h0+hn1f[x0,x1]f[xn1,xn]
    求解(*)就是解线性方程组,特殊的是系数矩阵为严格三对角占优矩阵,可以使用追赶法求解。追赶法.
    以上就是关于数值分析中插值法的自我梳理内容,欢迎各位在评论区批评指正,若有错误,小编会及时更新版本。(❛‿˂̵✧)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值