구간별 보간법(piecewise interpolation)
구간별 보간법은 주어진 구간을 여러 작은 부분으로 분할한 뒤, 각 구간에서만 정의되는 보간 다항식을 구성하여 전체 구간에서의 보간 함수를 완성하는 기법이다. 전역적(global)으로 하나의 고차 다항식을 사용하는 전통적인 다항식 보간과 달리, 구간별 보간법에서는 문제의 국소성을 최대한 활용함으로써 계산의 유연성과 안정성을 높일 수 있다. 전역 보간에서 발생하는 높은 차수에 따른 진동(Runge 현상)을 회피할 수도 있어, 수치적 신뢰도가 높아지는 장점이 있다.
전역 보간과의 비교
전역 보간은 $n+1$개의 점이 주어졌을 때 차수가 $n$ 이하인 하나의 보간 다항식을 사용한다. 그러나 구간이 넓어지거나 보간점 수가 늘어나면 차수도 함께 커진다. 차수가 커질수록 수치 오차가 악화되고 진동 현상이 심화될 수 있다. 반면 구간별 보간법에서는 각 구간에서만 다항식(주로 낮은 차수)을 정의하므로, 필요한 구간 이외에는 보간 다항식의 영향이 미치지 않는다. 따라서 계산을 단순화하고, 오차를 구간별로 관리할 수 있다는 이점이 있다.
구간별 선형 보간(piecewise linear interpolation)
구간별 보간의 가장 간단한 형태는 구간별 선형 보간이다. 주어진 보간점들을 $x_0 < x_1 < \cdots < x_n$이라 하고, 각 점에서의 함수값을 $f_0, f_1, \dots, f_n$이라 하자. 그렇다면 인접하는 두 보간점 $x_i$와 $x_{i+1}$ 사이에 선형(1차) 다항식을 정의할 수 있다.
어떤 $i$에 대해 $x$가 $x_i \le x \le x_{i+1}$ 구간에 있을 때, 선형 다항식 $P_i(x)$는 두 점 $(x_i, f_i)$와 $(x_{i+1}, f_{i+1})$를 지나는 형태로 구성된다. 즉,
구간별로 정의된 $P_i(x)$들을 이어 붙이면, 전체 보간 함수 $P(x)$가 완성된다. 이 $P(x)$는 모든 보간점에서 원래 함수값을 정확히 재현하며, 인접한 구간 사이에서의 접합은 연속적이지만(즉 $C^0$ 연속), 미분값은 일반적으로 달라서 $C^1$ 연속성은 만족하지 못한다.
구간별 선형 보간의 오차 분석
원래 함수가 충분히 매끄럽다고 가정하면, 각 구간에서의 선형 보간은 2차 이하의 항만 보존한다. 예를 들어, $x_i \le x \le x_{i+1}$ 구간에서의 보간 오차는
의 형태를 갖는다. 테일러 전개와 유사한 근사를 통해 오차 상한을 유도할 수 있다. 특히 $f$가 $[x_i, x_{i+1}]$ 구간에서 2차 미분이 연속적이라면, 적절한 $\xi$가 존재하여
이와 같은 꼴로 표현되는 것이 알려져 있다. 간단히 말해, 구간의 길이가 짧을수록 오차는 줄어들고, 함수의 곡률(2차 미분)이 클수록 오차는 커진다고 볼 수 있다.
구간별 고차 보간 및 스플라인(spline) 보간
선형 보간 대신 각 구간에서 2차, 3차 등 더 높은 차수의 다항식을 사용할 수도 있다. 이때 구간 사이의 접합 경계에서 연속성에 대한 조건이 추가되면 스플라인 보간으로 이어진다. 스플라인 보간은 개별 구간에서 주로 3차 다항식을 사용하고, 인접 구간 간의 연결에서 1차 및 2차 미분값도 연속하도록 조건을 부과한다.
스플라인 보간의 대표적인 예는 삼차 스플라인(cubic spline)이다. 삼차 스플라인 보간에서는 $n+1$개의 보간점에 대해 $n$개의 3차 다항식을 정의한다. 각 구간을 $[x_i, x_{i+1}]$이라 하고 구간별 다항식을
와 같이 정의한다고 하자. 경계 조건으로 연속성 $C^2$를 만족시키기 위해서는
이와 같은 접합 조건을 모든 인접 구간 쌍에 대해 만족해야 한다. 또한 맨 앞구간과 맨 뒤구간에 대해서는 추가 경계 조건(자연 스플라인, 고정 단부 스플라인 등)을 설정하여 계수를 결정한다.
구간별 고차 보간과 스플라인 기법을 활용하면, 선형 보간보다 부드러운(차수가 높고 미분값이 연속적인) 보간 함수를 얻을 수 있다. 그러나 구간마다 여러 개의 미지수가 존재하므로, 계수를 구하기 위한 체계적인 방정식을 세우고 풀어야 한다. 삼차 스플라인의 경우 모든 계수는 대체로 삼중 대각 행렬(tridiagonal system) 형태의 선형 방정식을 통해 효율적으로 결정된다.
스플라인 보간의 해석적 특징
스플라인 보간은 전체 구간을 하나의 고차 다항식으로 처리하지 않음에도 불구하고, 높은 차수의 연속성을 확보하는 점이 핵심이다. 구간 간 경계에서 1차, 2차 미분이 연속이 되도록 설계하면, 보간 함수 자체가 매끄럽고, 시각적으로도 매끄러운 곡선을 얻을 수 있다. 추가적으로, 각 구간의 길이가 짧다면 조그마한 구간에 대한 오차가 커지지 않도록 제어가 가능하다. 스플라인은 수치 전산 및 공학에서 곡선 근사, CAD, 모션 계획 등에 널리 사용된다.
Hermite 보간(Hermite interpolation)
스플라인 보간과 유사하게, 각 보간점에서 함수값뿐만 아니라 미분값의 정보를 함께 고려하여 구간별 다항식을 구성하는 방법을 Hermite 보간이라 한다. 예를 들어, 인접하는 두 점 $x_i$와 $x_{i+1}$ 사이에서 함수값 $f_i, f_{i+1}$와 일계 미분값 $f'i, f'{i+1}$을 모두 만족하도록 3차 다항식을 구할 수 있다. 이때 구간에서의 보간 다항식 $H_i(x)$는
와 같이 표현된다. 여기서 $\theta = \frac{x - x_i}{x_{i+1} - x_i}$ 이고, $h_{i,1}, h_{i,2}, h_{i,3}, h_{i,4}$는 3차 Hermite 기본 다항식으로서
와 같은 형태로 정의된다. 이 보간법은 각 구간의 시작점과 끝점에서의 미분값이 명시적으로 주어졌을 때 부드럽게 연결되는 보간곡선을 만들 수 있다. 그러나 모든 보간점에서 미분값까지 정확히 알고 있어야 한다는 점이 한계로 작용할 수도 있다.
스플라인 보간의 경계 조건
삼차 스플라인은 구간별로 3차 다항식을 쓰되, 각 구간 경계점에서 $C^2$ 연속성을 만족하도록 설계된다. 이것을 위해 모든 인접 구간에서
이런 접합 조건이 성립해야 한다. 남는 자유도는 스플라인의 양 끝단에 대해 부과하는 경계 조건에 의해 결정된다. 흔히 사용되는 경계 조건은 다음과 같은 유형들이 있다.
자연 스플라인(natural spline): 양 끝점에서 두 번째 미분값을 0으로 설정한다. 즉,
고정 단부(clamped or fixed) 스플라인: 양 끝점에서 보간할 함수의 일阶 미분값이 주어진 경우, 이를 그대로 만족하도록 설정한다. 즉,
양 끝에서 이차 미분값을 일반적인 수치 미분 근사(예: 오차항을 고려한 차분 방식)로 대체해 지정하기도 한다. 경계 조건을 어떻게 설정하느냐에 따라 스플라인의 형태가 다소 달라질 수 있다.
삼차 스플라인 계수 결정: 삼중 대각(3-diagonal) 계수 행렬
스플라인 보간에서 각 구간의 3차 다항식
에 대해, 접합 조건과 경계 조건을 모두 풀어내면 최종적으로 계수 $a_i, b_i, c_i, d_i$에 대한 방정식을 얻게 된다. 이들은 적절한 재정리를 통해 주로 $c_i$(또는 $M_i$라는 표기로 일컫기도 한다)에 관한 삼중 대각 행렬 형태의 선형계로 귀결된다.
예를 들어, 삼차 스플라인에서 $c_i$ 계수는
와 같은 형태로 이어지며, 여기서 $\alpha_i, \beta_i, \gamma_i, \delta_i$는 $\Delta x_i = x_{i+1}-x_i$와 함수값 $f_i$ 등에 의해 결정된다. 이 행렬은 대각선과 바로 인접한 상·하부 대각선 요소만이 비영이 되는 삼중 대각 행렬(tridiagonal matrix)로 나타나므로, 고효율 알고리즘(Thomas 알고리즘 등)을 이용하여 빠르고 안정적으로 $c_i$를 구할 수 있다. 그 다음에 $c_i$가 결정되면, 연쇄적으로 $a_i, b_i, d_i$를 찾는다.
스플라인 보간 알고리즘의 처리 과정을 간단히 mermaid로 나타내면 아래와 같다.
2차 스플라인과 고차 스플라인
필요에 따라 각 구간에서 2차나 4차 이상의 다항식을 사용하여 스플라인을 구성할 수 있다. 그러나 차수를 지나치게 높이면 각 구간마다 결정해야 할 계수도 많아지고, 경계에서 부과해야 할 연속 조건도 증가한다. 일반적으로는 3차 스플라인이 실용성과 매끄러움의 균형이 좋아 가장 널리 쓰인다.
2차 스플라인의 경우, 인접 구간을 잇는 경계에서 $C^1$ 연속만 강제하면 되고, 2차 미분 연속은 요구되지 않으므로 계수 계산이 보다 간단해질 수도 있다. 하지만 2차 스플라인은 두 번째 미분값이 불연속이 될 수 있으므로, 곡률 측면에서 매끄럽지 않을 수 있다. 그럼에도 특정 용도(단순 시각화 등)에서는 가볍고 빠르게 계산 가능한 장점이 있다.
스플라인의 응용: 보간 vs. 보정
스플라인을 활용할 때, 실제 측정 데이터가 잡음을 포함하면, 보간(interpolation)보다는 보정(smoothing) 목적으로 스플라인을 사용할 수도 있다. 이때에는 모든 점을 반드시 통과시키지 않고, 어느 정도 근사 오차를 허용하면서 전체 곡선이 부드럽게 데이터를 감싸도록 설계한다. 이를 스무딩 스플라인(smoothing spline)이라 부른다.
간단 예시(Python)
다음은 Python으로 간단히 구간별 선형 보간과 3차 스플라인 보간을 시각화하는 예시 코드이다. 여기서는 numpy와 scipy.interpolate 등을 활용한다.
이와 같은 기초적인 활용 예로도, 구간별 보간이 얼마나 직관적으로 구현 가능한지 확인할 수 있다.
B-스플라인(B-spline)
스플라인 보간에서 각 구간의 다항식을 유연하게 구성하기 위한 또 다른 중요한 개념이 B-스플라인이다. B-스플라인은 주어진 매듭점(knots)들을 기준으로 하여 구성된 특별한 기저함수(basis functions)들의 선형 결합으로 스플라인 함수를 표현하는 방식이다. 매듭점들의 배열에 따라 B-스플라인들은 국소적(piecewise) 다항식 형태를 가진다. 이때 각 B-스플라인의 지지 집합(support)은 특정 구간 내로 제한되므로, 한 구간의 매개변수 변화가 전체 보간 곡선에 미치는 영향이 국소적이다.
매듭점(knots)과 차수(degree)
B-스플라인 함수를 정의하려면, 먼저 매듭 벡터라 불리는 일련의 구간 분할점을 결정해야 한다. 이를
와 같이 두고, 우리는 차수가 $k$인 B-스플라인을 고려한다. 그러면 B-스플라인 기저함수는 보통 $N_{i,k}(t)$와 같은 표기로 나타내며, $i$는 매듭점 인덱스, $k$는 차수를 의미한다. 예를 들어, 차수가 0인($k=0$) B-스플라인은 단순히 구간적 특성 함수를 나타내며, 차수가 1 이상일 때는 재귀적 정의를 통해 얻을 수 있다.
재귀적 정의를 간단히 기술하면, 차수 0($k=0$)에 대하여
차수 1 이상($k \ge 1$)인 경우에는
이와 같은 방식으로 정의된 $N_{i,k}(t)$들은 특정 구간에서만 0이 아닌 값을 갖고, 다른 구간에서는 0이 된다. 이렇게 국소화(local)된 형태가 B-스플라인의 핵심 특징이며, 스플라인 곡선을 기저함수들의 선형 결합
로 표현할 수 있다. 이때 $c_i$는 보간 또는 근사에 필요한 스플라인의 계수들이다.
B-스플라인 보간과 계수 결정
주어진 점 $(x_i, f_i)$들을 보간하고자 할 때, $S(x_i) = f_i$를 만족하도록 $c_i$들을 결정하는 문제는 일반적인 스플라인 계수 결정 문제와 유사하게 선형 시스템을 푸는 방식으로 접근할 수 있다. B-스플라인 기저를 사용하면 행렬이 대체로 희소(sparse) 구조를 띠고, 구간 간 상호의존성이 크지 않아 수치 계산 면에서 유리할 수 있다.
B-스플라인은 스플라인 함수를 나타내는 모든 표현 중에서도 가장 일반적이며, 매듭점의 중복도(multiplicity)나 분포를 조절함으로써 구간별 다항식 차수, 매끄러움의 정도($C^k$ 연속성) 등을 체계적으로 제어할 수 있다. 또한 CAD나 컴퓨터 그래픽스 분야에서 곡선을 설계할 때, 제어점을 조작하면 해당 구간에만 국소적인 변화가 일어나므로 직관적이면서 강력한 도구가 된다.
De Boor 알고리즘
B-스플라인에서 특정 $t$ 값에서의 $S(t)$를 효율적으로 계산하기 위한 방법으로 De Boor 알고리즘이 널리 사용된다. De Boor 알고리즘은 B-스플라인의 국소적 구조를 활용하여, 다항식 계수를 직접 전개하지 않고도 짧은 연산으로 $S(t)$의 값을 구해낼 수 있는 점이 강점이다. 특히, 구간별로 다른 다항식 계수를 굳이 저장하지 않고, 매듭점을 기반으로 선택된 B-스플라인들의 비중만을 재귀적으로 계산하면 되므로 구현이 효율적이다.
보간과 근사, 그리고 B-스플라인
B-스플라인은 보간(interpolation) 문제뿐 아니라, 근사(approximation) 문제에도 자주 활용된다. 예컨대, 큰 개수의 데이터점을 그대로 다 보간하는 대신, B-스플라인 기저함수들에 대한 최소제곱 근사(least squares fitting)를 통해 곡선을 얻을 수 있다. 이때, 매듭점의 분포나 차수를 적절히 선택함으로써 오버피팅을 방지하고, 데이터 잡음에 영향을 덜 받는 스플라인 근사곡선을 생성할 수 있다.
기본 아이디어는, 어떤 오차 척도(예: 제곱합 오차)를 최소화하는
를 풀어서 ${c_i}$를 결정하는 것이다. $S(x_j)$가 B-스플라인 기저를 통해 표현되므로, 결과적으로는 선형 least squares 문제 형태로 귀결된다.
스플라인 모델링과 자유도
B-스플라인으로 스플라인 곡선을 나타낼 때, 사용자는 매듭점의 위치와 개수, 스플라인의 차수, 제어점(계수)의 개수 등을 정해야 한다. 매듭점이 많을수록, 또는 차수가 높을수록 스플라인의 표현력은 커지나, 그만큼 자유도와 계산량도 증가한다. 매끄러움의 조건($C^k$ 연속성)이나 사용자 정의 경계 조건도 동시에 고려해야 한다.
일반적으로는 3차 혹은 4차 B-스플라인을 가장 많이 활용한다. 차수가 너무 낮으면 곡선이 매끄럽지 않고, 너무 높으면 설계나 계산, 그리고 국소 변경에 따른 영향도가 복잡해질 수 있다.
B-스플라인도 결국은 구간별(polynomial piecewise) 다항식들의 이음새를 매끄럽게 잇는 스플라인의 한 표현 방식이다. 따라서, 스플라인 보간에서 논의된 $C^1, C^2$ 등의 연속성 문제와 삼중 대각 행렬을 통해 계수를 구하는 이슈들이 여전히 존재한다. 다만 B-스플라인은 이 과정을 기저함수 차원에서 해결할 수 있어, 여러 응용 분야에서 선호된다.
고차원 확장
스플라인 보간 혹은 B-스플라인은 2차원(곡면, surface) 이상의 고차원 문제로도 확장 가능하다. $x, y$ 좌표 위에 매듭점을 설정하고, 2차원 B-스플라인(텐서곱 B-스플라인)을 사용하면 곡면(spline surface)을 나타낼 수 있다. CAD 소프트웨어나 기계공학 등에서 부품의 표면을 설계할 때 활용된다. 실제 구현 시에는 매듭과 제어점의 2차원(또는 그 이상의 다차원) 구조를 고려하는 것이 핵심이다.
구간 선택과 적응형(piecewise adaptive) 기법
구간별 보간을 할 때, 각 구간의 길이를 미리 균등하게 결정하기도 하지만, 원하는 오차 범위를 만족하거나 복잡도가 높은 구간에서는 구간 수를 늘려 국소적으로 촘촘하게 분할하기도 한다. 이를 적응형 구간 분할(adaptive refinement)이라 부른다. 간단히 말해, 보간 오차가 큰 구간을 재분할하여 더 세밀하게 보간 점을 배치하고, 보간 오차가 작은 구간은 그대로 두는 식이다.
이러한 적응형 기법은 특히 함수가 특정 구간에서 급변하거나 진동이 심한 경우, 효율적인 분할을 통해 전체 계산량을 줄이면서 필요한 해상도를 확보할 수 있다는 장점이 있다. 스플라인의 경우에도 각 구간의 매듭점 배치를 동적으로 조정하는 적응형 B-스플라인 개념이 연구 및 활용되고 있다.
모양 보존(interpolation with shape constraints)
함수 데이터가 단조 증가·감소하거나, 양의 구간에서 음수가 되지 않도록 보간 곡선을 구성해야 하는 상황이 종종 있다. 이때 단순 다항식 보간을 사용하면, 보간 점 사이에서 진동이 발생하거나 음수가 되는 구간이 생길 수 있다. 이를 방지하기 위해 모양 보존(Shape-preserving) 기법이 고려된다. 대표적으로 단조(monotonic) 보간, 양의 보간(positivity-preserving), 볼록(convex) 보간 등이 있으며, 이런 특성을 보장하기 위해 구간별 보간 다항식에 제약 조건을 부과하거나, 특수한 형태의 스플라인을 사용한다.
단조 보간(monotonic interpolation)
데이터 ${(x_i, f_i)}$가 $x_0 < x_1 < \cdots < x_n$이고, $f_0 \le f_1 \le \cdots \le f_n$처럼 단조 증가한다고 하자. 구간별 선형 보간을 하면 부분적으로 단조성은 유지되지만, 더 부드러운 고차 다항식을 사용하려고 하면 보간 다항식이 인접한 점들 사이에서 국소적 최대나 최소를 만들어 단조성이 깨질 위험이 있다. 이때, 단조 스플라인(monotonic spline)이나 단조 보간 다항식을 구성하는 특별 기법들이 활용된다.
단조성 유지 조건을 만족하려면, 각 구간에서의 일계 미분값이 음수나 양수가 되도록 적절히 제한해야 한다. 예를 들어, 특정 삼차 보간법(예: Piecewise Cubic Hermite Interpolation, PCHIP)은 각 구간에서 미분값을 조절하여 원 데이터가 단조 증가하면 보간 함수도 단조 증가하도록 만든다. PCHIP은 Fritsch–Carlson 방법 등의 알고리즘을 통해 구간별 미분값을 계산하여, 불필요한 음의 계수나 과도한 양의 계수가 등장하지 않도록 억제한다.
단조 구간별 3차 Hermite 보간에서 구간 $[x_i, x_{i+1}]$에 대한 다항식 $H_i(x)$는
이때 $m_i = f'i$는 각 구간 끝점에서의 1차 미분값을 의미한다. 단조 보간을 위해서는 $m_i, m{i+1}$가 특정 조건(예: $f_{i+1} - f_i$ 부호에 맞춰 설정)이 되도록 결정해야 한다.
양의 보간(positivity-preserving interpolation)
만약 모든 보간점에서 $f_i > 0$이라면, 보간 과정에서 함숫값이 음수가 되지 않도록 보장하고 싶은 경우가 있다. 예컨대 확률 밀도 함수나 농도(concentration) 등의 양(量)은 음수가 될 수 없다. 이를 위해 각 구간에서 보간 다항식(또는 보간 함수)이 음수가 되지 않는 형태의 제한을 가한다.
양의 보간을 달성하기 위한 한 가지 방법은 로지티즘(logit)이나 로그 변환을 사용하는 것이다. 예를 들어, $g_i = \ln(f_i)$를 정의해두고 $g_i$에 대해 선형 또는 스플라인 보간을 수행한 뒤, 최종 결과에서 역변환 $f(x) = e^{g(x)}$를 취하면, 모든 $f(x)$가 양수가 된다. 이 방법은 경계 값이 0에 가까울 때 처리가 까다롭지만, 비교적 간단히 양의 값을 보장하는 장점이 있다.
직접 다항식 계수에 양의 제약을 부여하는 방법도 있으나, 일반적인 스플라인 계수 행렬에 이러한 비선형 제약 조건을 추가하기가 쉽지 않으므로, 지수 변환 같은 기법이 널리 쓰인다.
볼록(convex) 보간
데이터가 볼록성을 가지고 있을 때(즉, 2차 미분이 0 이상), 그 성질을 보간 과정에서 유지해야 할 수도 있다. 볼록 데이터의 구간별 보간에서, 각 보간 구간의 스플라인 다항식이 2차 미분이 음수가 아니도록(또는 특정 부호를 갖도록) 제어해야 한다. 이 역시 직접 계수에 대한 부등식 제약을 푸는 것은 복잡하며, 다양한 형식의 기법이 연구되어 왔다. 실전에서는 다항식 대신 베지어(Bezier) 곡선 계열이나 B-스플라인을 활용해 제어점에 부등식을 부과하는 방식으로 접근하기도 한다.
Fritsch–Carlson 기법(PCHIP)
단조성과 모양 보존의 대표적 예로, Fritsch–Carlson 기법이 있다. 이 기법은 인접 데이터가 단조 증가/감소일 때 보간 다항식이 그 단조성의 범위를 벗어나지 않도록 각 구간의 미분값을 제한한다. 기본 아이디어는 삼차 Hermite 보간 형태에서 $m_i, m_{i+1}$를 적절히 조정하여, 변곡(과도 진동)이 생기지 않도록 하는 것이다.
구체적으로 $[x_i, x_{i+1}]$ 구간에서
라 정의했을 때, $m_i$와 $m_{i+1}$가 단조 유지에 부합하도록
와 같은 형태를 적용한다. 여기서 $\phi$는 특정 완화(relaxation) 함수로서, 두 기울기 $\Delta_{i-1}, \Delta_i$ 사이에서 자연스럽게 연결되도록 만든다. 예컨대 $m_i$가 두 인접 기울기의 가중 평균이 되도록 하지만, 부호가 바뀌지 않도록 제어한다. 이와 같은 기법을 Piecewise Cubic Hermite Interpolation (PCHIP)이라 부르며, 실제 구현 라이브러리로도 많이 제공된다.
Piecewise Rational 보간
모양 보존이나 특수 형상을 위해, 다항식 대신 유리함수(rational function)를 부분적으로 사용하는 방법도 있다. 유리함수 $R(x) = \frac{P(x)}{Q(x)}$는 적은 차수로도 복잡한 곡선을 표현하기 유리하며, 양의 보존을 위한 대응 변환(예: $\exp$) 없이도 직접 조건을 구현하기 쉬울 수 있다. 예컨대, 제한된 구간에서 곡률, 극점 등을 세밀하게 제어하기 위해, 각 구간을 유리 보간으로 처리하는 방안이 연구되고 있다.
에러 분석 관점
모양 보존이라는 제약은 에러 분석에도 영향을 준다. 단조나 볼록 등의 조건을 만족하려면, 일반적인 최적 다항 보간과는 다른 계수를 택해야 하므로, 보간 오차가 다소 증가할 수도 있다. 그러나 그 이득으로 데이터의 고유 형상을 유지하는 한편, 진동(Runge 현상)을 줄이거나, 불필요한 음수값이나 국소 극값 발생을 방지할 수 있다. 실제로는 주어진 문제의 우선순위(형상 보존 vs. 최소 오차 vs. 계산 효율)에 따라 스플라인 또는 다른 보간법을 적절히 선택한다.
간단 예시(Octave)
다음은 Octave에서 PCHIP(Fritsch–Carlson) 방식으로 단조 보간을 시연해보는 예시다. Octave에서 pchip 함수는 Scilab, MATLAB 등과 유사하게 PCHIP 보간을 구현한다.
위 코드를 실행하면, 점 $(x_i, f_i)$를 정확히 통과하면서도 불필요한 굴곡을 억제한 곡선을 확인할 수 있다.
분할 구간과 유한요소법(Finite Element Method)과의 연관성
구간별 보간(piecewise interpolation)은 유한요소법(FEM)과도 밀접한 관련이 있다. 유한요소법에서는 복잡한 물리·공학 문제(예: 편미분방정식)를 해석하기 위해 도메인을 여러 요소(element)로 분할하고, 각 요소 위에서 비교적 간단한 형태(주로 다항식)의 보간 함수를 정의한다. 예를 들어, 1차(선형) 요소를 사용할 경우, 각 요소의 양 끝점에서만 자유도를 갖는 간단한 선형 보간 함수를 쓰고, 2차(이차곡선) 요소를 쓸 때는 요소 내부에 추가 보간점(매개노드)을 두어서 구간별 2차 다항식을 정의한다.
이처럼 분할 구간별로 정의되는 보간 함수를 ‘형상 함수(Shape function)’라고 부른다. 유한요소 해석에서, 각 요소에 대한 형상 함수를 합쳐 전체 해 공간을 구성하고, ‘가상 일의 원리’나 ‘약형(weak form)’을 만족하는 방향으로 계수를 결정해 문제의 근사해를 구한다. 결국 FEM에서의 형상 함수는 구간별(또는 요소별) 보간을 구조적으로 확장한 개념이며, 보간의 국소성(locality)이 FEM의 핵심 장점 중 하나를 이룬다.
1차 요소(선형 요소) 예시
1차 선형 요소는 구간 $[x_i, x_{i+1}]$을 하나의 요소라 하고, 두 끝점에 해당하는 노드에서만 자유도를 갖는다. 이때 형상 함수 $\varphi_i(x)$는
와 같은 구조로 정의된다. 이는 앞에서 언급한 구간별 선형 보간과 정확히 일치하는 형태이다. 만약 $u_i, u_{i+1}$가 요소의 자유도라면, 요소 내부의 해(근사해) $u_h(x)$는
로 표현된다.
고차 요소와 중첩 보간
더 높은 차수의 요소(2차, 3차 등)를 쓰면, 각 요소에 추가 노드를 배치하여 구간별 이차, 삼차 보간으로 해를 근사할 수 있다. 예를 들어 2차 요소에서는 $[x_i, x_{i+1}]$ 내에 중간 노드 $x_{i+1/2}$를 두고,
이 세 개의 형상 함수를 구성하여 보간 차수를 높인다. 결국 요소 하나가 하나의 ‘구간’으로 작동하며, 구간별 보간 함수를 전역적으로 접합해 전체 해를 구성한다는 점에서, 유한요소법은 매우 체계적인 구간별 보간의 응용이라 할 수 있다.
고차원 보간과 텐서곱 스플라인(tensor product spline)
구간별 보간은 1차원에서만 쓰이는 것이 아니다. 2차원, 3차원 문제로 확장해서 곡면(surface)이나 고차원 필드(field)를 표현할 때도 비슷한 아이디어를 적용한다. 예를 들어, 2차원 격자점 $(x_i, y_j)$에 대해 구간별 다항식을 구성하려면, $x$ 방향과 $y$ 방향 각각에 대해 스플라인 보간 기법을 적용하고, 텐서곱(tensor product)을 통해 2차원 보간 함수를 얻는다.
2차원 텐서곱 예시
$x$축에 $x_0 < x_1 < \cdots < x_n$, $y$축에 $y_0 < y_1 < \cdots < y_m$이 있을 때, 2차원 데이터 $f_{i,j} = f(x_i, y_j)$가 주어졌다고 하자. 각 축에 대해 각각 스플라인 기저 함수를 정의하면, 예를 들어 3차 스플라인 기준으로
와 같이 쓸 수 있다. 이때 2차원 보간 함수 $S(x,y)$는
형태로 텐서곱 구조를 갖는다. $B_p, B_q$는 각각 1차원 B-스플라인 기저 등을 의미한다. 계수 $\alpha_{p,q}$는 데이터 $f_{i,j}$를 만족하도록(보간 혹은 근사하도록) 결정한다.
CAD 소프트웨어나 이미지 처리, 표면 보정(surfacing) 작업 등에서 2차원 혹은 3차원의 스플라인 보간이 활발히 사용된다. 예컨대 3차원에서 점 구름(point cloud) 데이터가 주어졌을 때, 스플라인 곡면을 적절히 맞춰 CAD 모델로 변환할 수 있다.
웨이블릿(Wavelet)과 다해상도(piecewise multiscale) 기법
구간별 보간 개념이 확장된 예로, 웨이블릿(Wavelet)을 활용한 다해상도 분석(multi-resolution analysis)이 있다. 웨이블릿은 구간별 스케일을 달리하여 신호나 함수를 근사·분석하는 강력한 도구인데, 국소적으로 정의된 기저함수를 사용한다는 점에서 스플라인과 유사한 측면이 있다. 실제로, 웨이블릿 기저 중에 스플라인 웨이블릿(spline wavelet)이 존재하며, 구간별 보간 다항식과 비슷한 구조를 가진다.
다해상도 접근(MRA, Multi-Resolution Analysis)을 간단히 보자면, 함수를 큰 스케일(낮은 해상도)에서 대략적으로 나타낸 뒤, 점차 스케일을 세밀하게 축소해가면서 보충 정보를 추가하여 정밀도를 높이는 아이디어다. 구간별 보간이 기본적으로 각 구간에 국한된 다항식을 사용한다는 점과 상통한다. 다만 웨이블릿은 주파수 영역 분석이나 압축·필터링 등에 특화되어 있다는 차이가 있다.
조각별 보간에서의 일반적 고려사항
구간별 보간을 적용할 때는 아래와 같은 사항들을 종합적으로 고려해야 한다(아래는 나열이 아닌 서술임).
구간 분할의 방식 균등 간격으로 분할할지, 혹은 적응형 방식으로 분할할지 결정한다. 함수가 매우 빠르게 변하거나 진동이 큰 구간은 더 세밀하게 나누어야 효율적인 보간이 가능하다.
보간 차수의 선택 차수가 높을수록 개별 구간 내부에서 정확도는 향상될 수 있으나, 구간마다 결정해야 할 계수도 많아지고, 경계 연결이 복잡해진다. 보간 데이터의 규모나 부드러움 요구 정도에 따라 적절한 차수를 정한다. 실무에서는 3차 스플라인이 가장 보편적이다.
접합 경계에서의 연속성 및 매끄러움 $C^0, C^1, C^2$ 등의 연속성을 원하는 만큼 부과하면, 매끄러운 곡선을 얻을 수 있으나, 그만큼 방정식 체계가 복잡해지고 자유도가 줄어든다. 적절한 수준의 연속성 조건을 설계해야 한다.
국소성(locality)과 안정성 전역 보간 다항식에 비해, 구간별 보간은 국소 수정이 가능하므로 데이터 한 점이 살짝 바뀌어도 전체 곡선이 크게 뒤틀리지 않는다. 이것은 스플라인(B-스플라인) 보간의 주요 장점이기도 하다.
수치 계산 효율 각 구간마다 적은 차수의 다항식을 쓰면서, 구간 간에는 삼중 대각 행렬 등 희소(sparse) 구조를 갖는 방정식을 풀게 되므로, 전역적 고차 다항식보다 계산이 유리할 수 있다. 데이터점이 매우 많은 경우에도 유리하다.
오차와 안정성 분석 테일러 전개 등을 통해 구간별 보간의 오차를 추정할 수 있다. 스플라인 보간의 경우, 적절한 매개변수(2차 미분의 크기 등)에 의해 오차 한계를 해석할 수 있고, 적응형 분할 기법으로 국소 오차를 줄이기도 한다.
구간별 보간(piecewise interpolation)은 단순 전역 다항식 보간이 갖는 문제점을 해소하기 위한 다양한 방법들을 포괄하며, 실제로는 스플라인, B-스플라인, 유한요소법 형상 함수, 웨이블릿 등 여러 분야에 걸쳐 폭넓게 응용된다. 특히 수치 안정성과 국소성을 확보한다는 점, 그리고 매끄러운 곡선을 구성할 수 있다는 점에서, 수치해석과 공학적 문제 해결에 매우 중요한 기술로 자리 잡고 있다.
Last updated