ゼロつく3/ステップ4 数値微分の誤差評価
数値微分の実装のところで「前進差分近似」と「中心差分近似」では中心差分近似の方が誤差が小さいと述べられている。この証明について簡単に見ていきたい。
ある関数\(f(x)\)の\(x=a\)での微分値は次の式で表される。
\[ f^{′}(a) = \lim_{h \to 0} \frac{f(a+h)-f(x)}{h} \]
ここで\(h=1e-4\)のような微小量を用いて微分値の近似値を求めることを数値微分という。この式の場合は\(a\)と\((a+h)\)の2点を使って微分値を求めるため特に前進差分近似と呼ばれる。一方で、\((a-h)\)と\((a+h)\)の2点を使う方法を中心差分近似という。中心差分近似は前進差分近似よりも誤差が小さくなるという。このとこについて考えてみたい。
テイラー展開
誤差を論じるときに良く用いられるのがテイラー展開だ。今回もテイラー展開を使って誤差を評価していく。関数\(f(x)\)を\(x=a\)の近傍でテイラー展開すると次のようになる。
\[ f(x) = f(a) + f^′(a)(x-a) + \frac{f^″(a)}{2!}(x-a)^2 + \frac{f^{(3)}}{3!}(x-a)^3 + \cdots\]
この式は両辺を\(x\)で微分して\(x=a\)を代入するとイコールが成立することからも正しいことを確かめられるが詳しい説明は他のサイトをあたってほしい。
例えば1階微分については、まず右辺の\(f(a)\)は定数なので消える。つづいて、右辺の\((x-a)\)の2次以上の項については1階微分をした後も\((x-a)\)の形が残るため、\(x=a\)を代入するとそれらの項も消える。結果として、右辺の\(f^{′}(a)(x-a)\)の項だけが生き残ることになり、これを\(x\)で微分すると右辺は\(f^{′}(a)\)なって左辺と一致する。2階以上の微分についても同様に見ていけばよい。
前進差分近似
前進差分近似で\(x=a\)における微分値を計算するには\(x=a+h\)と\(x=a\)の2点での傾きを求めればよい。テイラー展開の式に\((x=a+h)\)を入れると次のようになる。
\[f(a+h) = f(a) + f^{′}(a)h + \frac{f^{″}(a)}{2!}h^2 + \cdots\]
この式から前進差分近似を用いた微分値は次のようになる。
\[f^{′}(a) = \frac{f(h+a)-f(a)}{h} = f^{′}(a) + \frac{f^{″}(a)}{2!}h + \cdots=f^{′}(a) + \mathcal{O}(h)\]
最後の式の\(\mathcal{O}(h)\)というのはランダウの記号\(\mathcal{O}\)を用いた表現であり、この部分が理論的な微分値と数値微分との誤差を表す。今\(h\)は\(1e-4\)のような微小量であり、\(h\)の乗数が大きければ大きいほどその項の影響力は小さくなっていく。そこで右辺の\(f^{′}(a)\)以外の部分で一番寄与が大きい\(h\)というのを抜き出して明次的に示したものが\(\mathcal{O}(h)\)のような表現である。この場合、前進差分近似は\(h\)の一次の大きさで理論値に収束していくことになるが、より大きな次数で収束させる方法があればそちらの方が誤差が小さいということになる。
中心差分近似
中心差分近似では\(x=a\)での微分値を計算するのに\(x=a+h\)と\(x=a-h\)の2点での傾きを求めればよい。テイラー展開したものに\(x=a+h\)と\(x=a-h\)を代入するとそれぞれ以下のようになる。
\[f(a+h) = f(a) + f^{′}(a)h + \frac{f^{″}(a)}{2!}h^2 + \frac{f^{(3)}(a)}{3!}h^3\cdots\]
\[f(a-h) = f(a) – f^{′}(a)h + \frac{f^{″}(a)}{2!}h^2 – \frac{f^{(3)}(a)}{3!}h^3 \cdots\]
これらを用いて中心差分近似の方法で微分値を計算してみる。
\[f^{′}(a) = \frac{f(a+h)-f(a-h)}{2h}=f{′}(a)+\frac{f^{(3)}}{3!}h^2+\cdots= f^{′}(a) + \mathcal{O}(h^2)\]
ここで\(x=a+h\)と\(x=a-h\)の2点での傾きなので分母は\(2h\)となっていることに注意。
中心差分近似の場合は誤差は\(h\)の二次の大きさでゼロに近づいていく。このため\(h\)の一次で誤差が小さくなっていく前進差分近似に比べて中心差分近似の方が誤差が小さい。
結論
前進差分近似
\[f^{′}(a) = \frac{f(h+a)-f(a)}{h} =f^{′}(a) + \mathcal{O}(h)\]
中心差分近似
\[f^{′}(a) = \frac{f(a+h)-f(a-h)}{2h}=f^{′}(a) + \mathcal{O}(h^2)\]
前進差分近似の誤差は\(h\)の一次、中心差分近似の誤差は\(h\)の二次であるため中心差分近似の誤差の方が小さいと言える。(\(h\)は1より小さい微小量であるため\(h\)の乗数が大きい方が小さくなる。)