logo

수치해석학에서의 B-스플라인 📂수치해석

수치해석학에서의 B-스플라인

글과 수식이 읽기 싫으면 그냥 그림으로 보고 이해해도 무방하다.

정의 1

구간 $[a,b]$ 를 $a \le x_{0} < x_{1} < \cdots < x_{n} < \cdots x_{N} \le b$ 와 같은 노드 포인트들로 쪼갰다고 하자. 주어진 자유도 $K$ 에 대해서 $x_{-K} < x_{-K + 1} < \cdots < x_{-1} < x_{0}$ 과 $x_{N} < x_{N + 1} < \cdots < x_{N+K-1} < x_{N+K}$ 의 추가적인 노드를 생각한다. $i$번째 노드 포인트와 자유도 $1 \le k \le K$ 에 디펜드하는 재귀함수 $$ B_{i,k}(x) := \begin{cases} \chi_{[x_{i} , x_{i+1} )} (x) & , k=1 \\ {{ x - t_{i} } \over {t_{i+k-1} - t_{i} }} B_{i , k-1} (x) - {{ x - t_{i+k} } \over {t_{i+k} - t_{i+1} }} B_{i+1, k-1} (x) & , k > 1 \end{cases} $$ 를 정의하자. 이에 대해 주어진 데이터를 인터폴레이트하는 스플라인 $\displaystyle \sum_{i=-3}^{n-1} \alpha_{i} B_{i , K} (x)$ 를 B-스플라인b-Spline이라 한다.

정리

  • [1]: 주어진 데이터에 대해 B-스플라인은 유일하다.
  • [2]: $x \notin (x_{i} , x_{i+K} )$ 에 대해 $B_{i, K} (x) = 0$
  • [3]: 모든 $x$ 에 대해 $0 \le B_{i} (x) \le 1$

  • $\chi$ 는 영역 $A$ 에 대해 $\chi_{A} (x) := \begin{cases} 0 & , x \notin A \\ 1 & , x \in A \end{cases}$ 과 같이 정의된 지시 함수를 나타낸다.

설명

B-스플라인 이란 스플라인 중에서도 베이시스를 가지고 피스와이즈 폴리노미얼 인터폴레이트를 하는 스플라인을 말한다. 함수 $B_{i,K}$ 는 원래의 주어진 함수를 재구축하는 B asis라는 의미에서 $B$ 라는 알파벳을 사용한다.

정리에 대한 설명

증명은 생략한다.

실용성으로 말할 것 같으면 컴퓨터 그래픽을 위시한 응용분야가 넓고 이론적으로도 수학적으로 좋은 성질들을 풍부하게 가져서 B-스플라인만으로도 책 한 권이 나온다. 이것을 포스트 하나만으로 자세하게 설명하는 건 너무 어렵고, 어떤 개념인지 간단하게 체크만 해보도록 하자. 정의만 봤을 땐 손도 못 댈만큼 난해한 것으로 보이지만 실제 개념 자체는 그렇게 어렵지 않다.

  • [1]: 스플라인 이전에 인터폴레이션으로써의 기본 소양이다. $\alpha_{i}$ 들의 유일성을 보이는 방법은 본질적으로 폴리노미얼 인터폴레이션과 다른 점이 없으며, 실제로 받아들일 때의 차이점은 함수공간을 상상할 수 있느냐 없느냐 뿐이다. 그나마도 실제로는 함수공간을 다루는 것이 아니므로 함수공간에 익숙하지 않아도 상관 없다.
  • [2]: $B$ 가 저렇게 정의가 된 이유이자, 베이시스가 리니얼리 인디펜던트 하다는 것을 보장하는 근거다. 무슨 소리인지 이해가 잘 안 가더라도 그림만 보면 딱 이해가 될 것이다.
  • [3]: 함수값의 스케일이 정해져있으면서 특히 음수가 되지 못한다는 것은 실제 함수값에 대한 인터폴레이팅은 사실상 계수 $\alpha_{i}$ 에만 달려있다는 말이 된다. 함수의 모양에 일일이 신경쓸 필요가 없다는 것은 B-스플라인이 다루기 좋은 또 다른 이유다.

시각적 이해

예시를 시작하기에 앞서 언급하자면 사실 원래의 B-스플라인이 커버하는 노드는 위의 정의보다 훨씬 가혹해도 상관없다. 서로 같은 점이 있어도 되고, 추가적인 노드는 상상 이상으로 자유롭다. 그러나 이해를 돕기 위해 예시에서는 유니폼한 간격으로 주어진 노드만을 생각할 것이다.

20190415\_145943.png 자유도 $k=1$ 일 때 데이터를 인터폴레이트하기 위한 $B_{i,1}$ 은 위와 같은 모양을 한다. 이들의 결합으로써 원래의 데이터를 인터폴레이트한다는 것은 말 그대로 그냥 사각 기둥의 높이만 바꿔서 대충 맞추는 것이다. 그러나 함수들의 선형결합으로써 원래의 데이터를 복원한다는 아이디어를 설명하기에는 더할나위 없다.

20190415\_145953.png 자유도 $k=2$ 일 때 $B_{i,2}$ 는 위와 같은 모양을 가짐을 수식적으로 쉽게 확인할 수 있다. 단, 쉬운 것과 간단한 것은 다르다는 사실을 유념하도록 하자. 자유도 $k=1$ 일때와 비교해봤을 때 $\displaystyle \sum_{i=-3}^{n-1} \alpha_{i} B_{i , K} (x)$ 는 조금은 덜 각진 모양을 할 것이다. 참고로 그림에는 따로 표현하지 않았지만 자유도가 늘어남에 따라 $x_{-1} = -1$ 과 $x_{5} = 5$ 같은 추가적인 노드는 계속 생겨나며, 그 곳에서의 $B_{i,2}$ 역시 새롭게 만들어진다.

20190415\_150000.png 자유도 $k=3$ 일 때 $B_{i,3}$ 는 구간별로 쿼드러틱하다. 물론 재귀적으로 정의된 $B_{i,k}$ 의 특성상 전 구간에서 이차함수라는 보장은 없으며, 실제로 안 되는 경우가 대부분일 것이다. 위의 예시들과 가장 크게 달라진 것은 드디어 곡선이 되었다는 것이다.

B-스플라인 이란 위와 같이 특정 구간에서 다루기 쉽고 그 외에는 함수값이 모조리 $0$ 인 함수들의 선형결합으로 인터폴레이트하는 함수다. 그래서 정의는 복잡하게 쓰여지지만 실제 개념은 저런 걸 더 많이, 더 나쁜 조건에서 똑같은 일을 반복하는 것에 지나지 않는다.

같이보기


  1. Atkinson. (1989). An Introduction to Numerical Analysis(2nd Edition): p173. ↩︎