一般的な補間関数

前回の授業では、補間の節点で対象関数と値が一致するLagrange補間関数を解説しました。今回の授業では以下の内容を説明します。

1. 行列による補間関数の計算方法

行列を使ってLagrange補間関数の計算を再検討します。$n$次Lagrange補間関数は以下の$n$次までの多項式の関数空間から補間関数を求めています。

$$ V = \mbox{span} \{1,x,x^2,x^3, \cdots, x^n\} $$

$V$の$n$次多項式$p(x)$は以下の式で表すことができます。

$$ p(x) = \sum_{i=0}^n c_i x^i = (1,x,x^2,\cdots, x^n) \left( \begin{array}{c}c_0 \\ c_1 \\ \vdots \\ c_n\end{array} \right) $$

節点$x_i$ ($i=1,2,\cdots,n+1$) における$p$と$f$の値が一致することによって、以下の方程式が分かります。

$$ (1,x_i,x_i^2,\cdots, x_i^n) \left( \begin{array}{c}c_0 \\ c_1 \\ \vdots \\ c_n\end{array} \right) = f(x_i), \quad (i=1,2,3, \cdots, n+1). $$

上記の方程式を連立すると、以下の連立一次方程式が得られます。

$$ Ac=b $$

ここで、

$$ A = \left( \begin{array}{ccccc} 1 &x_1 & x_1^2 & \cdots & x_1^n \\ 1 &x_2 & x_2^2 & \cdots & x_2^n \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ 1 &x_{n+1} & x_{n+1}^2 & \cdots & x_{n+1}^n \\ \end{array} \right), \quad c=\left( \begin{array}{c}c_0 \\ c_1 \\ \vdots \\ c_n\end{array} \right), \quad b =\left( \begin{array}{c}f(x_1) \\ f(x_2) \\ \vdots \\ f(x_{n+1})\end{array} \right) $$

連立一次方程式$Ac=b$を解くことによって、Lagrange補間関数$p(x)$の係数$c$が求められます。

準備: 多項式関数の描画

多項式$p(x)$のグラフの描画を考えます。 $$ p(x) = \sum_{i=0}^n c_i x^i $$ 以下の関数を利用して$[0,1]$の点列における多項式$p(x)$の値を計算できます。ここで、関数の入力変数$c$は多項式の係数$(c_0,c_1,c_2, \cdots, n)$です。

補足

多項式の安定な計算方法として、Horner's methodが使用されています。 https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%BC%E3%83%8A%E3%83%BC%E6%B3%95

Octaveでは、polyvalの関数を提供しています。

y=polyval(flip(c), x);

たとえば、$n=5$, $c=[1,3,-1,-1,-2]$の場合、$p(x)$のグラフを描いてみます。

演習1

以下の節点における$f(x):=\sin(2\pi x^2)$のLagrange補間関数を求めてください。

$$ x_i=\frac{i}{n}, \quad (i=0,1,\cdots, n) $$

実際の計算では、$n=5$, $n=10$で補間関数を計算してみてください。

関数fと補間関数のグラフを描いて、比較してください。

2.補間の条件の一般化

指定される点における値ではなく、関数の微分や積分を利用して補間関数を作成する方法もあります。

例えば、エルミート補間では、対象関数の関数値と微分値が利用されています。

$[0,1]$におけるエルミート補間関数は以下の条件を満たす3次元多項式です。

$$ p(0)=f(0), \quad p(1)=f(1), \quad p'(0)=f'(0), \quad p'(1)=f'(1) $$

上記の補間に対応している基底関数は以下の条件を満たします。

$$ \phi_1:~~~ \phi_1(0)=1, \quad \phi_1(1)=0, \quad \phi_1'(0)=0, \quad \phi_1'(1)=0 $$$$ \phi_2:~~~ \phi_2(0)=0, \quad \phi_2(1)=1, \quad \phi_2'(0)=0, \quad \phi_2'(1)=0 $$$$ \psi_1:~~~ \psi_1(0)=0, \quad \psi_1(1)=0, \quad \psi_1'(0)=1, \quad \psi_1'(1)=0 $$$$ \psi_2:~~~ \psi_2(0)=0, \quad \psi_2(1)=0, \quad \psi_2'(0)=0, \quad \psi_2'(1)=1 $$

基底関数を利用して、$f$のエルミート補間が以下のように得られます。 $$ p(x) = f(0)\phi_1 + f(1)\phi_2 + f'(0)\psi_1 + f'(1)\psi_2 $$

演習2

区間$[0,1]$における$f(x)= \exp(x)$のエルミート補間関数を求めてください。

3. 補間関数の一般化

対象関数の指定される点における値と一致する関数が多項式に限らず、良い性質のある候補関数の集合で解を探すことは可能です。

$[0,1]$における連続関数$f(x)$は以下のFourier級数で表すことができます。 

$$ f(x) = \sum_{i=1}^\infty c_i \sin(i\pi x) + \sum_{i=1}^{\infty} c_{n+i} \cos (i\pi x) + c \quad (x \in [0,1]) $$

よって、三角関数$p(x)$を使って、対象関数f(x)の補間を考えます。 $$ (f(x)\approx ) p(x) = \sum_{i=1}^n c_i \sin(i\pi x) + \sum_{i=1}^{n} c_{n+i} \cos (i\pi x) + c_{2n+1} \quad (x \in [0,1]) $$

上記の三角関数は$2n+1$個の係数を持っているので、補間関数を求めるとき、$2n+1$個の節点を利用します。即ち、$x_1, x_2, \cdots, x_{2n+1}$の節点で$f$の値と一致する$p(x)$を求めます。

$$ p(x_i) = f(x_i),\quad (i=1,2,\cdots, 2n+1)\:. $$

三角関数の描画

係数$c=(c_1, c_2, \cdots, c_{2n+1})$に対応する三角関数を描画するために、以下のコードを用意します。

演習3

区間$[0,1]$の$2n$等分割の節点(節点の数=$2n+1$)を利用して、三角関数が基底となる$f(x):=\sin(2\pi x^2)$の補間関数を求めてください。ただし、$n=3,4,5$とします。