MathLabs

应用与计算数学

插值与逼近

构造一个经过给定数据点、或紧密逼近某个复杂函数的函数。

直观直觉:用曲线连接数据点

气象站在一天中的几个时刻记录气温,传感器报告若干离散测量值,或工程师只有一张列出少量数值的表格——无论哪种情况,你都拥有一份有限的点列表 (x0,y0),(x1,y1),…,(xn,yn)(x_0,y_0), (x_1,y_1), \dots, (x_n,y_n),你想推测它们之间的取值,或画出一条穿过所有这些点的光滑曲线。插值是构造一个恰好经过每一个点的函数的技艺,而更广义的逼近则是寻找一个与某个复杂函数保持接近、但未必逐点吻合的函数。

一条恰好穿过四个标记数据点的三次曲线,并为其四个系数各配有一个滑块。
这条三次曲线 P(x)=x3−x2−2x+2P(x)=x^3-x^2-2x+2 是唯一一个次数不超过 33 且经过四个点 (−1,2)(-1,2)、(0,2)(0,2)、(1,0)(1,0) 和 (2,2)(2,2) 的多项式:拖动 a,b,c,da,b,c,d,观察恰好四个系数就足以确定一条穿过四个数据点的曲线——这正是多项式插值的本质。

大学定义:插值问题

定义: 多项式插值

给定 n+1n+1 个互异节点 x0,x1,…,xnx_0, x_1, \dots, x_n 及对应的值 y0,y1,…,yny_0, y_1, \dots, y_n(通常 yi=f(xi)y_i=f(x_i) 对某函数 ff 成立),插值问题要求找到一个次数不超过 nn 的多项式 PP,使得对每个 ii 都有 P(xi)=yiP(x_i)=y_i。拉格朗日基多项式 LiL_i 给出了一种显式构造方法。

Li(x)=∏j≠ix−xjxi−xjL_i(x) = \prod_{j \ne i} \dfrac{x - x_j}{x_i - x_j}

每个基多项式 LiL_i 的构造使其在其他所有节点处为零、在自身节点处等于 11:当 j≠ij\ne i 时代入 x=xjx=x_j,分子中的因子 (xj−xj)=0(x_j-x_j)=0,故 Li(xj)=0L_i(x_j)=0;而代入 x=xix=x_i 时分子与分母相同,得 Li(xi)=1L_i(x_i)=1。用目标值对这些构件加权求和,即可直接得到插值多项式。

P(x)=∑i=0nyi Li(x)P(x) = \sum_{i=0}^{n} y_i\, L_i(x)
插值与逼近方法比较
方法思路跨节点的光滑度缺点
拉格朗日经过所有节点的单一多项式 P(x)=∑iyiLi(x)P(x)=\sum_i y_i L_i(x)无限光滑(因为是单个多项式)等距节点下的高次多项式会剧烈振荡(龙格现象)
牛顿差商与拉格朗日相同的多项式,逐节点递增构造无限光滑(相同的多项式)增加节点代价小,但仍会出现相同的高次振荡问题
自然三次样条分段三次函数,每个子区间一个三次式,平滑衔接C2C^2(直到二阶导数都连续)没有单一的整体公式;必须求解线性方程组来确定各段

大学关键定理

给定 n+1n+1 个互异节点 x0,x1,…,xnx_0, x_1, \dots, x_n 及值 y0,y1,…,yny_0, y_1, \dots, y_n,恰好存在一个次数不超过 nn 的多项式 PP,使得对每个 i=0,…,ni=0,\dots,n 都有 P(xi)=yiP(x_i)=y_i。

为什么成立?

n次多项式恰好有n+1个自由系数,而固定n+1个点的值恰好用尽这么多自由度——不多不少——因此只有容纳一个解的余地,没有容纳两个不同解的余地。

证明

第一步(存在性)。拉格朗日构造 P(x)=∑i=0nyiLi(x)P(x) = \sum_{i=0}^{n} y_i L_i(x)(其中 Li(x)=∏j≠ix−xjxi−xjL_i(x) = \prod_{j\ne i} \dfrac{x-x_j}{x_i-x_j})已经对每个 kk 满足 P(xk)=ykP(x_k)=y_k,因为 Li(xk)L_i(x_k) 在 i=ki=k 时等于 11,否则为 00,故求和坍缩为单项 yk⋅1=yky_k \cdot 1 = y_k。因此至少存在一个满足条件的 PP,且每个 LiL_i 的次数恰为 nn(nn 个一次因子之积),故 PP 的次数不超过 nn。

第二步(假设存在两个解)。设 QQ 是任意另一个次数不超过 nn 且对每个 ii 满足 Q(xi)=yiQ(x_i)=y_i 的多项式。考虑差 D(x)=P(x)−Q(x)D(x) = P(x) - Q(x)。由于 PP 与 QQ 的次数都不超过 nn,故 DD 亦然。

第三步(计数差的根)。对每个节点 xix_i,有 D(xi)=P(xi)−Q(xi)=yi−yi=0D(x_i) = P(x_i)-Q(x_i) = y_i - y_i = 0。由于存在 n+1n+1 个互异节点 x0,x1,…,xnx_0, x_1, \dots, x_n,故 DD 至少有 n+1n+1 个互异的根。

第四步(迫使D恒为零)。一个次数不超过 nn 的非零多项式至多有 nn 个根(每个根贡献一个一次因子,而次数为 nn 的多项式不能包含超过 nn 个这样的因子)。由于 DD 有 n+1n+1 个根,超出其次数所允许的数目,除非 DD 是零多项式,因此我们得出 D(x)≡0D(x)\equiv0,即 Q=PQ=P。故第一步所得的插值多项式是唯一的。

设 ff 在包含相异节点 x0,x1,…,xnx_0, x_1, \dots, x_n 和点 xx 的区间上 (n+1)(n+1) 次连续可微,PP 是在这些节点处插值 ff 的 nn 次多项式。则存在该区间内的 ξ\xi 使得 f(x)−P(x)=f(n+1)(ξ)(n+1)!∏i=0n(x−xi)f(x) - P(x) = \dfrac{f^{(n+1)}(\xi)}{(n+1)!} \prod_{i=0}^{n} (x - x_i) 成立。

为什么成立?

插值多项式在节点处与f精确吻合,但对节点之间的f一无所知,因此剩余误差必须在每个节点处为零——这正是乘积项所强制的——并由一个衡量f弯曲程度(超出n次多项式所能捕捉范围)的剩余导数来调节大小。

证明

第一步(巧妙的辅助函数)。固定一个不是节点的点 xx(若是节点,误差平凡地为 00)。设 w(t)=∏i=0n(t−xi)w(t) = \prod_{i=0}^{n} (t - x_i),并定义常数 c=f(x)−P(x)w(x)c = \dfrac{f(x)-P(x)}{w(x)}(由于 w(x)≠0w(x)\ne0 故有良好定义)。定义辅助函数 g(t)=f(t)−P(t)−c w(t)g(t) = f(t) - P(t) - c\, w(t)。

第二步(计数g的根)。在每个节点 xix_i 处,由插值性质 f(xi)−P(xi)=0f(x_i)-P(x_i)=0,且由 ww 的定义 w(xi)=0w(x_i)=0,故在全部 n+1n+1 个节点处都有 g(xi)=0g(x_i)=0。此外,由 cc 的选取,g(x)=f(x)−P(x)−c w(x)=f(x)−P(x)−[f(x)−P(x)]=0g(x) = f(x)-P(x) - c\,w(x) = f(x)-P(x) - [f(x)-P(x)] = 0。故 gg 有 n+2n+2 个互异的根:n+1n+1 个节点加上 xx 本身。

第三步(反复应用罗尔定理)。在 gg 的每对相邻根之间(n+2n+2 个根之间共有 n+1n+1 个这样的间隔),罗尔定理给出一点使 g′g' 为零,故 g′g' 至少有 n+1n+1 个根。对 g′,g′′,…g', g'', \dots 重复此论证,每求一次导就减少一个根,故经过 n+1n+1 次应用后,g(n+1)g^{(n+1)} 在该区间内至少有一个根 ξ\xi。

第四步(求导并解出误差)。由于 PP 的次数不超过 nn,其 (n+1)(n+1) 阶导数为 00;而 ww 是次数为 n+1n+1 的首一多项式,故对一切 tt 都有 w(n+1)(t)=(n+1)!w^{(n+1)}(t) = (n+1)!。对 gg 求导得 g(n+1)(t)=f(n+1)(t)−0−c (n+1)!g^{(n+1)}(t) = f^{(n+1)}(t) - 0 - c\,(n+1)!,令 g(n+1)(ξ)=0g^{(n+1)}(\xi)=0 得 c=f(n+1)(ξ)(n+1)!c = \dfrac{f^{(n+1)}(\xi)}{(n+1)!}。回想 c=f(x)−P(x)w(x)c=\dfrac{f(x)-P(x)}{w(x)} 并解出误差,恰好得到 f(x)−P(x)=f(n+1)(ξ)(n+1)!∏i=0n(x−xi)f(x) - P(x) = \dfrac{f^{(n+1)}(\xi)}{(n+1)!} \prod_{i=0}^{n} (x - x_i)。

给定满足 x0<x1<⋯<xnx_0<x_1<\dots<x_n 的 n+1n+1 个点 (x0,y0),…,(xn,yn)(x_0,y_0),\dots,(x_n,y_n),存在唯一函数 SS,它在每个子区间 [xi,xi+1][x_i,x_{i+1}] 上是三次多项式,在整个 [x0,xn][x_0,x_n] 上二次连续可微,对每个 ii 满足 S(xi)=yiS(x_i)=y_i,并满足自然边界条件 S′′(x0)=S′′(xn)=0S''(x_0)=S''(x_n)=0。

为什么成立?

经过多个点的单一高次多项式往往会剧烈摆动,但将许多平缓的三次片段拼接起来、只要求它们在接缝处平滑衔接,就恰好提供了足够的自由度来拟合数据而不产生剧烈振荡,而自然边界条件恰好提供了使整个方程组可解所需的两个额外方程。

证明

第一步(未知量:各节点处的二阶导数)。设 i=0,…,ni=0,\dots,n 时 Mi=S′′(xi)M_i = S''(x_i)。自然边界条件立即固定 M0=0M_0=0 与 Mn=0M_n=0,剩下 n−1n-1 个未知量 M1,…,Mn−1M_1,\dots,M_{n-1} 待定。

第二步(由M值重构每个三次段)。在 [xi,xi+1][x_i,x_{i+1}] 上,由于 SS 是三次的,故 S′′S'' 是线性的,必为经过 (xi,Mi)(x_i,M_i) 与 (xi+1,Mi+1)(x_{i+1},M_{i+1}) 的直线。将该线性函数积分两次,并利用 S(xi)=yiS(x_i)=y_i 与 S(xi+1)=yi+1S(x_{i+1})=y_{i+1} 固定两个积分常数,便完全确定了该段上的 SS,用 Mi,Mi+1,yi,yi+1M_i, M_{i+1}, y_i, y_{i+1} 及间距 hi=xi+1−xih_i=x_{i+1}-x_i 表示。因此一旦所有 MiM_i 已知,SS 便完全确定。

第三步(斜率匹配给出线性方程组)。按构造,SS 与 S′′S'' 在每个节点处已经连续。要求一阶导数 S′S' 在每个内部节点 xix_i(i=1,…,n−1i=1,\dots,n-1)处从两侧也一致,便在每个内部节点处产生一个关联三个连续未知量的线性方程:hi−1Mi−1+2(hi−1+hi)Mi+hiMi+1=6(yi+1−yihi−yi−yi−1hi−1)h_{i-1} M_{i-1} + 2(h_{i-1}+h_i) M_i + h_i M_{i+1} = 6\left(\dfrac{y_{i+1}-y_i}{h_i} - \dfrac{y_i-y_{i-1}}{h_{i-1}}\right)。这给出关于 n−1n-1 个未知量 M1,…,Mn−1M_1,\dots,M_{n-1}(利用 M0=Mn=0M_0=M_n=0)的 n−1n-1 个线性方程。

第四步(方程组有唯一解)。该方程组的系数矩阵是三对角矩阵,对角元为 2(hi−1+hi)2(h_{i-1}+h_i),非对角元为 hi−1h_{i-1} 与 hih_i;由于所有间距 hi>0h_i>0,故 2(hi−1+hi)>hi−1+hi2(h_{i-1}+h_i) > h_{i-1}+h_i,该矩阵严格对角占优,而严格对角占优矩阵总是可逆的。因此关于 M1,…,Mn−1M_1,\dots,M_{n-1} 的线性方程组恰有一个解,由第二步这唯一确定了一条样条 SS,从而同时证明了存在性与唯一性。

大学实际应用与典型例题

只要数据是采样得到的、却需要一条连续曲线,插值就无处不在:计算机字体和动画路径用样条绘制,GPS接收机把少量卫星读数插值成平滑轨迹,图像和音频的重采样在缩放或改变播放速度时在像素或样本之间插值,工程师则对仅在几个温度或压力下测得的稀疏材料属性表或热力学数据表进行插值。金融分析师从仅在少数几个期限观察到的债券价格中插值出收益率曲线,用以对介于其间到期的金融工具定价。

例题: 用拉格朗日插值从三个测量值预测趋势

某实验室记录了三个测量值 (0,1)(0,1)、(1,3)(1,3)、(2,7)(2,7)。用经过这三点的拉格朗日插值多项式,估计 x=3x=3 处的值。

解答

第一步:写出在 x=3x=3 处求值的三个基多项式。取节点 x0=0,x1=1,x2=2x_0=0,x_1=1,x_2=2:L0(3)=(3−1)(3−2)(0−1)(0−2)=22=1L_0(3)=\dfrac{(3-1)(3-2)}{(0-1)(0-2)}=\dfrac{2}{2}=1,L1(3)=(3−0)(3−2)(1−0)(1−2)=3−1=−3L_1(3)=\dfrac{(3-0)(3-2)}{(1-0)(1-2)}=\dfrac{3}{-1}=-3,L2(3)=(3−0)(3−1)(2−0)(2−1)=62=3L_2(3)=\dfrac{(3-0)(3-1)}{(2-0)(2-1)}=\dfrac{6}{2}=3。

第二步:用各自的数据值加权每个基值。数据值为 y0=1,y1=3,y2=7y_0=1, y_1=3, y_2=7,故估计值为 P(3)=y0L0(3)+y1L1(3)+y2L2(3)=1(1)+3(−3)+7(3)P(3) = y_0 L_0(3) + y_1 L_1(3) + y_2 L_2(3) = 1(1) + 3(-3) + 7(3)。

第三步:求和。P(3)=1−9+21=13P(3) = 1 - 9 + 21 = 13。

第四步:用显式多项式验证。直接求解经过三点的二次多项式得 P(x)=x2+x+1P(x)=x^2+x+1,确实 P(3)=9+3+1=13P(3)=9+3+1=13,这在完全不显式写出多项式系数的情况下验证了拉格朗日形式的计算。

例题: 为什么插值误差在边界附近会爆炸:初探龙格现象

取 [−1,1][-1,1] 上的 55 个等距节点 x0=−1,x1=−0.5,x2=0,x3=0.5,x4=1x_0=-1, x_1=-0.5, x_2=0, x_3=0.5, x_4=1。分别在靠近中心的点 x=0.1x=0.1 和靠近边界的点 x=0.9x=0.9 处计算节点多项式 w(x)=∏i=04(x−xi)w(x)=\prod_{i=0}^{4}(x-x_i),并比较它们的大小。

解答

第一步:计算 w(0.1)w(0.1)。w(0.1)=(0.1+1)(0.1+0.5)(0.1−0)(0.1−0.5)(0.1−1)=(1.1)(0.6)(0.1)(−0.4)(−0.9)w(0.1)=(0.1+1)(0.1+0.5)(0.1-0)(0.1-0.5)(0.1-1) = (1.1)(0.6)(0.1)(-0.4)(-0.9),展开得 0.023760.02376。

第二步:计算 w(0.9)w(0.9)。w(0.9)=(0.9+1)(0.9+0.5)(0.9−0)(0.9−0.5)(0.9−1)=(1.9)(1.4)(0.9)(0.4)(−0.1)w(0.9)=(0.9+1)(0.9+0.5)(0.9-0)(0.9-0.5)(0.9-1) = (1.9)(1.4)(0.9)(0.4)(-0.1),展开得 −0.09576-0.09576,故 ∣w(0.9)∣=0.09576|w(0.9)|=0.09576。

第三步:比较。尽管 0.90.9 和 0.10.1 都稳稳地位于 [−1,1][-1,1] 内部,∣w(0.9)∣≈0.0958|w(0.9)| \approx 0.0958 却大约是 ∣w(0.1)∣≈0.0238|w(0.1)| \approx 0.0238 的 44 倍。

第四步:与误差公式相联系。由于插值误差为 f(x)−P(x)=f(n+1)(ξ)(n+1)!w(x)f(x)-P(x)=\dfrac{f^{(n+1)}(\xi)}{(n+1)!}w(x),边界附近更大的 ∣w(x)∣|w(x)| 会直接放大那里的误差界;对于像 f(x)=11+25x2f(x)=\dfrac{1}{1+25x^2} 这样高阶导数增长极快的函数,这种边界放大效应(随着等距节点增多而进一步恶化)正是产生所谓龙格现象的剧烈振荡的原因——这正是使用三次样条或非均匀(切比雪夫)节点、而不是提高单一等距多项式次数的动机。

给定 55 个互异数据点,由存在唯一性定理保证的唯一插值多项式的次数是多少?

拉格朗日基多项式 Li(xi)L_i(x_i) 在其自身节点 xix_i 处的值是多少?

某工程师用单一的 88 次多项式拟合了某材料热导率的 99 个等距测量值。在测量范围两端附近,尽管真实热导率变化平滑,但拟合曲线却剧烈振荡。标准的解决办法是什么?

若在某区间上 ∣f(n+1)(x)∣≤M|f^{(n+1)}(x)| \le M 且节点多项式满足 ∣w(x)∣≤W|w(x)| \le W,拉格朗日误差公式给出的 ∣f(x)−P(x)∣|f(x)-P(x)| 的界是什么?