ラグランジュ補間関数(Lagrange interpolation)

プログラミング演習B 2021年7月8日 担当教員: 劉 雪峰

区間$[a,b]$に定義される関数$f$に対して、節点$x_1<x_2<x_3<\cdots <x_{n+1}$では$f$と一致する$n$次多項式$p$は$f$の$n$次Lagrange補間関数と呼ばれます。

以下の式を満たす多項式$\phi_i$ ($i=1,2,\cdots, n+1$)はLagrange補間の基底関数となります。 $$ \phi_i(x_j) = \delta_{ij} = \left\{ \begin{array}{c} 0\quad \mbox{ if } i\not= j \\ 1\quad\mbox{ if } i=j \end{array} \right. $$

基底関数を使って、$f$の補間関数$p(x)$は次の式と書けます。

$$ p(x)=\sum_{i=1}^{n+1} f(x_i) \phi_i(x) $$

1. 一次補間関数

$x_1=0,x_2=1$における1次ラグランジュ補間関数を考えます。このとき、基底関数$\phi_1, \phi_2$は以下の形を持っています。

$$ \phi_1(x) = \frac{x-x_2}{x_1 - x_2},\quad \phi_2(x) = \frac{x_1-x}{x_1 - x_2} $$

以下のコードは$\phi_i$のグラフを描画します。

$(x_1,y_1), (x_2,y_2)$を通っている1次多項式は$\phi_1$, $\phi_2$の線形結合で表すことができます。

例:$(0,2), (1,-1)$を通っている1次多項式

演習1

基底関数の表現式

$$ \phi_1(x) = \frac{(x-x_2)(x-x_3)}{(x_1-x_2)(x_1-x_3)},\quad \phi_2(x) = \frac{(x-x_1)(x-x_3)}{(x_2-x_1)(x_2-x_3)},\quad \phi_3(x) = \frac{(x-x_1)(x-x_2)}{(x_3-x_1)(x_3-x_2)} $$ $$(0, 1), (0.5, -1), (1,5)$$ $$(0, 1), (0.5, 2), (1,2.9)$$

2. 一般的な$n$点式Lagrange補間関数($n-1$次)

節点$x_1, x_2, \cdots, x_{n}$におけるラグランジュ補間関数の基底関数$\phi_i(x)$は以下の式で表しています。

$$ \phi_i(x)= \frac{(x-x_1)(x-x_2)\cdots (x-x_{i-1})(x-x_{i+1})\cdots (x-x_{n})}{(x_i-x_1)(x_i-x_2)\cdots (x_i-x_{i-1})(x_i-x_{i+1})\cdots (x_i-x_{n})} = \frac{\prod_{k=1,k\not=i}^{n}(x-x_k) }{\prod_{k=1,k\not=i}^{n}(x_i-x_k) } \quad (i=1,2,\cdots, {n}) $$

演習2

上記の基底関数$\phi_i$に対応するOctaveの関数$Lagrange(xlist, i,x)$を作ってください。

関数Lagrange(node_list, i,x)の仕様:

入力引数

返却値

演習3

$[0,1]$の6等分割に対して、6次Lagrange補間関数の各基底関数のグラフを描いてください。

$$ x_1=0, x_2=1/6, \cdots, x_7=1 $$

演習4

補間関数の節点は$[-1,1]$の等分割を使ってください。 以下の$[-1,1]$上の関数$f$に対して、$[-1,1]$の等分割における$f$の$n$次Lagrange補間関数を求めて、補間関数を描いてください。補間関数の次数をそれぞれ$n=3,4,\cdots 10$としてください。

$$ f=\frac{1}{1+25x^2}, \quad (x \in [-1,1]) $$