■矩形公式と台形公式(その3)

 今回のコラムでは数値積分でなく,数値微分に目を向けてみたい.

===================================

【1】常微分係数の差分近似

 1次微分係数f’(x)の符号はもとの関数f(x)の増減と関連し,2次微分係数f”(x)の符号はもとの関数の凹凸(曲率)と関連していることはご存じと思いますが,数値微分というのは,例えば,y=x^2を微分してy’=2xのように解析的に求めるのではなく,xのある点における関数y=f(x)の傾きを差分近似を用いて数値的に求める数値解法をいいます.

 コンピュータを用いた数値解析では微分係数f’(x)を

f’(x)≒{f(x+h)−f(x)}/h・・・・・・(1)

f’(x)≒{f(x)−f(x−h)}/h・・・・・・(2)

f’(x)≒{f(x+h)−f(x−h)}/2h・・・(3)

で差分近似して計算するほうが取り扱いが容易になります.いずれも導関数を差分商で置き換えるのですが,(1)を前進差分近似,(2)を後退差分近似,(3)を中心差分近似と呼びます.

 一般には,

f’(x)≒α{f(x+h)−f(x)}/h+β{f(x)−f(x−h’)}/h’

0≦α,β≦1,α+β=1,h→0,h’→0

によって,f’(x)の近似式が与えられます.前進差分近似,後退差分近似,中心差分近似はh=h’で,それぞれ

(1)α=1,β=0

(2)α=0,β=1

(3)α=1/2,β=1/2

の場合に相当します.

 差分を使うとき,hは原理的には小さいほど理想的ですが,あまりにも小さいと差分の中に占める数値計算誤差の比重が大きくなり,かえって精度が悪くなってしまいます.関数fの性質とhの取り方によって精度は決まりますが,誤差について次のように検討してみましょう.

 連続で何度でも微分可能な関数y=f(x)をテイラー展開すると,

f(x+h)=f(x)+f’(x)h+1/2!f”(x)h^2+1/3!f^(3)(x)h^3+・・・   (4)

となります.したがって,

f’(x)={f(x+h)−f(x)}/h−{1/2f”(x)h+1/6f^(3)(x)h^2+・・・}

より1次微分係数は近似的に前進差分(1)として求められます.この公式の誤差は{1/2f”(x)h+1/6f^(3)(x)h^2+・・・}の部分ですから,hにほぼ比例すると考えることができるため,{・・・}括弧の部分をO(h)と表わします.

f’(x)={f(x+h)−f(x)}/h+O(h)

Oはランダウの記号で,O(h)はhの1次のオーダーという意味です.

 また,(4)のhに−1を掛けると

f(x−h)=f(x)−f’(x)h+1/2!f”(x)h^2−1/3!f^(3)(x)h^3+・・・   (5)

となります.前進差分と同様にして

f’(x)={f(x)−f(x−h)}/h+O(h)

すなわち,後退差分公式(2)が成り立ちます.(1),(2)とも誤差はhのオーダーであることがわかります.

 次に,(4)から(5)を引くと

f(x+h)−f(x−h)=2f’(x)h+1/3f^(3)(x)h^3+・・・(6)

より

f’(x)={f(x+h)−f(x−h)}/2h−{1/6f^(3)(x)h^2+・・・}

     ={f(x+h)−f(x−h)}/2h+O(h^2)

となり,中心差分近似の打ち切り誤差はh^2に比例します.このことから,中心差分は前進差分・後退差分より平均的な打ち切り誤差が少なく,精度が高いことが理解されます.ただし,関数値の計算回数は余計にかかります.

 次に,2次微分係数ですが,前進差分近似,後退差分近似,中心差分近似のそれぞれに対応した数値微分を作ることが可能です.例えば,中心差分近似式(3)を用いると

f”(x)={f’(x+h)−f’(x−h)}/2h

     ={f(x+2h)−f(x))/4h^2−(f(x)−f(x−2h)}/4h^2

     ={f(x+2h)−2f(x)+f(x−2h)}/4h^2

ここで改めて2hをhと置きかえると,2次微分係数の差分近似式は

f”(x)={f(x+h)−2f(x)+f(x−h)}/h^2

のように求まります.この式の誤差は(4)と(5)を加えると

f(x+h)+f(x−h)=2f(x)+f”(x)h^2+1/12f^(4)(x)h^4+・・・より

f”(x)={f(x+h)−2f(x)+f(x−h)}/h^2+O(h^2)

と評価することができます.

 いま,中心差分近似式f”(x)={f(x+2h)−2f(x)+f(x−2h)}/4h^2を採用すると

f^(3)(x)=1/2h{f”(x+h)−f”(x−h)}

=(1/2h)^3{f(x+3h)−3f(x+h)+3f(x−h)−f(x−3h)}+O(h^2)

 さらに,

f^(4)(x)=(1/2h)^4{f(x+4h)−4f(x+2h)+6f(x)−4f(x−2h)+f(x−6h)}+O(h^2)

が得られます.4次微分係数の差分近似式では2hをhと置きかえることができます.

 一階中心差分近似式,二階中心差分近似式にはそれぞれに係数[1,−1],[1,−2,1]がはいっていましたが,それ以上の高階差分近似式にも,[1,−3,3,−1],[1,−4,6,−4,1]など二項係数 nCk が符号を交代させた形で入っていることが示されます.これは数学的帰納法を用いて簡単に証明できます.一般式の形で書くこともできますが,読者の演習問題にしておきます.

 また,中心差分近似式f”(x)={f(x+h)−2f(x)+f(x−h)}/h^2を採用した場合の3次微分係数と4次微分係数の差分近似式は,

f^(3)(x)=1/2h{f”(x+h)−f”(x−h)}

=1/2h^3{f(x+2h)−2f(x+h)+2f(x−h)−f(x−2h)}+O(h^2)

f^(4)(x)=1/2h{f^(3)(x+h)−f^(3)(x−h)}

=1/4h^4{f(x+3h)−2f(x+2h)−f(x+h)+4f(x)−f(x−h)−2f(x−2h)+f(x+3h)}+O(h^2)

となることも知っておくべきです.いずれにせよ,中心差分近似式(3)を用いた場合の誤差はO(h^2)になっています.

 なお,導関数を近似する差分式で,必要とする精度をもつ公式は原理的には無数に導くことができます.たとえば,O(h^2)の精度をもつ3点差分公式

f’(x)={3f(x)−4f(x−h)+f(x−2h)}/2h+O(h^2)

などがそれに相当します.また,高精度の差分公式としては4点差分公式

f’(x)=1/12h{−f(x+2h)+8f(x+h)−8f(x−h)+f(x−2h)}+O(h^4)

6点差分公式

f’(x)=1/60h{f(x+3h)−9f(x+2h)+45f(x+h)−45f(x−h)+9f(x−2h)−f(x−3h)}+O(h^6)

などがあげられます.

===================================

【2】まとめ

 最後にもう一度,中心差分近似による1次と2次の微分係数の近似式を示しておきます.

f’(x)={f(x+h)−f(x−h)}/2h+O(h^2)

f”(x)={f(x+h)−2f(x)+f(x−h)}/h^2+O(h^2)

===================================