[수치해석] Divided difference interpolation
- 수학
- 2021. 10. 16.
Largrange interpolation 을 컴퓨터로 실행하게 되면 xi−xj 를 일일히 계산해야 해서 계산량이 많아져서 비효율적입니다. 이에 대한 계산비용을 줄이고 다양한 방식을 접목하기 위해 기호를 정의해서 계산량을 개선하는 시도입니다.
Divided differences
미분을 보면 다음과 같습니다.
df(x)dx=f′(x)=limh→0f(x+h)−f(x)h
이 식을 해석을 해보면 x와 x+h 사이의 기울기를 h를 줄여가면서 순간 기울기를 구하겠다는 얘기입니다.
f'(x)를 그림으로 그려보면 다음과 같습니다.

즉, tangent line을 그리는 것입니다. 미적분을 공부하면 다 아는 내용이지만 다시 정리를 해보았습니다.
이렇게 정의되는 미분을 직접 계산하지 않고 estimate를 하겠습니다.
데이터셋이 (x0,f0),...,(xn,fn) 이라 할 때, x=xi 에서의 f의 기울기는 f(xi+1)−f(xi)xi+1−xi 가 됩니다.
오차는 어찌하든 발생하기 마련이니 미분 f'(x)를 기울기로 대체하겠습니다.
f′(xi)≈f(xi+1)−f(xi)xi+1−xi=f[xi,xi+1]
기호화로 f[x_i,x_{i+1}]이라 하겠습니다. 이를 the first_order divided difference of f at x=xi 라 합니다.
이 기호를 확장해서 세점일때는 다음과 같이 씁니다. 이거는 2계미분도 아니고 단순한 기호를 활용한 확장입니다.
f[xi,xi+1,xi+2]=f[xi+1,xi+2]−f[xi,xi+1]xi+2−xi
이를 the second-order divied difference of f at x=xi 라 합니다.
n+1의 데이터셋에 대해서는 다음과 같이 씁니다. 이름을 붙인다면 Higher-order divided difference of f at x=xk입니다.
f[x0,x1,...,xk−1,xk]=f[x1,...,xk]−f[x0,...,xk−1]xk−x0
마지막으로 fi=f[xi] 로 표시하고 the divided difference of order zero of f at x=xi 이라 합니다.
실질적으로 Lagrange interpolation을 보더라도 f'(x) 하나만 나오고 나머지는 나오지 않으니 큰 무리는 없는 기호화인 듯 합니다.
Divided difference polynomial
이제 Lagrange interpolation에 divide difference를 적용해보겠습니다.
먼저 linear interpolating polynomial 입니다.
p1(x)=(x−x1x0−x1)f0+(x−x0x1−x0)f1=f0+(f1−f0x1−x0)(x−x0)=f[x0]+f[x0,x1](x−x0)
이 방식으로 더해 나가면 pn(x)=pn−1(x)+f[x0,...,xn](x−x0)...(x−xn−1) 으로 점화식처럼 표기할 수 있습니다.
정리하면 다음과 같습니다.
pn(x)=f[x0]+n∑k=1f[x0,...,xk]k−1∏i=0(x−xi)
이를 Newton divided difference polynomial 이라고 합니다.
예제
Newton divided difference polynomial 과 Lagrange polynomial의 계산비교의 예를 보겠습니다. 이 예제는 Introduction to numerical analysis 라는 책에서 가져왔습니다.
데이터셋 (1,0),(-1,-2),(2,3) 에 대한 quardratic polynomial을 만들어보겠습니다.
먼저 Newton divided difference polynomial 입니다.
divided difference를 계산하면 다음과 같이 됩니다.
f[x0}=0, f[x1]=-2, f[x2]=3
f[x0,x1]=1, f[x1,x2]= 53
f[x0,x1,x2]= 23
이제 대입만 해주면 됩니다.
p2(x)=f[x0]+(x−x0)f[x0,x1]+(x−x0)(x−x1)f[x0,x1,x2]=0+(x−1)+23(x−1)(x+1)=2x23+x−53
Lagrange polynomial 입니다.
ℓ0(x)=(x−x1)(x−x2)(x0−x1)(x0−x2)=(x+1)(x−2)(2)(−1)=−x2+x+22
ℓ1(x)=(x−x0)(x−x2)(x1−x0)(x1−x2)=(x−1)(x−2)(−2)(−3)=x2−3x+26
ℓ2(x)=(x−x0)(x−x1)(x2−x0)(x2−x1)=(x−1)(x+1)(1)(3)=x2−13
p2(x)=2∑k=0ℓk(x)fk=0ℓ0(x)−2ℓ1(x)+3ℓ2(x)=2x2+3x−53
비교해보면 계산방법의 차이만 있을 뿐 결과는 같게 나옵니다.
더 효율적인 Newton divided difference polynomial 을 이용해 계산을 하면 많은 계산비용에서 벗어날 수 있습니다.
관련 포스팅
'수학' 카테고리의 다른 글
[수치해석] Spline interpolation(스플라인 보간법) (0) | 2021.10.23 |
---|---|
[수치해석] Equispaced interpolation(등간격 보간) (0) | 2021.10.20 |
[수치해석] Lagrange interpolation (0) | 2021.10.12 |
[수치해석] Polynomial interpolation (0) | 2021.10.11 |
[수치해석] Polynomial form (0) | 2021.10.04 |
데이터목장님의
글이 좋았다면 응원을 보내주세요!