라그랑주 보간법을 이용하는 수치 미분

2021년 5월 22일

함수의 정확한 형태가 주어지지 않고, 몇몇 점들의 함수값들만 알고 있다면 미분을 어떻게 근사할 수 있을까?

이런 문제에 접근하는 근사 방법들을 일컬어 수치 미분Numerical Differentiation이라고 부릅니다.

가장 쉬운 근사

가장 간단한 근사로 미분의 정의를 활용해볼 수 있습니다. 함수 ffx0x_0에서의 미분은 다음과 같이 정의됩니다.

f(x0)=limh0f(x0+h)f(x0)h f'(x_0) = \lim _{h \to 0 } \frac {f(x_0 + h) - f(x_0)} h

따라서 $ \dfrac {f(x_0 + h) - f(x_0)} h를 작은 $h에 대해서 계산할수록 그 값은 f(x0)f'(x_0)에 이론적으로 가까워집니다.

수치적 안정성의 문제

하지만 컴퓨터한테 위 근사를 시키면 수를 표현할 때 사용하는 비트 수에 한계가 있어 반올림을 하게 되는데 이 때 발생하는 오차를 반올림 오차round-off-error라고 합니다.

f(x0+h)f(x0)=δ+cp(f(x0+h)f(x0)) f(x_0 + h) - f(x_0) =\delta+ cp(f(x_0+h) - f(x_0))

계산할 때 분자 부분의 반올림 오차를 위와 같이 δ\delta로 놓습니다. cp(expr)cp(expr)는 식 expr을 컴퓨터가 계산한 결과를 의미합니다.

이제 양변을 h로 나누면

f(x0+h)f(x0)h=δh+cp(f(x0+h)f(x0))h \frac{f(x_0 + h) - f(x_0)} h =\frac \delta h+ \frac {cp(f(x_0+h) - f(x_0))} h

이기 때문에 전체 오차는 δ/h\delta/h가 됩니다. 따라서, hh가 0에 가까워질수록 오차 δ/h\delta / h가 점점 커지고, 결과적으로 수치적 안정성numerical stability이 부족해집니다.

넘어가기 전에

라그랑주 보간법Lagrange interpolation은 함수 f를 n개의 점을 지나는 다항식으로 근사할 수 있습니다. 구간 I 위에서 정의된 fCn+1(I)f \in C^{n+1} (I)가 있고 점 x0,x1,,xnx_0, x_1, \cdots, x_n에 대해 값 f(x0),f(x1),,f(xn)f(x_0), f(x_1), \cdots, f(x_n) 가 알려져 있을 때

f(x)=k=0nf(xk)Lk(x)+f(n+1)(ξ(x))(n+1)!(xx0)(xxn)where Lk(x)=i=0iknxxixkxi f(x) = \sum _{k=0} ^n f(x_k) L_k(x) + \frac {f^{(n+1)}(\xi(x))}{(n+1)!} (x-x_0)\cdots(x-x_n)\\ \text{where } L_k(x) = \prod _{i=0\\i \ne k} ^{n} \frac {x-x_i}{x_k-x_i}

라는 정리가 알려져 있습니다. 이 때, ξ(x)\xi(x)II에 존재하는 값입니다.

가장 쉬운 근사의 재해석, Two-Point Formulas

fC2[a,b]f \in C^2 [a,b]일 때 구간 [a,b]위의 x0,x1=x0+hx_0, x_1=x_0 + h에 대해 라그랑주 보간법 근사를 적용하면 다음과 같습니다.

f(x)=f(x0)xx0hh+f(x1)xx0h+f(ξ(x))2(xx0)(xx0h) f(x) = f(x_0) \frac {x-x_0-h}{-h} + f(x_1) \frac {x-x_0} h + \frac {f''(\xi(x))} 2 (x-x_0) (x-x_0 - h)

여기서 한 번 더 미분하면

f(x)=f(x0)h+f(x1)h+(2(xx0)h)2f(ξ(x))+(xx0)(xx0h)2ddxf(ξ(x)) f'(x) = - \frac {f(x_0)} h + \frac {f(x_1)} h + \frac {(2(x-x_0) - h)} 2 f'' (\xi(x)) + \frac { (x-x_0)(x-x_0-h)} 2 \frac {d}{dx} f''(\xi(x))

가 되고, x=x0x= x_0를 넣으면

f(x0)=f(x0+h)f(x0)hh2f(ξ(x0)) f'(x_0) = \frac { f(x_0 + h) - f(x_0)} h - \frac h 2 f''(\xi(x_0))

를 얻습니다. 이는 처음에 미분 정의로 근사했던 게 점 두개로 라그랑주 보간법을 사용한 결과와 상통합니다. 심지어

f(x0)f(x0+h)f(x0)h=h2f(ξ(x0))=h2maxaxbf(x) \left| f'(x_0) - \frac { f(x_0 + h) - f(x_0)} h \right| = \left|\frac h 2 f''(\xi(x_0))\right| = \frac {|h|} 2 \max _{a \le x \le b} |f''(x)|

라는 error bound까지 얻을 수 있네요!

이 근사법에서

라고 부릅니다.

(n+1)-Point Formulas

라그랑주 보간법은 여러 개의 점을 통한 근사 방법을 제공하기 때문에 Two-Point Formulas를 넘어서 Three-Point, Four-Point, Five-Point Formulas, …로 자연스럽게 확장이 가능합니다. 점 x0,,xnx_0, \cdots, x_n에 대한 정보가 있을 때 라그랑주 보간법 근사를 적용한 후 양변에 미분한 다음 x=xjx=x_j를 넣으면

f(xj)=k=0nf(xk)Lk(xj)+f(n+1)(ξ(xj))(n+1)!k=0kjn(xjxk) f'(x_j) = \sum_{k=0} ^n f(x_k) L_k ' (x_j) + \frac {f^{(n+1)} (\xi(x_j))}{(n+1)!} \prod _{k=0\\k\ne j}^n (x_j-x_k)

이고, x0,,xnx_0, \cdots, x_n이 서로 h씩 균등하게 떨어져 있다면 (xjxk)(x_j - x_k)는 h에 비례하는 값이므로, error term이 O(hn)O(h^n)입니다. 즉, 같은 h를 쓰더라도 n이 클수록 더 많은 정보를 미분할 때 사용하였기 때문에 two-point formula보다 점점 정확해집니다.

여기서 주로 사용하는 버전은 three-point와 five-point formula입니다. 여기서는 간단하게 three-point formula만 소개하려 합니다.

Three-Point Formulas

x0,x1=x0+h,x1=x0+2hx_0, x_1= x_0 + h, x_1 = x_0 + 2h에 대하여 위에서 구한 결과를 간단한 미분을 통해 정리하면

\begin{aligned} f'(x_j) &= f(x_0) \frac {2x_j - 2x_0 - 3h} {2h^2} - f(x_0 + h) \frac {2x_j - 2x_0 - 2h}{h^2} \\&+ f(x_0 + 2h) \frac {2x_j - x_0 - h}{2h^2} + \frac 1 6 f^{(3)} (\xi_j) \prod _{k=0\\k\ne j } ^2 (x_j - x_k) \end{aligned}

이고, 결과적으로 다음의 결과를 얻습니다.

자세히 보면 x1x_1을 넣은 midpoint formula가 error term이 가장 작게 나오고 f(x1+h)f(x_1 + h)도 사용하지 않아도 되기에 실제 사용에서 가장 선호됩니다. 나머지 두 endpoint formulas는 주어진 데이터셋에서 그 점이 끝점인 특정 경우에서 유용합니다.

수치적 안정성

three-point midpoint formula는 다음과 같습니다.

f(x0)=12h[f(x0+h)f(x0h)]h26f(3)(ξ) where h>0 f'(x_0) = \frac 1 {2h} [f(x_0 + h)-f(x_0-h)] - \frac {h^2} 6 f^{(3)}(\xi) \quad \text{ where } h > 0

이 때 각 함수값의 round-off error를 ϵ\epsilon으로, 다음과 같이 정의해볼 수 있습니다.

ϵ=max{f(x0+h)cp(f(x0+h)),f(x0h)cp(f(x0h))} \epsilon = \max \{|f(x_0 + h) - cp(f(x_0 + h))|, |f(x_0-h) - cp(f(x_0 - h))| \}

그러면

e(h)=f(x0)12h[cp(f(x0+h))cp(f(x0h))]=12h[f(x0+h)f(x0h)]h26f(3)(ξ)12h[cp(f(x0+h))cp(f(x0h))]h26M+ϵh where M=maxxIf(3)(x) \begin{aligned} e(h) &= \left|f'(x_0) - \frac {1}{2h} [cp(f(x_0 + h)) - cp(f(x_0 - h))]\right| \\ &= \left | \frac 1 {2h} [f(x_0 + h)-f(x_0-h)] - \frac {h^2} 6 f^{(3)}(\xi) - \frac {1}{2h} [cp(f(x_0 + h)) - cp(f(x_0 - h))] \right| \\ &\le \frac {h^2} 6 M + \frac \epsilon h\quad \text{ where } M = \max_{x \in I} {|f^{(3)}(x)|} \end{aligned}

전항 h2M/6h^2M / 6은 원래 구했던 오차(truncation error이고, ϵ/h\epsilon / h는 round-off error로 인해 발생한 새로운 항입니다. h가 작을수록 truncation error는 작아지지만, round-off error는 커지는 상황이에요. 처음에 다루었던 가장 쉬운 근사에서도 겪었던 문제입니다.

truncation error과 round-off error 사이의 tradeoff

이를 최소화하는 선택은 e(h)e(h)를 최소화하는 문제로, 미분하고 0이 되는 점을 찾아서 구해보면 h=3ϵ/M3h = \sqrt[3]{3\epsilon / M}이 가장 오차가 작습니다. 실제로는 MM을 구하는 게 미분을 근사하는 것보다 훨씬 어려운 문제이니 뚜렷한 답은 없습니다. 그냥 hh를 무조건 작게 잡는게 능사는 아니라는 것 뿐..

Second Derivative Midpoint Formula

마지막으로 이계 미분을 근사하는 기법에 대해서 소개하고 마치려 합니다. 3차 테일러 근사를 이용하면

f(x0+h)=f(x0)+f(x0)h+12f(x0)h2+16f(x0)h3+124f(4)(ξ1)h4f(x0h)=f(x0)f(x0)h+12f(x0)h216f(x0)h3+124f(4)(ξ1)h4where x0h<ξ1<x0<ξ<x0+h f(x_0 + h) = f(x_0) + f'(x_0) h + \frac 1 2 f''(x_0) h^2 + \frac 1 6 f'''(x_0) h^3 + \frac 1 {24} f^{(4)}(\xi_1)h^4\\ f(x_0 - h) = f(x_0) - f'(x_0) h + \frac 1 2 f''(x_0) h^2 - \frac 1 6 f'''(x_0) h^3 + \frac 1 {24} f^{(4)}(\xi_{-1})h^4\\ \text{where } x_0 - h < \xi_{-1} < x_0 < \xi < x_0 + h

이고, 이 둘을 더하면 f(x0)f'(x_0)가 포함된 항은 소거되어서

f(x0)=1h2[f(x0h)2f(x0)+f(x0+h)]h224[f(4)(ξ1)+f(4)(ξ1)] f''(x_0) = \frac 1 {h^2} [f(x_0-h) - 2f(x_0) + f(x_0 + h)] - \frac {h^2} {24} [f^{(4)}(\xi_1) + f^{(4)}(\xi_{-1})]

인데, intermediate value theorem에 의하여

f(x0)=1h2[f(x0h)2f(x0)+f(x0+h)]h212f(4)(ξ) f''(x_0) = \frac 1 {h^2} [f(x_0-h) - 2f(x_0) + f(x_0 + h)] - \frac {h^2}{12} f^{(4)}(\xi)

가 도출됩니다. 이렇게 fC4[x0h,x0+h]f \in C^4[x_0-h, x_0+h]일 때 오차가 O(h2)O(h^2)f(x0)f \prime\prime (x_0)에 대한 근사를 얻었습니다.

References

[1] KAIST 2021 Spring MAS365 Numerical Analysis