Processing math: 100%

[수치해석] Polynomial interpolation

반응형
반응형

보간(interpolation)을 할 때 누구나 생각할 수 있는 방법이 다항식을 이용한 방법입니다. 

점으로 데이터를 가져올 것이라서 그걸 잇는 방법으로 직선이나 곡선으로 이을것인데 다항식은 직선이나 곡선을 만드는 식이니깐 심플하게 시도해 볼 수 있습니다.

수학적으로 어느정도까지 만들어낼 수 있는지 살펴보겠습니다.

 

Linear interpolation

먼저 두점부터 생각해봅시다. 두 점을 잇는 건 다항식으로는 직선으로만 할 수 있습니다.

어떤 선(y=ax+b)이 두 점 (x0,f0),(x1,f1)을 지난다고 하면 다음과 같이 쓸 수 있습니다.

f0=a+bx0

f1=a+bx1

 

목적은 직선을 생성하는것이니 적절한 a와 b를 만들어야 합니다. 

중고등학교 때 배운 거라서 쉽게 풀 수 있을겁니다.

'두점이 지날 때 직선의 방정식을 구하시오' 라는 일차함수 문제와 동일합니다. 

기울기를 구하고 점 하나 대입하면 됩니다. 

 

P1(x)=a+bx=f1f0x1x0(xx0)+f0

중,고등학교 때 배운 직선의 방정식입니다

 

Error

Error를 살펴보기 전에 우리가 원하는 이상적인 f(x)가 있다고 여기고 Error 함수를 e1(x) 이라 하겠습니다.

그러면 e1(x)=f(x)P1(x) 가 됩니다.

x=x0,x1인 곳에서는 당연히 $e_{1}(x)= 0 이므로 그 점을 제외한 x 에 대하여, (1)식을 활용하면 다음과 같이 됩니다.

 

e1(x)=f(x)P1(x)=f(x)f(x0)xx0x1x0(f(x1)f(x0))

 

이제 Error의 범위를 찾아내야 어느정도 정확하게 움직이는지 알 수가 있습니다.

관건은 f(x1),f(x0) 이 얼마나 움직일 것인가 입니다. 그런데 f(x)는 우리가 알지 못하는 함수이므로 

일반적인 형태로 풀어나가야 할 것같습니다. 

일단 f(x)도 다항식으로써 이상적인 함수이니 미분가능하다는 전제입니다. 

그래서 Taylor polynomial로 표현이 가능하고 표현된 식 f0,f1 가 비슷하게 생길것이라 제거되는 부분을 살펴볼 수 있습니다.

결과적으로 얘기하면 다음과 같습니다.

f(x0)=f(x)+(x0x)f(x)+(x0x)22f(x)+...,f(x1)=f(x)+(x1x)f(x)+(x1x)2/2f(x)+... 일때, 

e1(x)=xx02(xx1)f(α), x0<α<x1

 

즉, f(α) 이 오차를 형성하는 중심값이 됩니다. 최악의 시나리오로 움직여 오차가 가장 많다면 , M=max|f(x)|, x0<x<x1 이라 정의하겠습니다.

그러면 다음과 같이 오차범위를 알 수 있습니다.

|e1(x)|12|(xx0)(xx1)|M

 

Quadratic interpolation

이제 세점을 지난다고 한다면 위에서 보인 일차함수로는 식이 2개가 되어서 범위함수로 나눠줘야 합니다.

그림도 직선으로만 이루어져 뭔가 작업을 할 때 두가지 경우로 나눠서 해야합니다.

그래서 곡선으로 표현하면서 식을 하나로 나타낸다면 간단해지므로 이차함수로 표현해보는 시도입니다. 

세 점 (x0,f0),(x1,f1),(x2,f2) 을 잇는 하나의 함수를 만들어봅시다. 

그러면 이차함수 y=a+bx+cx2 이 적합합니다.

점이 세개니깐 3개의 식으로 이루어진 연립방정식이 생깁니다.

여기서 a,b,c를 구해야하는 상황입니다. 

이럴 땐 행렬로 해서 풀어나가면 되겠죠. 행렬로 표현하면 다음과 같이 나옵니다.

 

(1x0x201x1x211x2x22)(abc)=(f0f1f2)

 

이 행렬이 유일한 해를 갖는지 확인하기 위해 행렬식이 0 이 아님을 확인합니다. 

Vandermonde 행렬이므로 행렬식은 다음과 같이 나옵니다. 

 

|1x0x201x1x211x2x22|=(x2x1)(x2x0)(x1x0)0

 

행렬식이 0이 아니면 역행렬을 가질 수 있기 때문에 유일한 해를 가지게 됩니다. a,b,c 를 결정하는데 큰 어려움이 없고 풀기만 하면 됩니다.

행렬을 일일히 다 풀면 너무 복잡하니 c는 cramer's rule 으로 풀고

b는 c의 관계식, a는 b,c의 관계식으로 나타내겠습니다.

그러면 다음과 같이 a,b,c 를 구하게 됩니다.

c=1x2x1[f2f0x2x0f1f0x1x0],

b=f1f0x1x0c(x1+x0),a=f0bx0cx20

 

구한 a,b,c를 넣어서 P2(x)=a+bx+cx2 에 다항식을 완성하게 됩니다.

오차범위는 Lagrange interpolation에서 다시 설명을 하도록 하겠습니다. 

 

c 계산과정입니다. 요약해서 적어놓았습니다.

더보기

X=(1x0x201x1x211x2x22), X3=|1x0f201x1f211x2f22|

 

c=detX3detX=|1x0f201x1f211x2f22|(x2x1)(x2x0)(x1x0)=(x1x0)f2(x2x0)f1+(x2x1)f0(x2x1)(x2x1)(x1x0)(add x0f0x0f0 on numerator)=1x2x1(f2f0x2x0f1f0x1x0)

 

관련 포스팅

[수치해석] Polynomial form

 

 

데이터목장님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY