2020년 10월 1일 목요일

삼각 함수 보간(Trigonometric Interpolation)

[경고] 아래 글을 읽지 않고 "삼각 함수 보간"을 보면 바보로 느껴질 수 있습니다.


[그림 1] 복소 평면에서 보간의 예(출처: wikipedia.org)

다항 함수 보간(polynomial interpolation)은 고차 다항식의 계수를 바꾸어서 함수값을 정확히 아는 점 혹은 표본점(sampling point) (x0,y0), (x1,y1), , (xn,yn) 사이의 중간값을 채운다. 다항 함수 보간을 사용하는 대표적인 예는 라그랑주 보간(Lagrange interpolation)이다.

                 (1)

식 (1)이 좋은 보간법이기는 하지만, x가 커지면 Ln(x)의 함수값이 급격히 커질 수 있다. 그래서 큰 x에 대해서도 보간한 함수값이 커지지 않는 새로운 보간법이 필요하다. 보간에 사용하는 기저 함수(basis function)를 1차 함수 대신 삼각 함수(trigonometric function)를 쓰면, 보간 영역의 바깥[외삽(extrapolation)]에서 보간한 함수값이 매우 커지는 현상을 완화시킬 수 있다. 이와 같이 삼각 함수를 이용해서 함수를 보간하는 방법은 삼각 함수 보간(trigonometric interpolation)이라 한다[1]. 삼각 함수 보간에는 오일러의 공식(Euler's formula)을 적극적으로 사용한다.

                 (2)

오일러 공식을 이용해 z = eix라 두면, 1차 함수 관계를 삼각 함수 관계로 손쉽게 바꿀 수 있다. 또한 우리가 고려하는 정의역은 실수에서 [그림 1]과 같은 복소 평면(complex plane)으로 확대된다. 더 구체적으로 알아보기 위해 먼저 실수 영역에서 삼각 함수 보간을 표현한다[1].

                 (3)

여기서 0x<2π, ak,bk는 알고 있는 함수값으로 결정하는 계수이다. 식 (2)를 이용해 식 (3)의 삼각 함수를 복소 지수 함수(complex exponential function)로 바꾸어본다.

                 (4)

여기서 a0 = c0, ak = ck+ck, bk=i(ckck)이다. 복소수 z = eix로 정하면, 식 (4)는 복소 평면에서 정의되는 다항식이 될 수 있다.

                 (5)

정의역이 복소수로 확대되기는 했지만, 식 (5)의 우변은 분명 다항식이다. 만약 식 (1)에 제시한 라그랑주 보간을 사용하면, 삼각 함수 보간에 대한 공식을 쉽게 유도할 수 있다. 알고 있는 함수값의 개수[= 2n+1]가 홀수인 경우는 다음과 같은 삼각 함수 보간으로 표현된다.

                 (6)

여기서 0x<2π이다. 라그랑주 보간의 기저 함수를 참고해서, 식 (6)의 삼각 함수 보간을 이루는 기저 함수 tk(x)를 다음처럼 얻는다.

                 (7)

여기서 유한번 곱한 eix의 최대 차수가 n이 되도록 ein(xkx)를 맨앞에 곱한다. 식 (7)의 우변에 의해 tk(xm) = δkm이 성립한다. 여기서 δkm은 크로네커 델타(Kronecker delta)이다. 식 (7)에 복소 지수 함수의 항등식을 적용한다.

                 (8)

그러면 식 (7)은 매우 간단한 삼각 함수 관계식으로 바뀐다[1].

                 (9)

여기서 tk(x+2π) = tk(x)이므로 tk(x)는 주기가 2π주기 함수(periodic function)이다. 아는 함수값의 개수[= 2n]가 짝수인 경우도 홀수와 비슷하게 Fn(x)tk(x)를 정의한다.

                 (10)

                 (11)

여기서 tk(xm) = δkm이다. 다만 식 (11)에서 tk(x)를 구성하는 eix의 최대 차수는 n0.5가 되어서 정수가 아니다. 추가적으로 식 (11)은 식 (9)처럼 사인 함수만으로 표현될 수 있다.

                 (12)

여기서 tk(x+2π) = -tk(x)이다. 기저 함수 tk(x)는 주기가 4π이지만, x2π만 바뀌어도 원래 함수값과 부호만 다를 뿐 종속성이 나타난다. 그래서 식 (12)의 x0x<2π로 제한되어야 한다.
이상을 종합해서 식 (6)과 (10)의 결과에서 2nN2n1N으로 각각 바꾸면, 아는 함수값의 개수가 홀수든 짝수든 같은 공식으로 삼각 함수 보간을 할 수 있다. 하지만 짝수인 경우는 아쉽게도 tk(x)에 나오는 eix의 최대 차수는 분수가 된다.
식 (4)는 푸리에 급수와 비슷한 유한 급수이므로, ck를 다음처럼 구할 수 있다. 

                 (13)

만약 xm이 균등하게 분포되면, xm = 2πm/(2n+1)[m = 0,1,,2n]이라 정할 수 있다. 그러면 이산 푸리에 변환(discrete Fourier transform, DFT) 개념을 도입해서 편하게 ck를 구한다.

                 (14)

여기서 l = n,n+1,,n1,n이다. DFT의 푸리에 계수는 (2n+1)ck이므로, DFT로 계산해 ck를 정할 수도 있다.
두 표본점 x0,x1이 매우 가까운 경우도 삼각 함수 보간이 가능할까? 두 표본점의 차이 x1x0이 분모에 있기 때문에 기저 함수 tk(x)의 크기가 매우 커질 수도 있다. 두 표본점이 매우 근접한 경우의 보간 특성을 파악하기 위해 식 (9) 혹은 (12)를 다음처럼 변형한다.

                 (15)

                 (16)

                 (17)

식 (16)에 정의한 두 함수값의 차이 평균 yd는 다음처럼 함수의 미분 y와 연결된다.

                 (18)

평균값의 정리(mean value theorem)에 의해, 구간 [x0,x1] 사이에 있는 적당한 xd에 대해 y = y(xd) = Δy/Δx가 성립하는 미분이 존재한다. 식 (18)을 식 (17)에 대입해서 깔끔하게 정리한다.

                 (19)

여기서 Sa(x) = sinx/x이다. 따라서 x0,x1이 아무리 근접하더라도 함수의 미분이 존재하면, 삼각 함수 보간은 절대 발산하지 않는다. 

[참고문헌]
[1] G. E. O. Giacaglia, "Trigonometric interpolation," Celestial Mechanics, vol. 1, pp. 360–367, Sep. 1970.

댓글 3개 :

  1. 안녕하세요.
    작성해주신 글 잘 읽었습니다.
    다름이아니라 적어주신 글에서 함수값의 수에 따라 삼각함수의 보간이 달라지는데 그 이유나 논문을 알려주실수 있으신가요?
    참고문헌에는 이와 관련된 내용이 안나와서,,,ㅠㅠ
    부탁드리겠습니다.

    답글삭제
    답글
    1. 기본 발상은 [1]를 참고했어요. 참고문헌 [1]에서는 함수값이 짝수라도 홀수처럼 x=0을 기준으로 보간이 되도록 했어요. 이러면 홀수와 짝수 경우가 같은 점을 기준으로 보간이 됩니다. 이게 당연하지만 결과식이 너무 복잡해요. 그래서 저는 식 (12)에서 이걸 무시하고 최종 결과가 간단해지도록 했어요. 전체적인 내용은 [1]을 따라갔기 때문에, 식 (12)가 [1]의 결과와 달라도 저라면 참고문헌을 [1]로 할 것 같아요.

      삭제
    2. 감사합니다.
      전파거북이님 덕분에 많은 것을 알아가는 거 같습니다.
      코로나 조심하시고 좋은 하루 보내세요!
      다시 한번 감사드립니다.

      삭제

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.