logo

복소수 스텝 미분 근사 📂수치해석

복소수 스텝 미분 근사

공식

함수 f:RRf : \mathbb{R} \to \mathbb{R}미분계수 f(x)f ' (x) 는 다음과 같이 복소수를 이용해서 근사할 수 있다. f(x)Im(f(x+ih))h f ' (x) \approx \frac{\im \left( f \left( x + i h \right) \right)}{h} 여기서 Im\im 은 복소수의 허수부를 나타내고, hh 는 충분히 작은 실수다.

설명

역시 복소해석은 알수록 신기하다. 2개 이상의 함숫값을 통해서 미분계수를 근사하는 유한차분법과 달리, 이 방법은 딱히 복소함수가 아니었던 ff 라도 형식적으로 복소함수처럼 다뤄서 미분계수를 근사한다.

유도 1

두가지 방법이 있는데, 둘 다 감탄이 나올만큼 재미있다. 실수 x,yRx, y \in \mathbb{R} 에 대해 복소수를 z=x+iyz = x + i y 으로, 실함수 f:RRf : \mathbb{R} \to \mathbb{R}u,v:CRu, v : \mathbb{C} \to \mathbb{R} 에 대해 f(z)=u(z)+iv(z)f(z) = u(z) + i v(z) 와 같이 나타내자.

코시-리만 방정식

코시-리만 방정식: 함수 f:ACCf: A \subseteq \mathbb{C} \to \mathbb{C}R\mathscr{R} 에서 해석적이라고 하자. 만약 실함수 u,vu,v 에 대해 f(z)=f(x+iy)=u(x,y)+iv(x,y) f(z) = f(x+iy) = u(x,y) + iv(x,y) 이라면 u,vu,vx,yx,y 에 대한 일차편도함수가 존재하며 R\mathscr{R} 상의 모든 점에서 아래의 연립미분방정식을 만족시킨다. {ux(x,y)=vy(x,y)uy(x,y)=vx(x,y) \begin{cases} u_{x} (x,y) = v_{y} (x,y) \\ u_{y} (x,y) = -v_{x} (x,y) \end{cases}

만약 ff 가 해석적이라면 f=u+ivf = u + i v 는 코시-리만 방정식을 만족시켜야 한다. ux=vyuy=vx \begin{align*} {\frac{ \partial u }{ \partial x }} =& {\frac{ \partial v }{ \partial y }} \\ {\frac{ \partial u }{ \partial y }} =& - {\frac{ \partial v }{ \partial x }} \end{align*} uxu_{x} 의 우변인 vyv_{y}을 극한폼으로 다시 적어보면 다음과 같다. ux=limh0v(x+i(y+h))v(x+iy)h {\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 }} ff 를 마치 복소함수처럼 다루기는 했지만, ff 는 엄연히 실함수기 때문에 y=0y = 0, v(x)=0v(x) = 0 이면서 u(x)u(x)u(x)=f(x)u(x) = f(x) 그 자체다. 하나씩 대입을 해보자면 y=0y = 0 이므로 ux=limh0v(x+ih)v(x)h {\frac{ \partial u }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) - v \left( x \right) }{ h }} 이고, v(x)=0v(x) = 0 이므로 ux=limh0v(x+ih)h {\frac{ \partial u }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) }{ h }} 이고, u(x)=f(x)u(x) = f(x) 이므로 fx=limh0v(x+ih)h {\frac{ \partial f }{ \partial x }} = \lim_{h \to 0} {\frac{ v \left( x + i h \right) }{ h }} 이다. 마지막으로 f=u+ivf = u + i v 이므로 Imf=v\im f = v 이고, 충분히 작은 hh 에 대해 다음의 공식을 얻는다. fx=limh0Imf(x+ih)hImf(x+ih)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)f(x)[a,b][a,b] 에서 연속이고 (a,b)(a,b) 에서 nn미분가능하면 다음을 만족하는 ξ(a,b)\xi \in (a,b) 가 존재한다. f(b)=k=0n1(ba)kk!f(k)(a)+(ba)nn!f(n)(ξ)=f(a)+(ba)f(a)++(ba)n1(n1)!f(n1)(a)+(ba)n(n)!f(n)(ξ) \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)f(x) 에서 ihi h 로 테일러 전개를 해보면 다음과 같다. f(x+ih)=f(x)+ihf(x)h2f(x)2!ih3f(x)3!s+ 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)f ' (x) 이므로 허수부만 보면 Imf(x+ih)=hf(x)h3f(x)3!s+ \im f \left( x + i h \right) = h f ' (x) - h^{3} {\frac{ f ''' (x) }{ 3!s }} + \cdots 이고, hh 를 캔슬링하면 Imf(x+ih)h=f(x)+O(h2) {\frac{ \im f \left( x + i h \right) }{ h }} = f ' (x) + O \left( h^{2} \right) 이다. 마찬가지로 hh 가 충분히 작다면 h2h^{2} 은 무시할 수 있을만큼 작아지고, 다음과 같은 근사식을 얻는다. Imf(x+ih)hf(x) {\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 ↩︎