数值分析之插值法总结


写在前面

前段时间学习了插值法,虽然当时跟着老师的步骤,将公式推导了出来,但是也还有一些问题没有解决,为了防止遗忘,我把它们都记录在这里,主要分为两部分:

1.知识结构梳理

2.重要公式推导


知识结构梳理

概念的引入

当函数\(f(x)\)很复杂的时候,用一个简单易算的函数\(p(x)\)近似,其中\(p(x)\)是用一系列节点和节点处的函数值构造出来的:
一个区间范围插入\(n+1\)个点 \(x_0,x_1...x_n\)得到\(n+1\)个函数值\(f(x_i)(i=0,1...n)\)
如果\(p(x)\)满足:\(p(x_i)=f(x_i)(i=0,1..n),\)则称\(p(x)\)\(f(x)\)\(n\)次插值函数,求\(p(x)\)的方法称为插值法
\(p(x)\)常为多项式

几个重要的插值法
拉格朗日插值

从一次插值开始,到二次插值,再推广至n次

均差与牛顿插值
样条插值

公式推导

拉格朗日插值:基函数法
  1. 一次插值:
    两个插值节点:\((x_0,y_0),(x_1,y_1)\)用点斜式\(l(x)=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)\)
    整理一下得到

\(l(x)=y_0\frac{x-x_1}{x_0-x_1}+y_1\frac{x-x_0}{x_1-x_0}\)
\(l_0=\frac{x-x_1}{x_0-x_1}\quad l_1=\frac{x-x_0}{x_1-x_0}\)

将公式进一步简化:

\[l_1(x)= \sum_{i=0}^{1} {l_iy_i} \]

其中\(l_i\)就是所谓的基函数。
2.二次插值:和一次相同的方法得到

\[l_2(x)= \sum_{i=0}^{2} {l_iy_i} \]

对于其中基函数\(l_i\)的求法一开始反应不过来,看了PPT才恍然大悟 因为对于插值函数
肯定要满足:
\(l_2(x_j)=y_j (j=0,1,2)\)
\(y_j\)的三个值分别代入,显然可以得到:

\(l_2(x_0)=y_0\)
\(l_2(x_1)=y_1\)
\(l_2(x_2)=y_2\)

可以看出在插值函数表达式中,只有和x下标相同的那项被保留了下来。由此可推出:

\(l_0(x_0)=1, l_0(x_1)=0, l_0(x_2)=0\)
\(l_1(x_0)=0, l_1(x_1)=1, l_1(x_2)=0\)
\(l_2(x_0)=0, l_2(x_1)=0, l_2(x_2)=1\)

满足上面这些条件,求基函数显然变简单了,例如求\(l_0\)可设$$l_0(x)=A_0(x-x_1)(x-x_2)$$将\(x_0\)代入这个式子,可以求出

\(A_0=\frac{1}{(x_0-x_1)(x_0-x_2)}\)

\(l_0(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}\)

同理可以求得\(l_1(x),l_2(x)\)
3.n次插值
这一部分已经不大记得清了,当时推导也花了近一节课,最终公式如下:

\[l_n(x)=y_0l_0+y_1l_1+...y_nl_n=\sum_{i=0}^{n} {l_iy_i} \]

其中:

\[l_i=\frac{\overbrace{(x-x_0)(x-x_1)…(x-x_{i-1})(x-x_{i+1})...(x-x_n)}^{n个项}}{(x_i-x_0)(x_i-x_1)…(x_i-x_{i-1})(x-x_{i+1})...(x-x_n)}\\ =\prod_{j≠i,j=0}^{n} \frac{(x-x_j)}{(x_i-x_j)} \]

注意此公式的分子不含\((x-x_i)\)

推导过程就不写了,也记不得了,回头再加上.....


2020.4.2更新 :
今天翻笔记本,发现了之前的推导笔记,喜出望外——不用再重新推导一遍了,特来更新一波~
对于n次插值基函数\(l_i\)的表达式,其实可以从一次,二次表达式中归纳出来,相信读者是和我一样想的,但是为了保持严谨,还是一步一步推导吧!
先补充说明一下,这里\(l_i(x_j)\)有个专门的叫法:拉氏基函数,满足条件:

\[l_i(x_j)=\delta_{ij}= \begin{cases}0&&j≠i\\ \\ 1 &&j=i\end{cases} \]

显然每个\(l_i\)都有\(不含x_i的n\)个根:

\[x_0,x_1...x_{i-1},x_i...x_{n-1},x_n \]

可设

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

\[=\prod_{j≠i,j=0}^{n}A_i(x-x_j) \]

\(l_i(x_i)=1\),得$$A_i=\frac{1}{\prod_{j≠i,j=0}^{n}(x_i-x_j)}$$
代入上面\(l_i\)的公式得:

\[l_i=\frac{(x-x_j)}{\prod_{j≠i,j=0}^{n}(x_i-x_j)},满足l_i(x_j)=\delta_{ij} \]

现在已经推导出\(l_i\)的表达式了,把它代入插值函数

\[L_n(x)=\sum_{i=0}^{n}l_i(x)y_i即可得到 L_n(x)=\sum_{i=0}^{n}[\frac{(x-x_j)}{\prod_{j≠i,j=0}^{n}(x_i-x_j)}y_i]\]

引入一个记号

\[\omega_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_n) \]

不含(x-x_i)项,这里容易误解,明明是n个点,为什么\(\omega\)的下标是n+1?也许两者之间并无关联吧,
emmm...是笔者理解错误,后面求导时发现的,额...继续往下做,话说当老师讲到引入这个记号时,笔者心想大概就是要将\(L_n(x)\)的表达式转换成含\(\omega_{n+1}(x)\)的形式了,只是不知道有什么用...继续继续,第一步是对
\(\omega_{n+1}(x)\)求一阶导,根据求导的定义,分别对这n+1项求导,有:

\[\omega'_{n+1}(x)=(x-x_0)'(x-x_1)...(x-x_n)+(x-x_0)(x-x_1)'...(x-x_n)+(x-x_0)(x-x_1)...(x-x_{i-1})(x-x_i)'...(x-x_n)+(x-x_0)(x-x_1)...(x-x_n)' \]

显然\(\omega'_{n+1}(x)\)的这个式子有\(n+1\)
好了,第二步:将\(x=x_i\)代入上式,所有含\((x-x_i)\)的项都化为0
原式化为:

\[\omega'_{n+1}(x_i)=(x_i-x_0)(x_i-x_1)...(x_i-x_{i-1})(x_i-x_{i+1})...(x_i-x_n) \]

可以看出只有对\((x-x_i)\)一项求导的留了下来。
从而推出

\[\omega'_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_{i-1})(x-x_{i+1})...(x-x_n) \]

\[l_i=\frac{(x-x_j)}{\prod_{j≠i,j=0}^{n}(x_i-x_j)} \]

\[=\frac{\omega_{n+1}(x)}{(x-x_i) \omega'_{n+1}(x)} \]


最终n次插值函数\(L_n(x)\)的表达式为:

\[L_n(x)=\sum_{i=0}^{n}y_i \frac{\omega_{n+1}(x)}{(x-x_i)\omega'_{n+1}(x)} \]

推导完成!


写在最后

这篇文章花费了远超预计的时间,主要是用手机打latex公式太慢了,另外还有排板,好在总算完成了,数值分析有点复杂,但是只要努力就一定能学好,加油~


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM