一、4种插值方法及其误差估计
1、多项式插值(以单项式为基地)
(Ⅰ)解题思路
\[P_n(x)=a_0+a_1x+……+a_nx^n \]将\(\{x\}_{i=0}^n\)代入,构造出一个关于系数\(a_0,a_1,……,a_n\)的\(n+1\)元线性方程组,并解出\(\{a\}\)。
由于这种插值方法是最繁杂的,所以一般不会用到(除非在小学生面前装*),所以也不会考虑其误差,如果非得考虑的话,由
范德蒙德矩阵可知,矩阵非奇异所以\(P_n(x)\)存在且唯一,故而误差和其他插值方法的误差是一样的,这里就不做讨论了。
(Ⅱ)例题(参考《数值分析 第五版》\(P_{48}\ T_1\))
题目: 当\(x=1,-1,2\)时,\(f(x)=0,-3,4\),用单项式基底求\(f(x)\)的二次差值多项式。
解答:
构造插值函数:\(P_2(x)=a_0+a_1x+a_2x^2\),这时代入\(\{x\}_{i=0}^2\),得到如下的3元线性方程组:
\[\begin{cases} P_2(x_0)=a_0+a_1x_0+a_2x_{0}^2=0\\\\ P_2(x_1)=a_0+a_1x_1+a_2x_{1}^2=-3\\\\ P_2(x_2)=a_0+a_1x_2+a_2x_{2}^2=4 \end{cases} \Longrightarrow \begin{cases} P_2(1)=a_0+a_1+a_2=0\\\\ P_2(-1)=a_0-a_1+a_2=-3\\\\ P_2(2)=a_0+2a_1+4a_2=4 \end{cases} \]解得:
\[\begin{cases} a_0=-\ \frac{7}{3}\\\\ a_1=\quad\frac{3}{2}\\\\ a_2=\quad\frac{5}{6} \end{cases} \]所以最后得出插值函数:\(P_2(x)=-\frac{7}{3}+\frac{3}{2}x+\frac{5}{6}x^2\)。
2、拉格朗日插值法
(Ⅰ)解题思路
\[L_n(x)=\sum_{i=0}^n{f(x_i)\times\frac{(x-x_0)…(x-x_{j-1})(x-x_{j+1})…(x-x_n)}{(x_j-x_0)…(x_j-x_{j-1})(x_j-x_{j+1})…(x_j-x_n)}} \]\[R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}\times\omega_{n+1}(x),\xi\in(a,b) \]所以线性插值的函数和误差估计为:
\[L_1(x)={f(x_0)\times\frac{(x-x_1)}{(x_0-x_1)}+f(x_1)\times\frac{(x-x_0)}{(x_1-x_0)}} \]\[R_1(x)=\frac{f^{(2)}(\xi)}{2}\times(x-x_0)(x-x_1),\xi\in(x_0,x_1) \]二次插值的函数和误差估计为:
\[L_2(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}\times f(x_0)+\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}\times f(x_1)+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}\times f(x_2) \]\[R_2(x)=\frac{1}{3!}f^{(3)}(\xi)(x-x_{0})(x-x_{1})(x-x_{2}) \]有上述的误差分析可以看到,\(n\)阶拉格朗日插值法对\(n\)阶及其以下的\(f(x)\)都准确成立,所以精度为\(n\)。
(Ⅱ)例题
例题1(参考《数值分析 第五版》\(P_{48} T_1\))\(\Longrightarrow\) 解出插值函数
题目: 当\(x=1,-1,2\)时,\(f(x)=0,-3,4\),用拉格朗日插值基底求\(f(x)\)的二次差值多项式。
解答:
\[\begin{cases} &l_0(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}=-\ \frac{1}{2}(x+1)(x-2)\\\\ &l_1(x)=\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}=\quad\frac{1}{6}(x-1)(x-2)\\\\ &l_2(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}=\quad\frac{1}{3}(x-1)(x+1) \end{cases} \]所以解得\(L_2(x)=0*[-\frac{1}{2}(x+1)(x-2)]+(-3)*\frac{1}{6}(x-1)(x-2)+4*\frac{1}{3}(x-1)(x+1)=-\frac{1}{2}(x-1)(x-2)+\frac{4}{3}(x-1)(x+1)\)。
例题2(参考《数值分析 第五版》\(P_{48} T_4\))\(\Longrightarrow\) 拉格朗日插值的精度
题目: 设\(x_j\)为互异节点(\(j=0,1,…,n\)),求证:\(\sum_{j=0}^{n}{[x_j^k\times l(x_j)]}\equiv x^k\),\(k=0,1…n\)。
解答:
根据拉格朗日插值函数模型,我们不妨设\(f(x)=x^k\);也就是说我们证的是\(L_n(x)\equiv f(x)\),即证\(R_n(x)\equiv0\);根据拉格朗日插值的误差估计,我们不难得出\(R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}\times\omega_{(n+1)}(x)\);这个时候考察\(f^{(n+1)}(\xi)\),由于\(f(x)=x^k\)为\(k\)阶多项式,并且\(k\le n\),所以\(f^{(n+1)}(\xi)\equiv0\),故而\(R_n(x)\equiv0\),证毕;
总结: 此题可以得出结论——\(n\)阶拉格朗日插值多项式的精度为\(n\),也就是对\(n\)阶以内的函数都准确成立;
例题3(参考《数值分析 第五版》\(P_{48} T_5\))\(\Longrightarrow\) 拉格朗日插值中线性插值的误差分析
题目: 设\(f(x)\in C^2[a,b]\)且\(f(a)=f(b)=0\),求证:\(\underset{a\le x\le b}{max}|f(x)|\le\frac{1}{8}(b-a)^2\times\underset{a\le x\le b}{max}|f^{(2)}(x)|\)。
解答:
很显然,只给了两个点,正好两个插值条件,所以我们使用线性插值方法,构造线性插值函数:
\[L_1(x)={f(x_0)\times\frac{(x-x_1)}{(x_0-x_1)}+f(x_1)\times\frac{(x-x_0)}{(x_1-x_0)}}=0 \]所以\(f(x)=L_1(x)+R_1(x)=R_1(x)=\frac{f^{(2)}(\xi)}{2}\times(x-a)(x-b),\xi\in(a,b)\);所以考虑到\((x-a)(x-b)\)在\((a,b)\)上的最大值在\(x=\frac{a+b}{2}\)处,值为\((\frac{b-a}{2})^2\),所以即可得出结论:\(\underset{a\le x\le b}{max}|f(x)|\le\frac{1}{8}(b-a)^2\times\underset{a\le x\le b}{max}|f^{(2)}(x)|\),证毕。
总结: 把握线性插值的误差估计,\(\omega_{n+1}(x)\)在中点出去的最大值。顺便掌握\(n\)阶拉格朗日插值的误差。
例题4(参考《数值分析 第五版》\(P_{48} T_6\))\(\Longrightarrow\) 拉格朗日插值中二次插值的误差分析
题目: 在\(-4\le x\le4\)给出\(f(x)=e^x\)的等距节点函数表,若用二次差值求\(e^x\)的近似值,要使截断误差不超过\(10^{-6}\),求出函数表的步长\(h\)应取多少?
解答:
\[R_h(x)=\frac{1}{3!}f^{(3)}(\xi)(x-x_{i-1})(x-x_{i})(x-x_{i+1}) \]令\(x=x_i+th\),则\(x_{i-1},x_i,x_{i+1}\)分别对应\(t=-1,0,1\),故而有:
\[(x-x_{i-1})(x-x_{i})(x-x_{i+1})=(t-1)t(t+1)h^3 \]要求是截断误差不超过\(10^{-6}\),所以只要误差限不超过\(10^{-6}\)即可,而误差限就是\(|R_h(x)|\)的最大值。设函数:\(\psi(t)=(t-1)t(t+1)\),现在分别考虑\(f^{(3)}(\xi)\)和\(\psi(t)\)的最大值。
对\(\psi(t)\)求一阶导可得:\(\psi^{\'}(t)=3t^2-1\),所以有\(|\psi(t)|\)在\([0,1]\)上的最大值为\(|\psi(\frac{1}{\sqrt{3}})|=\frac{2\sqrt{3}}{9}\);
\(\underset{-4\le x\le4}{max}|f^{(3)}(x)|=\underset{-4\le x\le4}{max}|e^x|=|e^4|=54.60\);
所以得出\(\underset{-4\le x\le4}{max}|R_h(x)|=\frac{\sqrt{3}}{27}\cdot54.60\times h^3\le10^{-6}\Longrightarrow h\le0.0066\);
总结: 看似有步长,为分段插值,其实本质上就是分析拉格朗日插值法的误差,熟练掌握拉格朗日插值法的误差估计:\(R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)}\times\omega_{n+1}(x)\),通过代入给出的\(f(x)\)的表达式来判断\(f^{(n+1)}(\xi)\)的最大值,并结合\(\omega_{n+1}(x)\)的最大值(此处一般都是整一个步长\(h=\underset{k}{max}\ h_k\),然后将\(x_i\)和\(x\)替换掉,构造成一个\(t\)的函数),从而确定出\(n\)阶拉格朗日插值多项式的误差限。
3、牛顿插值
(Ⅰ)解题思路
牛顿插值有两种表达形式:
均差形式的牛顿插值和差分形式的牛顿插值。第一种:均差形式的牛顿插值
\[\begin{equation}\begin{aligned}P_n(x) &= f(x_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_1)...(x-x_{n-1})\end{aligned}\end{equation} \]\[R_n(x) = f[x, x_0, x_1, ..., x_n]·\omega_{n+1}(x) \]只有各阶的均差我们是不知道的,但是我们可以通过构造均差表来求得。
并且值得注意的一点是:在高阶均差中的同阶均差相差不多,可以近似相等,这可以简化求误差限;同样也正是因为这个原因,我们在求误差限的时候通常是将\(f[x, x_0, x_1, ..., x_n]\)换成\(f[x_0, x_1, ..., x_n,x_{n+1}]\),也就是说我们需要\(n+2\)个点才能估计出
均差形式的误差限。第二种:差分形式的牛顿插值(牛顿前插公式)
\[P_n(x_0+th) = f_0+t\Delta f_0+\frac{t(t-1)}{2!}\Delta^2f_0+…+\frac{t(t-1)…(t-n+1)}{n!}\Delta^nf_0 \]\[R_n(x) = \frac{t(t-1)…(t-n+1)}{(n+1)!}h^{n+1}f^{(n+1)}(\xi),其中\xi \in [x_0, x_n] \]同样的,我们可以通过构造差分表来获取\(x_0\)点处的各阶差分。
与
均差形式的牛顿插值不同,差分形式的牛顿插值在解算误差限的时候只需要\(n+1\)个点。不过我们依然可以看到,差分形式是由均差形式通过“均差-差分”(\(f[x_k, ..., x_{k+m}] = \frac{1}{m}\frac{1}{h^m}\Delta^mf_k,其中m=1,2,...,n\))以及“差分-导数”(\(\Delta^nf_k = h^nf^{(n)}(\xi)\),其中\(\xi \in [x_k, x_{k+n}]\))这两层关系推出来的,也就是说将\(f[x, x_0, x_1, ..., x_n]\)换成了\(f^{(n+1)}(\xi)\),这样就要求\(f(x)\)的\(n+1\)阶导数。
总结: 当插值函数是一个复杂函数(这里的复杂指的是原函数的导数不容易得出)时,如:\(f(x)=\sqrt{\frac{\cos x+2\sin x}{2\cos x-\sin x}}\),想求\(n+1\)阶导数几乎是不存在的(除非你是徐半仙或者聂星人或者许外挂),这是我们就只能通过构造
均差表来解算其误差限;当插值函数是一个简单函数时,如\(f(x)=\cos x\),这时求\(n+1\)阶导数赶赶单单没有\(len\)何挑战,所以就可以构造差分表来解算误差限。一般地,题目中应该会给我们\(n+2\)个点来研究\(n\)次的牛顿插值。但是如果题目中的原函数是复杂函数,并且只给了\(n+1\)个点,这个时候我们不用慌,还有\(PlanB\)——题目肯定是要我们求\(f(m)\)的近似值,其中\(m\in(x_0,x_n)\),这个时候就相当于给了我们第\(n+2\)个点:\(m\),我们就能够通过\(f(m)\)的值(代入表达式中获得的近似值)来求得\(f[x, x_0, x_1, ..., x_n]\)。
(Ⅱ)例题
例题1(参考《数值分析 第五版》\(P_{32} 例题4\))\(\Longrightarrow\)
均差形式的牛顿插值及其误差估计题目: 给出\(f(x)\)的函数表求4次牛顿插值多项式,并由此计算\(f(0.596)\)的近似值及其误差限。
解答:
首先根据给定函数表构造《函数-均差表》:
\(x\) \(f(x)\) \(\Delta f^{(1)}\) \(\Delta f^{(2)}\) \(\Delta f^{(3)}\) \(\Delta f^{(4)}\) \(\Delta f^{(5)}\) \(0.40\) \(\underline{0.41075}\) \(0.55\) \(0.57815\) \(\underline{1.11600}\) \(0.65\) \(0.69675\) \(1.18600\) \(\underline{0.28000}\) \(0.80\) \(0.88811\) \(1.27573\) \(0.35893\) \(\underline{0.19733}\) \(0.90\) \(1.02652\) \(1.38410\) \(0.43348\) \(0.21300\) \(\underline{0.03134}\) \(1.05\) \(1.25382\) \(1.51533\) \(0.52493\) \(0.22863\) \(0.03126\) \(-\ 0.00012\) \[\begin{equation}\begin{aligned}P_n(x) &= f(x_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_1)...(x-x_{n-1})\end{aligned}\end{equation} \]所以我们可以得到:
\[\begin{equation}\begin{aligned} P_4(x) &= \quad0.41075+1.11600\cdot(x-0.40)+0.28000\cdot(x-0.40)(x-0.55)\\&+\quad0.19733\cdot(x-0.40)(x-0.55)(x-0.65)\\ &+\quad 0.03134\cdot(x-0.40)(x-0.55)(x-0.65)(x-0.80) \end{aligned}\end{equation} \]所以有:\(f(0.596)\approx P_4(0.596)=0.63192\ 3237\),另外我们有截断误差为:
\[|R_4(x)| = |f[x, x_0, x_1, ..., x_4]·\omega_{5}(0.596)|\approx |f[x_0, x_1, ..., x_5]·\omega_{5}(0.596)|\le3.63\times10^{-9} \]\(PlanB\):
以下内容了解即可,考试时一般用不着!!!
大家不难发现,我这里保留了小数点后15位,那是不是保留10位或者更小的有效数字就为0了呢?我们不妨来看一下保留5位和7位的情况:
保留小数点后5位:
保留小数点后7位:
大家不难发现,结果并不是我们想象的那样简单,有效位数对误差影响是非常非常大的,正所谓“差之毫厘谬以千里”,但是我们不用慌,因为如图所示(天机就是拿来泄漏的