본문 바로가기

(비정기) Mr.K's Post/Weekly paper

Interpolation : Part 3


안녕하십니까 Mr. K입니다

목요일에 글을 쓰기 시작하는것도 오랜만이군요
과연 목요일이 끝나기 전에 글을 올릴 수 있느냐가 문제지만 -_-;


지난 두 포스트에 이어서 계속 같은 데이터( 3개의 점: (1, 2), (2, 3), (3, 6) )를 가지고 얘기해보겠습니다

…. We remark that various conclusions can be drawn from the data by using the forward differences; for instance whether it was generated using a polynomial (in which case the differences truncate).
We now construct a polynomial which goes through a set of points which are not necessarily evenly spaced. Let us consider the polynomial

It is worth pausing at this point and checking that this curve goes through each of the points (x_j, f_j). For example for j = 3, we set z = x_3 and only the third term is non-zero and we have

Hence the value of the polynomial at z = x_3 is f_3 (as we would hope). This is an example of a Lagrange polynomial; which could have equally been written as

This is a convenient way to write out the cubic we require (as it is relatively easily extended to higher-order cases) and in order to evaluate it we can use the MATLAB code: …
(위 내용은 AN INTRODUCTION TO Programming and Numerical Methods in MATLAB에서 일부 발췌했음을 알려드립니다)


영어로 뭐라고 막 쓰여있지만 가볍게 무시해줍시다 -_-;


주어진 순서쌍의 집합에는 (x_n, f_n)꼴의 점들이 있는데, '주어진 N+1개의 점을 지나는 N차 다항식'을 구하기 위해

첫번째 그림에 있는 것과 같은 모양의 다항식을 생각합니다

그러면 저 다항식은 두번째 그림의 예와 같이 f(x_n) = f_n 이라는 관계를 갖게 됩니다

이러한 다항식을 Lagrange polynomial이라고 부르고 세번째 그림과 같이 줄여서 씁니다


책에서는 4개의 점을 예로 들어서 다항식을 소개하였는데,

이것을 'N개'의 점에 대해서 확장시키면 다음과 같습니다

N개의 점에 대한 N-1차 Lagrange polynomial.


N+1개의 점에 대해서 확장시키려면 위의 N 자리에 N+1을 대입하기만 하면 됩니다

책에서는 N개의 점에 대해서 소개하고 있지만, 저는 보간법 포스팅을 N+1개의 점에 대해서 시작했기 때문에
설명하는 내용과 등장하는 수식 간에 다소 차이가 있을 수 있습니다

이 공식을 우리의 데이터: (1, 2), (2, 3), (3, 6)으로 적용해보면 다음과 같습니다



다소 계산은 복잡합니다만
지난주에 포스팅했던 Newton Forward Differences 와 비교했을 때 훨씬 '단순한' 모양을 하고 있습니다

수업시간에 들은 내용이 잘 기억나지 않지만, 이 다항식의 단점은 딱히 없었던 것 같습니다
굳이 단점이라 할만한 것이 있다면 손으로 계산하기 귀찮다는 것이랄까 -_-;
(개인적인 생각이지만, Vandermonde matrix >> Lagrange polynomial > Newton Forward Differences 순으로 귀찮은 연산인 것 같습니다 -_-;)


코드로 구현해보면 다음과 같습니다


위의 소스에서 combination이라는 함수는 Newton Forward Differences에 썼던 것을 그대로 가져왔습니다

numer라는 함수는 다항식의 계수부분 중 분자(numerator) 부분을 구하는 함수이고,
(정확히 말하면 분자를 모두 구하는 것은 아니고, 위의 공식에서 f_i 를 제외한 나머지부분에 대한 분자를 구합니다)

denom이라는 함수는 다항식의 계수부분 중 분모(denominator) 부분을 구하는 함수입니다


이제 우리의 데이터: (1, 2), (2, 3), (3, 6)을 가지고 프로그램을 실행한 결과는 아래와 같고,



다른 case를 테스트하기 위해 적당히 4개의 점을 입력한 결과는 아래와 같습니다




이번주 포스트는 이것으로 마치고,
다음주는 시험기간이라 한 회 쉬게 될 것 같습니다

더불어, 요즘 pku 3685: matrix 를 풀어보고있는데, 잘 안됩니다
AC받은 2人은 시간 나는대로 서로 상의를 하든지 해서 나 군입대 하기 전까지 풀이를 올려주길//
Talk카테고리에 미리 얘기했던 것처럼 명확한 이유가 없다면 태클 마구 들어갈겁니다 -_-;

(포스팅 소요시간 : 약 65분 + 서버점검 8시간 + 5분)