Lagrange插值

# Lagrange插值

標(biāo)簽(空格分隔): 數(shù)值方法 插值

---

## 插值

在實(shí)際問(wèn)題中,往往只能觀察到某物理量在有限個(gè)點(diǎn)處的值。如何從這有限個(gè)點(diǎn)值將物理量的函數(shù)恢復(fù)出來(lái),進(jìn)而研究該物理量的特性呢?

另外,在計(jì)算機(jī)中,只能處理有限、離散的信息。它可以通過(guò)保存一些系數(shù)來(lái)表達(dá)特定的函數(shù),如:通過(guò)存貯$a_0,a_1,\cdots,a_n$來(lái)表示多項(xiàng)式$a_0+a_1x+\cdots+a_nx^n$,

或者存貯$a,b,c$來(lái)表示函數(shù)$a\sin(bx+c)$。但對(duì)于一個(gè)任意的函數(shù)$f(x)$,計(jì)算機(jī)就沒(méi)辦法來(lái)表示。一種可選的方法是存貯函數(shù)$f(x)$在有限個(gè)點(diǎn)處的函數(shù)值,然后在需要的時(shí)候,盡可能的將函數(shù)$f(x)$恢復(fù)出來(lái)。

它們的共同的**數(shù)學(xué)模型**是:已知函數(shù)$f(x)$在若干個(gè)點(diǎn)處的函數(shù)值,如何恢復(fù)這個(gè)原來(lái)的函數(shù)$f(x)$?

1. 通過(guò)有限個(gè)點(diǎn)的函數(shù)有無(wú)窮多個(gè)。因此,想要得到原來(lái)的函數(shù)是幾乎不可能的;

2. 只能找一個(gè)原來(lái)函數(shù)的近似函數(shù)。因此,可以找一個(gè)性質(zhì)“好”的,形式上熟悉的近似函數(shù);

$\{x_i\}_{i=0}^n$是$n+1$個(gè)互不相同的點(diǎn),函數(shù)$f(x)$在這些節(jié)點(diǎn)上的函數(shù)值為$f(x_i)$,$\Phi$是已知的函數(shù)類(lèi)(函數(shù)空間)。若$\Phi$中存在一個(gè)函數(shù)$g(x)$,使得

$$

g(x_i)=f(x_i), i=0,1,\cdots,n

$$

則稱(chēng)$g(x)$是$f(x)$的一個(gè)*插值函數(shù)*。$f(x)$稱(chēng)為*原函數(shù)*。$\{x_i\}$稱(chēng)為*插值節(jié)點(diǎn)*。

找一個(gè)性質(zhì)“好”的近似函數(shù),可以通過(guò)使用熟悉的函數(shù)類(lèi)來(lái)得到。如:

1. 多項(xiàng)式 $P_n=span\{1,x,x^2,\cdots,x^n\}$;

2. 三角函數(shù) $S_n=span\{1,\cos x,\sin x,\cos 2x, \sin 2x,\cdots,\cos nx,\sin nx\}$

## 插值函數(shù)的存在唯一性

怎么得到$g(x)$?

設(shè)$\Phi=span\{\phi_0(x),\cdots,\phi_m(x)\}$是一個(gè)$m+1$維的線性空間,則

$$

g(x)=a_0\phi_0(x)+\cdots+a_m\phi_m(x)

$$

想辦法求出$a_0,\cdots,a_m$即找到了$g(x)$。由插值的要求,$g(x)$滿足

$$

g(x_i)=a_0\phi_0(x_i)+\cdots+a_m\phi_m(x_i)=f(x_i), i=0,1,\cdots,n

$$

寫(xiě)成矩陣形式,有

$$

\begin{pmatrix}

\phi_0(x_0) & \phi_1(x_0) & \cdots & \phi_m(x_0) \\

\phi_0(x_1) & \phi_1(x_1) & \cdots & \phi_m(x_1) \\

\vdots & \vdots & & \vdots \\

\phi_0(x_n) & \phi_1(x_n) & \cdots & \phi_m(x_n) \\

\end{pmatrix}

\begin{pmatrix}

a_0 \\ a_1 \\ \vdots \\ a_m

\end{pmatrix}

=\begin{pmatrix}

f(x_0) \\ f(x_1) \\ \vdots \\ f(x_n)

\end{pmatrix}

$$

這是一個(gè)關(guān)于系數(shù)$a_0, \cdots, a_m$的線性方程組。 利用線性代數(shù)相關(guān)知識(shí),可以分析出這個(gè)方程的解結(jié)構(gòu)。特別地,有

**定理**

若$m=n$,且

$$

\left|\begin{matrix}

\phi_0(x_0) & \phi_1(x_0) & \cdots & \phi_n(x_0) \\

\phi_0(x_1) & \phi_1(x_1) & \cdots & \phi_n(x_1) \\

\vdots & \vdots & & \vdots \\

\phi_0(x_n) & \phi_1(x_n) & \cdots & \phi_n(x_n) \\

\end{matrix}\right|\neq 0

$$

則插值函數(shù)$g(x)$存在唯一。

## 插值多項(xiàng)式

在已知的函數(shù)形態(tài)中,多項(xiàng)式是最早接觸到、形式簡(jiǎn)單的一類(lèi)函數(shù)。它特別適合計(jì)算機(jī)使用

1. 計(jì)算一個(gè)多項(xiàng)式只需要四則運(yùn)算,方便編程

2. 一個(gè)多項(xiàng)式的積分與導(dǎo)數(shù)仍然是一個(gè)多項(xiàng)式,且可以方便的得到任意階導(dǎo)數(shù)和任意次的積分

多項(xiàng)式還有一些特性,如:

1. $f(x)$是一個(gè)$n$次多項(xiàng)式,若$f(a)=0$,則有$f(x)=g(x)(x-a)$,且$g(x)$是一個(gè)$n-1$次多項(xiàng)式

2. 若$f(a)=0$,且$f'(a)=0$,則有$f(x)=g(x)(x-a)^2$,且$g(x)$是一個(gè)$n-2$次多項(xiàng)式

由于多項(xiàng)式的諸多優(yōu)秀的特性,在以后的學(xué)習(xí)中,一直使用多項(xiàng)式來(lái)近似。

回到插值過(guò)程,若節(jié)點(diǎn)$\{x_i\}_{i=0}^n$互不相同,在$n$次多項(xiàng)式空間$P_n=span\{1,x, x^2,\cdots, x_n\}$中找插值函數(shù)。由線性代數(shù)知識(shí),有

$$

\left|\begin{matrix}

1 & x_0 & \cdots & x_0^n \\

1 & x_1 & \cdots & x_1^n \\

\vdots & \vdots & & \vdots \\

1 & x_n & \cdots & x_n^n

\end{matrix}\right|=\prod_{i,j=0, \\ j>i}^n(x_j-x_i)\neq 0

$$

這是一個(gè)Vandoormod行列式。因此,有結(jié)論

**定理**

$n+1$個(gè)互不相同節(jié)點(diǎn)上的$n$次插值多項(xiàng)式存在且唯一。

## 待定系數(shù)法得到插值多項(xiàng)式

前面已經(jīng)給出了求解插值多項(xiàng)式的一種方法--待定系數(shù)。

設(shè)插值多項(xiàng)式是$g(x)=a_0+a_1x+\cdots+a_n x^n$,由插值條件,可以得到線性方程組

$$

\begin{cases}

a_0+a_1 x_0+\cdots+a_n x_0^n & = f(x_0) \\

a_0+a_1 x_1+\cdots+a_n x_1^n & = f(x_1) \\

\cdots \\

a_0+a_1 x_n+\cdots+a_n x_n^n & = f(x_n) \\

\end{cases}

$$

解出系數(shù)$a_0, \cdots, a_n$即可。

**例**

求過(guò)點(diǎn)$(1, 3)$, $(2, 2)$, $(3, 4)$的插值多項(xiàng)式。

**解**

總共3個(gè)點(diǎn),因此使用2次多項(xiàng)式。設(shè)$g(x)=a_0+a_1 x+a_2 x^2$,則有

$$

\begin{cases}

a_0+ a_1 + a_2? &=3 \\

a_0+2a_1 + 4 a_1&=2 \\

a_0+3a_1 + 9 a_2&=4 \\

\end{cases}

$$

**方法的不足**:需要解一個(gè)線性方程組,而且Vandoormod矩陣是一個(gè)病態(tài)矩陣。當(dāng)$n$比較大($>10$)時(shí),數(shù)值上的小擾動(dòng),會(huì)帶來(lái)明顯的計(jì)算誤差。

## Lagrange插值

設(shè)插值多項(xiàng)式是

$$

g(x)=f(x_0)l_0(x)+f(x_1)l_1(x)+\cdots+f(x_n)l_n(x)

$$

其中$l_i(x), i=0,\cdots,n$是次數(shù)不超過(guò)$n$次的多項(xiàng)式。下面,想辦法救出$l_i(x)$。

$$

f(x_0)=g(x_0)=f(x_0)l_0(x_0)+f(x_1)l_1(x_0)+\cdots+f(x_n)l_n(x_0)

$$

因此,可以假定成立

$$

l_0(x_0)=1, l_i(x_0)=0, i=1,2,\cdots,n

$$

類(lèi)似地,可以得到

$$

l_0(x_1)=0, l_1(x_1)=1, l_i(x_1)=0, i=2,3,\cdots,n

$$

對(duì)$i=0,1,\cdots,n$,都有

$$

l_i(x_i)=1, l_j(x_i)=0, j=0,1,\cdots,j-1,j+1,\cdots,n

$$

可以得到如下的表

-? | $l_0(x)$ | $l_1(x)$ | $\cdots$ | $l_n(x)$

- | :-: | :-: | :-: | -: |

| $x_0$? | 1 | 0 | $\cdots$ | 0

| $x_1$ | 0 | 1 | $\cdots$ | 0

| $\vdots$ | $\vdots$

|$x_n$ | 0 | 0 | $\cdots$ |1

可以看出,每個(gè)函數(shù)$l_i(x)$滿足

$$

l_i(x_j)=\delta_{ij}=\begin{cases} 1, & i=j \\ 0, & i\neq j \end{cases}

$$

$l_i(x)$有零點(diǎn)$x_0$, $x_1$, $\cdots$, $x_{i-1}$, $x_{i+1}$, $\cdots$, $x_n$, 因此有

$$

l_i(x)=a_i(x-x_0)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n)

$$

其中$a_i$是某個(gè)實(shí)數(shù)。又$l_i(x_i)=1$,即

$$

a_i(x_i-x_0)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)=1

$$

解得

$$

a_i=\frac1{(x_i-x_0)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)}

$$

得到

$$

l_i(x)=\frac{(x-x_0)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n)}{(x_i-x_0)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)}

$$

稱(chēng)$l_i(x)$為*Lagrange基函數(shù)*。插值函數(shù)

$$

g(x)=f(x_0)l_0(x)+f(x_1)l_1(x)+\cdots+f(x_n)l_n(x)

$$

為*Lagrange插值*,記為$L_n(x)$。

**例**

求過(guò)點(diǎn)$(1, 3)$, $(2, 2)$, $(3, 4)$的插值多項(xiàng)式。

**解**

插值節(jié)點(diǎn)是$1,2,3$,因此Lagrange插值基函數(shù)是

$$

\begin{aligned}

l_0(x)=&\frac{(x-2)(x-3)}{(1-2)(1-3)} \\

l_1(x)=&\frac{(x-1)(x-3)}{(2-1)(2-3)} \\

l_2(x)=&\frac{(x-1)(x-2)}{(3-1)(3-2)} \\

\end{aligned}

$$

因此,插值函數(shù)為

$$

g(x)=3\frac{(x-2)(x-3)}{(1-2)(1-3)}+2\frac{(x-1)(x-3)}{(2-1)(2-3)}

+4\frac{(x-1)(x-2)}{(3-1)(3-2)}

$$

可以看到$L_n(x)$是一個(gè)次數(shù)不超過(guò)$n$次的多項(xiàng)式,由插值多項(xiàng)式的存在唯一性知,$L_n(x)$與待定系數(shù)法得到的多項(xiàng)式是一樣的,而它避開(kāi)了求解一個(gè)病態(tài)的線性方程組。

## Lagrange插值的偽代碼

``` c

fx=0.0;

for i=0,n:

? li=1.0;

? for j=0,i-1:

? ? li=li*(t-x[j])/(x[i]-x[j]);

? end for

? for j=i+1,n:

? ? li=li*(t-x[j])(x[i]-x[j])

? end for

? fx = fx+y[i]*li;

end for

// fx 即為 插值函數(shù) 在 t 處的值

```

## 誤差分析

插值多項(xiàng)式當(dāng)然跟原函數(shù)有誤差,下面來(lái)分析一下這個(gè)誤差。記

$$

R_n(x)=f(x)-L_n(x)

$$

則,由插值的定義知

$$

R_n(x_i)=f(x_i)-L_n(x_i)=0, i=0,1,\cdots,n

$$

因此,可以設(shè)

$$

R_n(x)=K_n(x)(x-x_0)(x-x_1)\cdots(x-x_n)

$$

其中$K_n(x)$是一個(gè)未知的函數(shù)。

下面,想辦法把$K_n(x)$表達(dá)出來(lái)。對(duì)$f(x)$定義域內(nèi)任意的數(shù)$a$,構(gòu)造輔助函數(shù)

$$

\phi(t)=f(t)-L_n(t)-K_n(a)(t-x_0)\cdots(t-x_n)

$$

為$t$的函數(shù),則有

$$

\phi(x_i)=f(x_i)-L_n(x_i)=0, i=0,1,\cdots,n

$$

$$

\phi(a)=f(a)-L_n(a)-R_n(a)=0

$$

也就是說(shuō),點(diǎn)$x_i$, $i=0,\cdots,n$及$a$均為函數(shù)$\phi(t)$的零點(diǎn)。設(shè)所有這些點(diǎn)在區(qū)間$[b,c]$內(nèi),則

* $\phi(t)$具有$n+2$個(gè)互不相同的零點(diǎn),若$\phi(t)$可導(dǎo),則由Rolle定理,至少存在$n+1$個(gè)互不相同的點(diǎn)是$\phi'(t)$的零點(diǎn),這些零點(diǎn)在區(qū)間$(b,c)$內(nèi)。

* 同樣的,若$\phi'(t)$可導(dǎo),則至少存在$(b,c)$內(nèi)的$n$個(gè)互不相同的$\phi''(t)$的零點(diǎn)。

* 因此,若$\phi(t)$具有$n+1$階導(dǎo)數(shù),則至少存在一個(gè)點(diǎn)$\xi\in(b,c)$滿足$\phi^{(n+1)}(\xi)=0$。

* 從$\phi(t)$的表達(dá)式中可以看到,$\phi(t)$的光滑性與$f(t)$的光滑性相關(guān)。若$f(x)$足夠光滑(比如:有到$m$階的連續(xù)導(dǎo)數(shù)),則$\phi(t)$也具有$m$階連續(xù)導(dǎo)數(shù)。

因此,若$f(x)$具有$n+1$階導(dǎo)數(shù),則存在$\xi$滿足

$$

0=\phi^{(n+1)}(\xi)=f^{(n+1)}(\xi)-K_n(a)(n+1)!

$$

即有

$$

K_n(a)=\frac{f^{(n+1)}(\xi)}{(n+1)!}

$$

由$a$的任意性,可以得到誤差表達(dá)式

$$

R_n(x)=f(x)-L_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{i=0}^n(x-x_i)

$$

**例**

已知$\sin\frac{\pi}6=\frac12$, $\sin\frac{\pi}4=\frac{\sqrt 2}2$, $\sin\frac{\pi}3=\frac{\sqrt 3}2$,用1次和2次Lagrange插值近似$\sin50^\circ$,并估計(jì)誤差

**解**

求解位置$x=50^\circ=\frac{5\pi}{18}$。記$x_0=\frac{\pi}6$, $x_1=\frac{\pi}4$, $x_2=\frac{\pi}3$。

1. 先用$x_0$, $x_1$做線性插值,近似計(jì)算$x$處的值

$$

L_1(x)=\frac12\frac{x-\frac{\pi}4}{\frac{\pi}6-\frac{\pi}4}

+\frac{\sqrt2}2\frac{x-\frac{\pi}6}{\frac{\pi}4-\frac{\pi}6}

$$

近似得到$\sin50^\circ\approx L_1(\frac{5\pi}{18})\dot=0.77614$。根據(jù)誤差表達(dá)式

$$

R_1(x)=\frac{\sin^{(2)}(\xi)}{2!}(x-\frac{\pi}6)(x-\frac{\pi}4),\quad? \xi\in(\frac{\pi}6,\frac{\pi}3)

$$

$$

\sin^{(2)}(\xi)=-\sin(\xi)\in(-\frac{\sqrt3}2,-\frac12), \quad \xi\in(\frac{\pi}6,\frac{\pi}3)

$$

得到

$$

R_1(\frac{5\pi}{18})=-\sin(\xi)\frac12\frac{\pi}{18}\frac{4\pi}{18}

\in(-0.01319,-0.00762)

$$

比較真解$\sin50^\circ=0.7660444\cdots$,得到誤差約為$-0.01001$,落在估計(jì)的區(qū)間內(nèi)。

2. 類(lèi)似地,用$x_1$, $x_2$做插值,得到估計(jì)值和誤差$\tilde R_1$

$$

\sin50^\circ\approx0.76008, \quad \tilde R_1\in(0.00538, 0.00660)

$$

實(shí)際誤差約為$0.00596$

3. 用$x_0$, $x_1$, $x_2$三個(gè)點(diǎn)構(gòu)造二次插值多項(xiàng)式

$$

L_2(x)=\frac12\frac{(x-\frac{\pi}4)(x-\frac{\pi}3)}{(\frac{\pi}6-\frac{\pi}4)(\frac{\pi}6-\frac{\pi}3)}

+\frac{\sqrt2}2\frac{(x-\frac{\pi}6)(x-\frac{\pi}3)}{(\frac{\pi}4-\frac{\pi}6)(\frac{\pi}4-\frac{\pi}3)}

+\frac{\sqrt3}2\frac{(x-\frac{\pi}6)(x-\frac{\pi}4)}{(\frac{\pi}3-\frac{\pi}6)(\frac{\pi}3-\frac{\pi}4)}

$$

及誤差

$$

R_2(x)=\frac{\sin^{(3)}(\xi)}{3!}(x-\frac{\pi}6)(x-\frac{\pi}4)(x-\frac{\pi}3), \xi\in(\frac{\pi}6,\frac{\pi}3)

$$

得到

$$

L_2(\frac{5\pi}{18})\approx0.76543, \quad R_2(\frac{5\pi}{18})\in(0.00044,0.00077)

$$

實(shí)際誤差約為$0.00061$

* 在插值中,所求點(diǎn)$x$落在節(jié)點(diǎn)$\{x_i\}_{i=0}^n$所組成的區(qū)間外部的插值,又稱(chēng)為*外插*。從上面的例子可以看到,通常內(nèi)插的誤差要小于外插的誤差。

* 上面的例子還可以看到,高階插值的誤差要小于低階插值的誤差。

## 事后誤差估計(jì)

在誤差表達(dá)式中,$f^{(n+1)}(\xi)$在實(shí)際應(yīng)用中,是不可計(jì)算的。

1. 若$f(x)$已知,則可以通過(guò)$\xi$的范圍來(lái)得到$f^{(n+1)}(\xi)$的取值范圍,進(jìn)而給出誤差的取值范圍來(lái)。

2. 若$f(x)$也未知,則沒(méi)辦法得到誤差的范圍。

在實(shí)際應(yīng)用中,**事后誤差估計(jì)**方法可以對(duì)誤差進(jìn)行估計(jì)。

設(shè)節(jié)點(diǎn)$\{x_0,x_1,\cdots,x_n\}$上的插值多項(xiàng)式是$L_n(x)$,則有誤差

$$

f(x)-L_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}(x-x_0)\cdots(x-x_n)

$$

替換一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)組$\{x_1,x_2,\cdots,x_{n+1}\}$上的插值多項(xiàng)式是$\tilde L_n(x)$,誤差為

$$

f(x)-\tilde L_n(x)=\frac{f^{(n+1)}(\eta)}{(n+1)!}(x-x_1)\cdots(x-x_{n+1})

$$

這里,做一個(gè)假設(shè)$f^{(n+1)}(\eta)\approx f^{(n+1)}(\xi)$,則有

$$

\frac{f(x)-L_n(x)}{f(x)-\tilde L_n(x)}\approx\frac{x-x_0}{x-x_{n+1}}

$$

得到

$$

f(x)\approx\frac{x-x_{n+1}}{x_0-x_{n+1}}L_n(x)+\frac{x-x_0}{x_{n+1}-x_0}\tilde L_n(x)

$$

進(jìn)而,$L_n(x)$的誤差可以估計(jì)為

$$

f(x)-L_n(x)\approx\frac{x-x_0}{x_{n+1}-x_0}\left(\tilde L_n(x)-L_n(x)\right)

$$

這樣,得到了**事后誤差估計(jì)**。

**注意**: 推導(dǎo)過(guò)程中,假設(shè)$f^{(n+1)}(\eta)\approx f^{(n+1)}(\xi)$ 是沒(méi)有數(shù)學(xué)依據(jù)的, 因此得到的誤差估計(jì)即可能比真實(shí)誤差大,也可能比真實(shí)誤差小。從數(shù)學(xué)上說(shuō),這個(gè)數(shù)值沒(méi)有意義。

但實(shí)際使用中,效果挺好。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • #1996 AHSME ##1996 AHSME Problems/Problem 1 The addition ...
    abigtreenj閱讀 1,604評(píng)論 0 0
  • $ \LaTeX{} $歷史 $\LaTeX{}$(/?lɑ?t?x/,常被讀作/?lɑ?t?k/或/?le?t?...
    大只若于閱讀 5,913評(píng)論 0 5
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,144評(píng)論 0 2
  • 算法和數(shù)據(jù)結(jié)構(gòu) [TOC] 算法 函數(shù)的增長(zhǎng) 漸近記號(hào) 用來(lái)描述算法漸近運(yùn)行時(shí)間的記號(hào),根據(jù)定義域?yàn)樽匀粩?shù)集$N=...
    wxainn閱讀 1,244評(píng)論 0 0
  • 關(guān)于世態(tài) 風(fēng)不來(lái),樹(shù)不動(dòng), 船不搖,水不渾。(《水滸傳》) 前世之因,后世之果。這世上沒(méi)有無(wú)緣無(wú)故的愛(ài),也沒(méi)有無(wú)緣...
    1c80f8bc6f64閱讀 367評(píng)論 0 0

友情鏈接更多精彩內(nèi)容