N번 미분가능한 함수f:R→R 가 주어져 있다고 하자. 한 점 t∈R 에서 d<N 인 d계 도함수의 함숫값 f(d)(t) 은 충분히 작은 h>0 에 대해 기수가 n∈N 인 유한집합S⊂Z 과 같은 수의 점 {t+kh:k∈S} 으로 다음과 같이 근사할 수 있다.
f(d)(t)≈k∈S∑ckf(t+kh)
여기서 {ck1,⋯,ckn} 은 다음과 같이 구해진다.
ck1⋮ckn=k10⋮k1N−1⋯⋱⋯kn0⋮knN−1−1hdd!δ0,d⋮δN−1,d
여기서 n 개의 점 {t+kh:k∈S} 을 스텐실 포인츠stencil Points라 부르기도 한다.
f′(t)≈hf(t+h)−f(t)
이산화된 데이터만 있고 실제 함수가 없거나, 있더라도 미분하기 곤란할 때는 위와 같이 평균변화율을 참고할 수 밖에 없다. 그런데 꼭 붙어있는 두 점의 정보를 사용할 게 아니라 다음처럼 좌우 두 점을 쓸 수도 있다.
f′(t)≈2hf(t+h)−f(t−h)
보편적으로 더 많은 점을 사용하면 정확도가 더 올라가며, 데이터가 안 좋을수록 이러한 계산에 기대야 하는 상황이 생길 수 있다.
전략: 원본 문서처럼 그냥 예제 비슷하게 약식으로만 보인다. 테일러 정리를 통해 연립 방정식을 세우면 끝이다.
예를 들어 f(4)(t) 를 계산하기 위해 S={−2,−1,0,1,2} 과 같이 다섯 개의 점을 쓴다고 생각해보면, 우리의 목표는 다음을 잘 근사하는 {c−2,⋯,c2} 을 찾는 것이다.
f(4)(t)≈c−2f(t−2h)+c−1f(t−1h)+c0f(t)+c1f(t+h)+ck2f(t+2h)
여기서 f(t+kh) 각각은 테일러 정리에 따라 다음과 같이 전개된다.
==f(4)(t)c−2[f(t)+f′(t)(−2h)+2f′′(t)(−2h)2+6f(3)(t)(−2h)3+24f(4)(t)(−2h)4]+c−1[f(t)+f′(t)(−h)+2f′′(t)(−h)2+6f(3)(t)(−h)3+24f(4)(t)(−h)4]+c0f(t)+c1[f(t)+f′(t)h+2f′′(t)h2+6f(3)(t)h3+24f(4)(t)h4]+c2[f(t)+f′(t)(2h)+2f′′(t)(2h)2+6f(3)(t)(2h)3+24f(4)(t)(2h)4]+O(h5)[c−2+c−1+c0+c1+c2]f(t)+[−2c−2−c−1+0c0+c1+2c2]hf′(t)+[4c−2+c−1+0c0+c1+4c2]2h2f′′(t)+[−8c−2−c−1+0c0+c1+8c2]6h3f(3)(t)+[16c−2+c−1+0c0+c1+16c2]24h4f(4)(t)+O(h5)
늘 하던대로 O(h5) 는 충분히 작으니 탈락시키고, f(t), f’(t), f′′(t), f(3)(t), f(4)(t) 가 무엇이든 위 근사식이 성립하려면
[c−2+c−1+c0+c1+c2]=[−2c−2−c−1+0c0+c1+2c2]=[4c−2+c−1+0c0+c1+4c2]=[−8c−2−c−1+0c0+c1+8c2]=[16c−2+c−1+0c0+c1+16c2]h4f(4)(t)=000024f(4)(t)
을 만족하면 된다. 간단히 행렬식의 모양으로 바꿔보면
=1−24−8161−11−111000011111124816c−2c−1c0c1c2(−2)0(−2)1(−2)2(−2)3(−2)4(−1)0(−1)1(−1)2(−1)3(−1)4(0)0(0)1(0)2(0)3(0)4(1)0(1)1(1)2(1)3(1)4(2)0(2)1(2)2(2)3(2)4c−2c−1c0c1c2=h4100004!
마지막 줄에서 좌변은 우리가 정리에서 보았던 그대로의 형태고, 우변에서는 우리가 관심 있는 d번째 행을 제외하곤 모조리 0 이 되어 버린 것을 확인할 수 있다. 좌변의 행렬을 우변으로 넘기면 우리가 원하던 근사식을 얻는다.
■
가령 {−3,−1,0,1} 4개의 점을 사용하는 정확도의 2계 도함수를 근사하고 싶다면 다음의 행렬방정식
=(−3)0(−3)1(−3)2(−3)3(−3)4(−1)0(−1)1(−1)2(−1)3(−1)4(0)0(0)1(0)2(0)3(0)4(1)0(1)1(1)2(1)3(1)4c−3c−1c0c11−39−27811−11−111000011111c−3c−1c0c1=h21002!0
을 풀어서 다음을 얻는 식으로 사용하면 된다. 직접 계산은 많이 힘들테고 컴퓨터의 힘을 빌리도록 하자.
f′′(t)≈=[c−3f(t−3h)+c−1f(t−h)+c0f(t)+c1f(t+h)]h21[0f(t−3h)+f(t−h)−2f(t)+f(t+h)]
정확도
역시 엄밀하게 보이지는 않았으나 그 정확도는 O(hn−d) 로, 스텐실 포인츠를 많이 사용할수록 정확하며 미분을 많이 할수록 코스트가 커진다고 한다.