數值分析之插值法總結


寫在前面

前段時間學習了插值法,雖然當時跟着老師的步驟,將公式推導了出來,但是也還有一些問題沒有解決,為了防止遺忘,我把它們都記錄在這里,主要分為兩部分:

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