logo

複素ステップ微分近似 📂数値解析

複素ステップ微分近似

公式

関数 $f : \mathbb{R} \to \mathbb{R}$ の導関数 $f ' (x)$ は以下のように複素数を利用して近似することができる。 $$ f ' (x) \approx \frac{\im \left( f \left( x + i h \right) \right)}{h} $$ ここで $\im$ は複素数の虚部を表し、$h$ は十分に小さな実数だ。

説明

やはり複素解析は知るほど面白い。2つ以上の関数値を通じて導関数を近似する有限差分法とは異なり、この方法は特に複素関数ではなかった $f$ でも、形式的に複素関数のように扱って導関数を近似する。

誘導 1

2つの方法があり、どちらも感嘆するほど面白い。実数 $x, y \in \mathbb{R}$ に対して複素数を $z = x + i y$ とし、実関数 $f : \mathbb{R} \to \mathbb{R}$ を $u, v : \mathbb{C} \to \mathbb{R}$ に対して $f(z) = u(z) + i v(z)$ のように表そう。

コーシー・リーマン方程式

コーシー・リーマン方程式: 関数 $f: A \subseteq \mathbb{C} \to \mathbb{C}$ が $\mathscr{R}$ で解析的としよう。もし実関数 $u,v$ に対して $$ f(z) = f(x+iy) = u(x,y) + iv(x,y) $$ ならば $u,v$ は $x,y$ に関する一次偏微分関数が存在し、$\mathscr{R}$ 上のすべての点で以下の連立微分方程式を満たす。 $$ \begin{cases} u_{x} (x,y) = v_{y} (x,y) \\ u_{y} (x,y) = -v_{x} (x,y) \end{cases} $$

もし $f$ が解析的であれば、$f = u + i v$ はコーシー・リーマン方程式を満たさなければならない。 $$ \begin{align*} {\frac{ \partial u }{ \partial x }} =& {\frac{ \partial v }{ \partial y }} \\ {\frac{ \partial u }{ \partial y }} =& - {\frac{ \partial v }{ \partial x }} \end{align*} $$ $u_{x}$ の右辺の $v_{y}$ を極限フォームで書き直すと次のようになる。 $$ {\frac{ \partial u }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i \left( y + h \right) \right) - v \left( x + i y \right) }{ h }} $$ $f$ をまるで複素関数のように扱ってはいるが、実際には $f$ は明確に実関数であるので $y = 0$, $v(x) = 0$ であり、$u(x)$ は $u(x) = f(x)$ そのものである。ひとつずつ代入してみると $y = 0$ なので $$ {\frac{ \partial u }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) - v \left( x \right) }{ h }} $$ であり、$v(x) = 0$ なので $$ {\frac{ \partial u }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) }{ h }} $$ であり、$u(x) = f(x)$ なので $$ {\frac{ \partial f }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) }{ h }} $$ である。最後に $f = u + i v$ なので $\im f = v$ であり、十分に小さな $h$ に対して次の公式を得る。 $$ {\frac{ \partial f }{ \partial x }} = \lim_{h \to 0} {\frac{ \im f \left( x + i h \right) }{ h }} \approx {\frac{ \im f \left( x + i h \right) }{ h }} $$

テイラー展開

テイラー展開: 関数 $f(x)$ が $[a,b]$ で連続であり $(a,b)$ で $n$ 回微分可能ならば次を満たす $\xi \in (a,b)$ が存在する。 $$ \begin{align*} f(b) =& \sum_{k=0}^{n-1} {{(b-a)^{k}\over{k!}}{f^{(k)}( a )}} + {(b-a)^{n}\over{n!}}{f^{(n)}(\xi)} \\ =& {f(a)} + {(b-a)f ' (a)} + \cdots + {(b-a)^{n-1}\over{(n-1)!}}{f^{(n-1)}(a)} + {(b-a)^{n}\over{(n)!}}{f^{(n)}(\xi)} \end{align*} $$

$f(x)$ で $i h$ にテイラー展開してみると次のようになる。 $$ f \left( x + i h \right) = f (x) + i h f ' (x) - h^{2} {\frac{ f '' (x) }{ 2! }} - i h^{3} {\frac{ f ''' (x) }{ 3!s }} + \cdots $$ 我々が関心を持つのは $f ' (x)$ であるため、虚部だけを見てみると $$ \im f \left( x + i h \right) = h f ' (x) - h^{3} {\frac{ f ''' (x) }{ 3!s }} + \cdots $$ であり、$h$ をキャンセルすると $$ {\frac{ \im f \left( x + i h \right) }{ h }} = f ' (x) + O \left( h^{2} \right) $$ である。同様に、$h$ が十分に小さい場合、$h^{2}$ は無視できるほど小さくなり、次のような近似式を得る。 $$ {\frac{ \im f \left( x + i h \right) }{ h }} \approx f ' (x) $$


  1. Martins, J. R., Sturdza, P., & Alonso, J. J. (2003). The complex-step derivative approximation. ACM Transactions on Mathematical Software (TOMS), 29(3), 245-262. https://dx.doi.org/10.1145/838250.838251 ↩︎