【学习笔记】函数逼近与数据拟合

函数逼近与数据拟合

多项式插值

拉格朗日插值

插值公式

已知\(y=f(x)\)的函数表为

\(x\) \(x_0\) \(x_1\) \(x_n\)
\(f(x)\) \(f(x_0)\) \(f(x_1)\) \(f(x_n)\)

寻找\(n\)次多项式\(L_n(x)\)使满足插值条件:\(f(x_i)=L_n(x_i)(i=0,...,n)\)

\[L_n(x)=\sum_{k=0}^n f(x_k)l_k(x) \]

\[l_k(x)=\frac{(x-x_0)(x-x_1)...(x-x_{k-1})(x-x_{k+1})...(x-x_n)}{(x_k-x_0)(x_k-x_1)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n)} \]

\(l_k(x)\)是设计出来的形式,满足条件。[1]

引入记号:

\[\omega_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_n)=\prod_{j=0}^n(x-x_j) \]

\[\omega_{n+1}^{\prime}(x_k)=(x_k-x_0)(x_k-x_1)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n)=\prod_{j=0,j\ne k}^n(x_k-x_j) \]

则:

\[L_n(x)=\sum_{k=0}^n\frac{\omega_{n+1}(x)}{(x-x_k)\omega_{n+1}^{\prime}(x_k)}f(x_k) \]

插值误差 / 插值余项表达式

在非节点处有误差,记为\(R_n(x)\),则\(R_n(x)=f(x)-L_n(x)\)

\[|R_n(x)|=\frac{f^{(n+1)}(\xi)}{(n+1)!}\omega_{n+1}(x) \]

其中\(f^{(n+1)}\)表示(n+1)阶导数。

由于\(\xi\)在(a,b)内的具体位置通常不能确切给出,求\(M_{n+1}=\max_{a<x<b}|f^{(n+1)}(x)|\),得到误差的边界

\[|R_n(x)|\le \frac{M_{n+1}}{(n+1)!}\omega_{n+1}(x) \]

可知,误差和节点\(x_0...x_n\)有关,为使误差小,应使\(|\omega_{n+1}(x)|\)尽可能小,即插值基点尽可能靠近\(x\)

公式记忆

线性插值

\[L_1(x)=\frac{x-x_1}{x_0-x_1}f(x_0)+\frac{x-x_0}{x_1-x_0}f(x_1) \]

\[R_1(x)=\frac{f^{(2)}(\xi)}{2}(x-x_0)(x-x_1) \]

抛物线插值

\[L_2(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}f(x_0)+\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}f(x_1)+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}f(x_2) \]

\[R_2(x)=\frac{f^{(3)}(\xi)}{3!}(x-x_0)(x-x_1)(x-x_2) \]

牛顿插值

基于拉格朗日插值的改进,拉氏插值在更新节点数量时,每次都要重新计算L,设计一种方法避免重复计算。

差商

\(\frac{f(x_j)-f(x_i)}{x_j-x_i}\)为函数\(f(x)\)关于节点\(x_i,x_j\)的一阶差商,记为:

\[f[x_i,x_j]=\frac{f(x_j)-f(x_i)}{x_j-x_i} \]

称两个一阶差商\(f[x_i,x_j]\)\(f[x_j,x_k]\)之间的差商为二阶差商,即:

\[f[x_i,x_j,x_k]=\frac{f[x_j,x_k]-f[x_i,x_j]}{x_k-x_i} \]

\(k\)阶差商:

\[f[x_0,x_1,...,x_k]=\frac{f[x_1,...,x_k]-f[x_0,...,x_{k-1}]}{x_k-x_0} \]

基本性质:

  1. \(k\)阶差商可表示为函数值的线性组合。

    \[f[x_0,x_1,...,x_k]=\sum_{i=0}^n\frac{f(x_i)}{\omega^{\prime}_{k+1}(x_i)} \]

  2. 差商具有对称性,在\(f[x_0,x_1,...,x_k]\)中任意改变节点次序,值不变。

    \[f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}=\frac{f[x_0,x_2]-f[x_0,x_1]}{x_2-x_1} \]

  3. \(n\)次多项式\(f(x)\)\(k\)阶差商\(f[x,x_0,...,x_{k-1}]\),当\(k\le n\)\(n-k\)次多项式,当\(k>n\)时其值恒等于0。

  4. \(f[x,x_0,...,x_{k}]=\frac{f^{(k)}(\xi)}{k!}\),其中\(\xi\)介于\(x_0,...,x_k\)的最大值和最小值之间。

节点相重时的差商,有:

\[f[x,x,x_0,...,x_k]=\frac{d}{dx}f[x,x_0,...,x_n] \]

\[f\underbrace{[x,x,...,x]}_{n+1个}=\frac{f^{(n)}(x)}{n!} \]

Newton插值多项式

用差商来构造:

\[N_n(x)=f(x_0)+f[x_0,x_1](x-x_0)+...+f[x_0,x_1,...,x_n](x-x_0)...(x-x_{n-1}) \]

\[\tilde{R}_n(x)=f[x,x_0,...,x_n](x-x_0)...(x-x_{n-1})(x-x_n) \]

\(f(x)=N_n(x)+\tilde{R}_n(x)\)

Newton插值多项式有递推关系式:

\[N_{k+1}(x)=N_k(x)+f[x_0,x_1,...,x_k,\bar{x}](x-x_0)...(x-x_k) \]

公式记忆

差商表

\(x_i\) \(f(x_i)\) 一阶差商 二阶差商 三阶差商 四阶差商
\(x_0\) \(f(x_0)\)
\(x_1\) \(f(x_1)\) \(f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0}\)
\(x_2\) \(f(x_2)\) \(f[x_1,x_2]\) \(f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}\)
\(x_3\) \(f(x_3)\) \(f[x_2,x_3]\) \(f[x_1,x_2,x_3]\) \(f[x_0,x_1,x_2,x_3]=\frac{f[x_1,x_2,x_3]-f[x_0,x_1,x_2]}{x_3-x_0}\)
\(x_4\) \(f(x_4)\) \(f[x_3,x_4]\) \(f[x_2,x_3,x_4]\) \(f[x_1,x_2,x_3,x_4]\) \(f[x_0,x_1,x_2,x_3,x_4]\)

* 等距节点插值

差分

等距节点:\(x_i=x_0+ih \ \ i = 0,1,...,n\),其中 \(h\) 称为步长。称等距节点对应的函数值之差为差分。\(f_{k+1}-f_k\)\(f(x)\)\(x_k\) 处步长为 \(h\) 的一阶向前差分,简称一阶差分:

\[\Delta f_k=f_{k+1}-f_k \]

\(f(x)\)\(x_k\) 处步长为 \(h\) 的二阶向前差分:

\[\Delta^2f_k = \Delta f_{k+1}-\Delta f_k \]

\(f(x)\)\(x_k\) 处步长为 \(h\)\(m\) 阶向前差分:

\[\Delta^m f_k = \Delta ^{m-1} f_{k+1}-\Delta ^{m-1} f_k \]

差分和差商之间的关系:

\[f[x_i,...,x_{i+k}]=\frac{\Delta^k f_i}{k!h^k} \]

将牛顿插值公式中各阶差商分别用相应的差分代替,得到等距节点的插值公式。

牛顿前插公式

已知节点 \(x_i = x_0+ih \ \ i = 0,1,...,n\),要用 \(m+1\) 个函数值信息计算靠近 \(x_0\) 附近点的函数近似值,则:

\[N_m(x)=f_0+t\Delta f_0 +\frac{t(t-1)}{2!}\Delta^2 f_0+...+\frac{t(t-1)...(t-m+1)}{m!}\Delta ^mf_0 \]

\[R_m(x)=\frac{h^{m+1}f^{(m+1)}(\xi)}{(m+1)!}t(t-1)...(t-m) \quad \xi \in (x_0,x_m) \]

其中 \(t\) 表示 \(x=x_0+th \ \ 0 \le t \le m\),从 \(x\)\(x_0\) 的步数。

牛顿后插公式

\(m+1\) 个函数值信息计算靠近 \(x_n\) 附近点的函数近似值,则:

\[N_m(x)=f_n+t\Delta f_{n-1} +\frac{t(t+1)}{2!}\Delta^2 f_{n-2}+...+\frac{t(t+1)...(t+m-1)}{m!}\Delta ^mf_{n-m} \]

\[R_m(x)=\frac{h^{m+1}f^{(m+1)}(\xi)}{(m+1)!}t(t+1)...(t+m) \quad \xi \in (x_{n-m},x_n) \]

公式记忆

一般当\(x\)靠近\(x_0\)时用前插,靠近\(x_n\)时用后插。如果对相同节点进行插值,前插公式和后插公式只有形式上的区别,实际是一个多项式,即:

\[N_n(x)=f_0 +\frac{\Delta f_0}{h}(x-x_0)+...+\frac{\Delta^n f_0}{n!h^n}(x-x_0)...(x-x_{n-1}) \]

\[N_n(x)=f_n +\frac{\Delta f_{n-1}}{h}(x-x_n)+...+\frac{\Delta^n f_0}{n!h^n}(x-x_n)...(x-x_1) \]

常用公式:

三次前插

\[N_3(x)=f_0+\frac{\Delta f_0}{h}(x-x_0)+\frac{\Delta^2f_0}{2!h^2}(x-x_0)(x-x_1)+\frac{\Delta ^3 f_0}{3!h^3}(x-x_0)(x-x_1)(x-x_2) \]

二次后插

\[N_2(x)=f_2+\frac{\Delta f_1}{h}(x-x_2)+\frac{\Delta ^2 f_0}{2!h^2}(x-x_2)(x-x_1) \]

PS: 差分值从差分表中直接读取

差分表

\(x_i\) \(f_i\) \(\Delta f_i\) \(\Delta^2 f_i\) \(\Delta^3 f_i\) \(\Delta^n f_i\)
\(x_0\) \(f_0\)
\(\Delta f_0\)
\(x_1\) \(f_1\) \(\Delta^2 f_0\)
\(\Delta f_1\) \(\Delta^3 f_0\)
\(x_2\) \(f_2\) \(\Delta^2 f_1\) \(\Delta^n f_0\)
\(\Delta f_2\) \(\Delta^3 f_{n-3}\)
\(x_3\) \(f_3\) \(\Delta^2 f_{n-2}\)
\(\Delta f_{n-1}\)
\(x_n\) \(f_n\)

规律:前插就是上到下一条线的系数,后插就是下到上的一条线。n次插值用到n个系数。

埃尔米特插值

多项式插值在次数较高时,会产生Runge现象,解决方法是加入导数约束、分段插值。

埃尔米特插值不仅要求节点处函数值相等,还要求导数值相等。

设已知 \(y=f(x)\) 的函数及导数表为:

\(x_i\) \(x_0\) \(x_1\) \(x_n\)
\(f(x_i)\) \(f(x_0)\) \(f(x_1)\) \(f(x_n)\)
\(f^{\prime}(x_i)\) \(f^{\prime}(x_0)\) \(f^{\prime}(x_1)\) \(f^{\prime}(x_n)\)

寻求 \(2n+1\) 次多项式 \(H_{2n+1}(x)\) 满足:

\[H_{2n+1}(x_k)=f(x_k) \\ H^{\prime}_{2n+1}(x_k)=f^{\prime}(x_k)\quad k=0,1,...,n \]

埃尔米特插值多项式

构造插值基函数 \(h_i(x),\bar{h}_i(x)\) 使得 \(H_{2n+1}(x)=\sum_{i=0}^nh_i(x)f(x_i)+\sum_{i=0}^n \bar{h}_i(x)f^{\prime}(x_i)\)

注意埃尔米特插值和拉格朗日插值的相同点

根据公式(2),有:

\[l_i(x)=\frac{(x-x_0)(x-x_1)...(x-x_{i-1})(x-x_{i+1})...(x-x_n)}{(x_i-x_0)(x_i-x_1)...(x_i-x_{i-1})(x_i-x_{i+1})...(x_i-x_n)} \]

构造埃尔米特插值基函数:

\[h_i(x)=(1-2l^{\prime}_i(x_i)(x-x_i))l^2_i(x) \]

\[\bar{h}_i(x)=(x-x_i)l_i^2(x) \]

\(l_i(x)\) 两端取对数求导后,可以得到 \(l^{\prime}_i(x)\)

\[l^{\prime}_i(x_i)=\sum_{k=0,k\ne i}^n \frac{1}{x_i-x_k} \]

所以,埃尔米特插值多项式为:

\[H_{2n+1}(x)=\sum_{i=0}^n(1-2\sum_{k=0,k\ne i}^n \frac{1}{x_i-x_k}(x-x_i))l_i^2(x)f(x_i)+\sum_{i=0}^n(x-x_i)l_i^2(x)f^{\prime}(x_i) \]

\[R_{2n+1}(x)=\frac{f^{(2n+2)}(\xi)}{(2n+2)!}\omega^2_{n+1}(x) \]

注意:余项\(R=f_{原}-f_{插}\),给定了函数的导数,要注意0,要结合函数值,注意余项平方。

最小二乘拟合

最小二乘问题

由实验采集到大量观测数据:

\(x_i\) \(x_1\) \(x_2\) \(x_3\) \(x_N\)(N很大)
\(y_i\) \(y_1\) \(y_2\) \(y_3\) \(y_N\)

已知基函数 \(\phi_0(x),\phi_1(x),...,\phi_n(x)(n \ll N )\)(需线性无关),寻找 \(p_n(x)=\sum_{k=0}^n a_k \phi_k(x)\) ,使得误差函数 \(\Phi(a_0,a_1,...,a_n)=\sum_{k=0}^N \omega_k(f(x_k)-p_n(x_k))^2\) 达到最小,其中 \(\omega_k\) 是权系数,称 \(p_n(x)\) 为拟合函数。[2]

\(\delta_i=f(x_i)-p_n(x_i)(i=1,...,N)\) ,则称\(\delta_i\)\(x_i\)处的偏差或残差。将基函数取为幂函数,即\(\phi_k(x)=x^k,k=0,1,...,n\),考虑误差函数:

\[\Phi(a_0,a_1,...,a_n)=\sum_{k=0}^N \omega_k\delta_i^2=\sum_{k=0}^N \omega_k(f(x_i)-\sum_{k=0}^na_kx_i^k)^2 \]

称多元极值问题

\[\Phi(a_0^{\star},a_1^{\star},...,a_n^{\star})=\min_{a_0,...,a_n\in R}\Phi(a_0,...,a_n) \]

为最小二乘问题,其解对应的

\[p_n^{\star}(x)=a_0^{\star}+a_1^{\star}x+...+a_n^{\star}x^n \]

为数据 \((x_i,f(x_i)),i=0,...,N\)\(n\) 次最小二乘拟合多项式。

解(42)式应满足方程组 \(\frac{\partial \Phi}{\partial a_j}=0\),即

\(n+1\) 阶线性方程组称为正规方程组(或法方程组)。

记公式

如果是 \(y=a+bx\),对应 \(j=0,1\),则 \(a,b\) 应满足的正规方程组为:

\[a\sum_{i=1}^n\omega_i+b\sum_{i=1}^n\omega_ix_i=\sum_{i=1}^n\omega_if(x_i)\\ a\sum_{i=1}^n\omega_ix_i+b\sum_{i=1}^n\omega_ix_i^2=\sum_{i=1}^n\omega_ix_if(x_i) \]

如果是 \(y=a+bx^2\),对应 \(j=0,2\),则 \(a,b\) 应满足的正规方程组为:

\[a\sum_{i=1}^n\omega_i+b\sum_{i=1}^n\omega_ix_i^2=\sum_{i=1}^n\omega_if(x_i)\\ a\sum_{i=1}^n\omega_ix_i^2+b\sum_{i=1}^n\omega_ix_i^4=\sum_{i=1}^n\omega_ix_i^2f(x_i) \]

如果经验公式是幂函数形式,就先取对数变成加和形式。


  1. 设计出的系数形式,\(i=k\)时为1,其余为0。 ↩︎

  2. 权系数反映该点数据的重要程度。如果题目没有给出,默认都是1。若观测数据有明显周期性,基函数取三角函数;若观测数据有明显单调性,基函数取指数函数;一般情况下,基函数可取幂函数。\(\phi_k(x)=x^k\)↩︎

posted @ 2020-09-07 16:45  ColleenHL  阅读(793)  评论(0编辑  收藏  举报