Chapter 06

스플라인과 곡선

5장의 결론은 "등간격 데이터에 고차 다항식을 쓰지 말라"였습니다. 그렇다면 점이 수백 개인 측정 데이터나 글자의 윤곽선은 무엇으로 이어야 할까요? 답은 낮은 차수의 다항식을 조각조각 이어 붙이고, 이음매에서 매끄러움을 맞추는 것입니다. 이 장은 가장 단순한 꺾은선에서 시작해, 오버슈트 없이 단조성을 지키는 PCHIP, 곡률까지 연속인 3차 스플라인과 그 삼중대각 선형계, 경계 조건의 선택, 스플라인이 "가장 덜 휜 곡선"이라는 정리를 다룹니다. 후반부는 함수의 그래프가 아닌 곡선, 곧 글꼴과 CAD와 애니메이션 경로를 그리는 베지에 곡선과 B-스플라인입니다.

이 수식이 없었다면자동차 차체와 화면의 글꼴

컴퓨터 이전의 조선소와 항공기 공장에서는 길고 얇은 나무 자를 스플라인이라 불렀습니다. 자를 바닥의 못이나 무거운 추 사이에 끼우면 자는 탄성 에너지가 가장 작은 모양으로 휘어 점들을 매끄럽게 잇습니다. 1946년 쇤베르크(Isaac Schoenberg)가 이 이름을 빌려 조각별 다항식 이론을 세웠고, 그 3차 스플라인이 실제로 "굽힘 에너지 최소" 성질을 가진다는 것이 이 장의 정리 6.8입니다.

1950년대 말~1960년대에 프랑스 자동차 회사의 두 엔지니어, 시트로엥의 드 카스텔조(Paul de Casteljau)와 르노의 베지에(Pierre Bézier)는 차체의 곡면을 도면 대신 숫자로 전달하는 방법을 각자 만들었습니다. 오늘날 이 글을 표시하는 글꼴의 윤곽선(TrueType은 2차, PostScript·CFF 글꼴은 3차 베지에), 벡터 그림, CSS 애니메이션의 cubic-bezier() 곡선, CAD의 NURBS가 모두 그 후손입니다.

점 수백 개·윤곽선→고차 다항식은 출렁임→조각별 3차 + 이음매 연속→스플라인·베지에·B-스플라인

고차 보간의 대안: 조각별 다항식

점 50개를 한 다항식으로 이을 수는 없다

온도 센서가 1초마다 값을 기록해 50개의 점을 얻었습니다. 5장의 결과대로 49차 보간 다항식은 양 끝에서 폭발하고, 점 하나만 바꿔도 곡선 전체가 흔들립니다. 노드를 체비쇼프 점으로 옮길 수도 없습니다. 측정 시각은 이미 정해져 있으니까요.

해결책은 전체 구간을 노드로 나눈 각 작은 구간마다 낮은 차수의 다항식을 쓰는 것입니다. 노드 a=x0<x1<⋯<xn=ba = x_0 \lt x_1 \lt \dots \lt x_n = b로 나누고 hi=xi+1−xih_i = x_{i+1} - x_i, h=max⁡hih = \max h_i라 합시다. 가장 단순한 것은 이웃한 두 점을 직선으로 잇는 조각별 선형 보간(piecewise linear interpolation)입니다.

정리 6.1 (조각별 선형 보간의 오차) f∈C2[a,b]f \in C^2[a, b]이고 ℓ\ell이 노드에서 ff와 같은 조각별 선형 함수면
max⁡[a,b]∣f−ℓ∣≤h28max⁡[a,b]∣f′′∣.\max_{[a,b]}|f - \ell| \le \frac{h^2}{8}\max_{[a,b]}|f''|.

증명. 한 구간 [xi,xi+1][x_i, x_{i+1}]에서 ℓ\ell은 두 점의 1차 보간이므로 5장 정리 5.6에서 f(x)−ℓ(x)=f′′(ξ)2(x−xi)(x−xi+1)f(x) - \ell(x) = \frac{f''(\xi)}{2}(x - x_i)(x - x_{i+1}). ∣(x−xi)(x−xi+1)∣|(x - x_i)(x - x_{i+1})|의 최댓값은 가운데에서 hi2/4h_i^2/4이다. ∎

다항식 보간과 결정적으로 다른 점은 오차가 f′′f''에만 의존하고 차수가 고정이라는 것입니다. nn을 늘리면 h→0h \to 0이므로 오차는 O(h2)O(h^2)로 반드시 줄어듭니다. 룽게 현상이 없습니다. 또 한 점의 값을 바꾸면 이웃한 두 구간만 바뀝니다(국소성).

예제 6.1 (사인의 꺾은선 근사) [0,π][0, \pi]를 10등분해 sin⁡x\sin x를 조각별 선형 보간하라. 최대 오차는?
  1. h=π/10=0.314159h = \pi/10 = 0.314159, ∣sin⁡′′∣≤1|\sin''| \le 1이므로 한계 h2/8=0.012337h^2/8 = 0.012337.
  2. 실제 최대 오차는 π/2\pi/2를 가운데에 둔 구간에서 생긴다. 노드가 0.4π,0.5π,0.6π0.4\pi, 0.5\pi, 0.6\pi이므로 π/2\pi/2가 노드이고, 최대는 x≈1.4143x \approx 1.4143(구간 [0.4π,0.5π][0.4\pi, 0.5\pi]의 가운데 근처)에서 0.0121600.012160이다.
  3. 한계와 거의 같다. f′′f''이 구간 안에서 거의 일정할 때 한계는 날카롭다. 오차 10−610^{-6}을 원하면 h≈8×10−6=0.0028h \approx \sqrt{8\times10^{-6}} = 0.0028, 약 1100개 구간이 필요하다. 1차는 단순하지만 느리다. 더 높은 정확도는 구간 안의 다항식을 3차로 올려서 얻는다.

그런데 꺾은선은 노드에서 기울기가 끊깁니다. 자동차 차체나 로봇 궤적에서 기울기의 불연속은 반사광의 꺾임이나 가속도의 충격으로 나타납니다. 그래서 구간마다 3차 다항식을 쓰고 이음매에서 기울기(C1C^1)나 곡률(C2C^2)까지 맞춥니다. 아래 시뮬레이터에서 세 가지를 비교해 보세요. 3차 스플라인은 3절에서 유도합니다.

SIMULATOR

점을 끌어 비교하기: 다항식 vs 꺾은선 vs 3차 스플라인

점을 끌기 · 빈 곳 클릭으로 점 추가
다항식조각별 선형자연 스플라인
점 수—
굽힘 에너지 ∫s″² (스플라인)—
∫p″² (다항식)—
데이터 범위 밖 최대 초과 (다항식)—
해볼 것: ① 가운데 점 하나를 위아래로 끌어 보세요. 스플라인은 근처 몇 구간만 크게 변하고 멀리서는 거의 그대로인데, 다항식은 양 끝까지 흔들립니다. ② 빈 곳을 클릭해 점을 12개 이상으로 늘리면 다항식은 양 끝에서 폭발하지만 스플라인은 차분합니다. ③ 굽힘 에너지를 비교하세요. 어떻게 점을 놓아도 스플라인의 값이 다항식보다 작습니다(정리 6.8). 모델: 자연 경계 조건 s″ = 0, 에너지는 [x₀, xₙ]에서의 적분.

조각별 3차 에르미트와 단조성(PCHIP)

센서 보정표가 거꾸로 꺾이면 안 된다

열전대의 전압–온도 보정표는 단조 증가합니다. 그런데 보정점이 고르지 않게 놓여 있으면 매끄러운 보간 곡선이 데이터 사이에서 살짝 내려갔다가 올라갈 수 있습니다. 그러면 같은 전압에 온도 두 개가 대응해 역함수가 망가집니다. 매끄러우면서도 데이터의 모양(단조성)을 지키는 보간이 필요합니다.

5장 8절의 에르미트 보간을 구간마다 씁니다. 각 노드에서 값 yiy_i와 기울기 did_i를 정하면 구간 [xi,xi+1][x_i, x_{i+1}]의 3차식은 s=(x−xi)/his = (x - x_i)/h_i로

pi(x)=yiH00(s)+hidiH10(s)+yi+1H01(s)+hidi+1H11(s),p_i(x) = y_i H_{00}(s) + h_i d_i H_{10}(s) + y_{i+1}H_{01}(s) + h_i d_{i+1}H_{11}(s),
H00=2s3−3s2+1H_{00} = 2s^3 - 3s^2 + 1, H10=s3−2s2+sH_{10} = s^3 - 2s^2 + s, H01=−2s3+3s2H_{01} = -2s^3 + 3s^2, H11=s3−s2H_{11} = s^3 - s^2(에르미트 기저). 값과 기울기가 이웃 구간과 공유되므로 결과는 C1C^1이다.

남은 문제는 기저 did_i를 어떻게 정하느냐입니다. f′f'을 안다면 그대로 쓰고(에르미트 데이터), 모른다면 데이터에서 추정해야 합니다. 구간의 기울기 δi=(yi+1−yi)/hi\delta_i = (y_{i+1} - y_i)/h_i를 쓰는 다음 규칙이 프리치–칼슨(Fritsch–Carlson, 1980) 계열의 PCHIP(Piecewise Cubic Hermite Interpolating Polynomial)입니다.

정의 6.2 (PCHIP 기울기) 내부 노드 xkx_k에서
dk={0,δk−1δk≤0  (극값이거나 평평함),w1+w2w1δk−1+w2δk,그 밖,w1=2hk+hk−1, w2=hk+2hk−1.d_k = \begin{cases} 0, & \delta_{k-1}\delta_k \le 0 \ \ (\text{극값이거나 평평함}),\\[2pt] \dfrac{w_1 + w_2}{\dfrac{w_1}{\delta_{k-1}} + \dfrac{w_2}{\delta_k}}, & \text{그 밖}, \end{cases}\qquad w_1 = 2h_k + h_{k-1},\ w_2 = h_k + 2h_{k-1}.
가중 조화 평균이다. 한쪽 기울기가 작으면 dkd_k도 작아져 곡선이 급히 꺾이지 않는다. 등간격이면 2dk=1δk−1+1δk\frac{2}{d_k} = \frac{1}{\delta_{k-1}} + \frac{1}{\delta_k}. 끝점은 세 점 공식 ((2h0+h1)δ0−h0δ1)/(h0+h1)((2h_0 + h_1)\delta_0 - h_0\delta_1)/(h_0 + h_1)을 쓰되 부호가 δ0\delta_0와 다르면 0으로, 너무 크면 3δ03\delta_0으로 자른다(MATLAB pchip, SciPy PchipInterpolator의 방식).
정리 6.3 (단조성 조건, 프리치–칼슨) 구간에서 δi≠0\delta_i \ne 0이고 α=di/δi\alpha = d_i/\delta_i, β=di+1/δi\beta = d_{i+1}/\delta_i라 하자. α,β≥0\alpha, \beta \ge 0이고 α2+β2≤9\alpha^2 + \beta^2 \le 9이면 그 구간의 3차 에르미트 보간은 단조다. δi=0\delta_i = 0이면 di=di+1=0d_i = d_{i+1} = 0일 때 상수다.

핵심 아이디어. pi′p_i'은 ss의 2차식이고, pi′/δip_i'/\delta_i가 [0,1][0, 1]에서 음이 되지 않을 조건을 (α,β)(\alpha, \beta) 평면에 그리면 원 α2+β2≤9\alpha^2 + \beta^2 \le 9를 품는 영역이 된다. 조화 평균 규칙은 α,β\alpha, \beta를 0 이상 3 이하로 두어 이 영역 안에 머문다(등간격이면 α,β≤2\alpha, \beta \le 2). ∎

예제 6.2 (계단 모양 데이터) x=0,1,…,5x = 0, 1, \dots, 5, y=0, 0.1, 0.2, 3, 3.1, 3.2y = 0,\ 0.1,\ 0.2,\ 3,\ 3.1,\ 3.2. 구간 기울기는 δ=0.1, 0.1, 2.8, 0.1, 0.1\delta = 0.1,\ 0.1,\ 2.8,\ 0.1,\ 0.1.
  1. d1d_1: 0.10.1과 0.10.1의 조화 평균 =0.1= 0.1. d2d_2: 2/d2=1/0.1+1/2.8=10.3572/d_2 = 1/0.1 + 1/2.8 = 10.357, d2=0.1931d_2 = 0.1931. 대칭으로 d3=0.1931d_3 = 0.1931, d4=0.1d_4 = 0.1. 끝점 d0=(3⋅0.1−0.1)/2=0.1d_0 = (3\cdot0.1 - 0.1)/2 = 0.1, d5=0.1d_5 = 0.1.
  2. 가파른 구간 [2,3][2, 3]의 양 끝 기울기가 0.190.19로 작게 잡혔다. 곡선은 평평하게 들어와서 구간 안에서 가파르게 오르고 다시 평평하게 나간다. PCHIP의 범위는 정확히 [0,3.2][0, 3.2]이다.
  3. 같은 데이터의 자연 3차 스플라인은 x≈1.58x \approx 1.58에서 −0.135-0.135로 내려가고 x≈3.42x \approx 3.42에서 3.3353.335로 넘친다. 데이터 범위를 벗어나는 오버슈트이고, 단조성도 깨진다.

대가도 있습니다. PCHIP는 C1C^1일 뿐 곡률이 이음매에서 끊기고, 매끄러운 함수에 대한 정확도는 3차 스플라인보다 낮습니다(4절의 표에서 O(h3)O(h^3) 근처). 모양을 지키는 것이 중요하면 PCHIP, 매끄러운 함수의 정확도가 중요하면 스플라인입니다.

SIMULATOR

PCHIP는 넘치지 않는다: 스플라인과의 비교

점을 위아래로 끌기
자연 스플라인PCHIP데이터 범위
데이터 범위—
스플라인 범위—
PCHIP 범위—
단조성을 깬 구간 (스플라인 / PCHIP)—
해볼 것: ① '계단'에서 스플라인(빨강)이 계단 앞에서 아래로, 뒤에서 위로 넘치는 것을 보세요. PCHIP(초록)는 데이터 범위(점선) 안에 머뭅니다. ② '날카로운 봉우리'에서 PCHIP는 봉우리 점에서 기울기를 0으로 두어 봉우리를 넘지 않습니다. 스플라인은 봉우리를 지나쳐 더 높이 솟습니다. ③ 점을 끌어 단조성을 깨는 데이터를 만들면, 그 구간에서는 PCHIP도 데이터를 따라 방향을 바꿀 뿐 추가 진동을 만들지 않습니다. 모델: 기울기는 정의 6.2(조화 평균, 끝점 세 점 공식).

3차 스플라인의 유도: 삼중대각계

곡률까지 이어 붙이려면 기울기를 어떻게 골라야 하나

PCHIP는 기울기를 각 노드에서 따로 정했습니다. 이음매에서 이차 도함수(곡률)까지 연속이 되도록 기울기를 함께 정하면 나무 자 스플라인처럼 매끄러운 곡선이 됩니다. 이 조건은 모든 구간을 한꺼번에 엮는 연립방정식이 됩니다.

정의 6.4 (3차 스플라인) 노드 x0<⋯<xnx_0 \lt \dots \lt x_n에서 함수 ss가 (1) 각 구간 [xi,xi+1][x_i, x_{i+1}]에서 3차 다항식이고, (2) s(xi)=yis(x_i) = y_i이며, (3) s,s′,s′′s, s', s''이 [x0,xn][x_0, x_n]에서 연속이면 ss를 3차 스플라인(cubic spline)이라 한다.

미지수를 셉시다. 구간 nn개에 3차식 하나당 계수 4개, 모두 4n4n개입니다. 조건은 보간 2n2n개(각 구간의 양 끝), 내부 노드 n−1n - 1개에서 s′s', s′′s'' 연속 2(n−1)2(n - 1)개, 합 4n−24n - 2개. 두 개가 모자랍니다. 이 두 자유도를 정하는 것이 4절의 경계 조건입니다.

미지수를 노드의 이차 도함수 Mi=s′′(xi)M_i = s''(x_i)(모멘트(moment), 보의 굽힘 모멘트에서 온 이름)로 잡으면 계산이 깔끔해집니다. s′′s''은 각 구간에서 1차식이므로 MiM_i와 Mi+1M_{i+1}을 잇는 직선이고, 두 번 적분해 보간 조건을 넣으면

s(x)=Mi(xi+1−x)36hi+Mi+1(x−xi)36hi+(yi−Mihi26)xi+1−xhi+(yi+1−Mi+1hi26)x−xihi.s(x) = M_i\frac{(x_{i+1} - x)^3}{6h_i} + M_{i+1}\frac{(x - x_i)^3}{6h_i} + \Bigl(y_i - \frac{M_ih_i^2}{6}\Bigr)\frac{x_{i+1} - x}{h_i} + \Bigl(y_{i+1} - \frac{M_{i+1}h_i^2}{6}\Bigr)\frac{x - x_i}{h_i}.
이 꼴은 ss의 보간과 s′′s''의 연속을 저절로 만족한다. 남은 조건은 s′s'의 연속뿐이다.

이 식을 미분해 xix_i에서 왼쪽 구간과 오른쪽 구간의 s′s'을 같게 놓으면 내부 노드마다 방정식 하나가 나옵니다.

정리 6.5 (모멘트 방정식) δi=(yi+1−yi)/hi\delta_i = (y_{i+1} - y_i)/h_i라 하면 i=1,…,n−1i = 1, \dots, n-1에 대해
hi−1Mi−1+2(hi−1+hi)Mi+hiMi+1=6(δi−δi−1).h_{i-1}M_{i-1} + 2(h_{i-1} + h_i)M_i + h_iM_{i+1} = 6(\delta_i - \delta_{i-1}).
경계 조건 두 개를 더하면 계수 행렬은 삼중대각이고 각 행에서 대각 원소 2(hi−1+hi)2(h_{i-1} + h_i)가 비대각 원소의 합 hi−1+hih_{i-1} + h_i의 두 배라 엄격한 대각 우세다. 따라서 해는 유일하고, 피벗팅 없는 가우스 소거가 안정적이다.

삼중대각계는 O(n)O(n)에 풀립니다. 소거할 원소가 행마다 하나뿐이기 때문입니다. 이 방법을 토머스 알고리즘(Thomas algorithm)이라 부르고, 12장 직접 해법에서 띠 행렬의 일반 이론으로 다시 다룹니다.

// 토머스 알고리즘: a[i] M[i−1] + b[i] M[i] + c[i] M[i+1] = d[i],  i = 1..m
c′[1] ← c[1] / b[1];   d′[1] ← d[1] / b[1]
for i = 2 to m                          // 전진 소거: a[i]를 지운다
  w ← b[i] − a[i] · c′[i−1]
  c′[i] ← c[i] / w
  d′[i] ← (d[i] − a[i] · d′[i−1]) / w
M[m] ← d′[m]
for i = m−1 downto 1                    // 후진 대입
  M[i] ← d′[i] − c′[i] · M[i+1]

연산 약 8m8m번. 일반 가우스 소거의 m3/3m^3/3과 비교하면 점 1000개에서 수만 배 빠르다.

예제 6.3 (자연 스플라인 손계산) (0,0)(0, 0), (1,1)(1, 1), (2,0)(2, 0), (3,1)(3, 1)을 지나는 자연 스플라인(M0=M3=0M_0 = M_3 = 0)을 구하라.
  1. hi=1h_i = 1, δ=1,−1,1\delta = 1, -1, 1. 방정식: i=1i = 1: 4M1+M2=6(−1−1)=−124M_1 + M_2 = 6(-1 - 1) = -12. i=2i = 2: M1+4M2=6(1+1)=12M_1 + 4M_2 = 6(1 + 1) = 12.
  2. 토머스: c1′=1/4c'_1 = 1/4, d1′=−3d'_1 = -3. w=4−1⋅14=3.75w = 4 - 1\cdot\tfrac14 = 3.75, d2′=(12+3)/3.75=4d'_2 = (12 + 3)/3.75 = 4. 후진: M2=4M_2 = 4, M1=−3−14⋅4=−4M_1 = -3 - \tfrac14\cdot 4 = -4.
  3. [0,1][0, 1]에서 s(x)=−4x36+(1+46)xs(x) = -4\frac{x^3}{6} + \bigl(1 + \tfrac46\bigr)x, s(0.5)=−0.0833+0.8333=0.75s(0.5) = -0.0833 + 0.8333 = 0.75. 같은 방법으로 s(1.5)=0.5s(1.5) = 0.5, s(2.5)=0.25s(2.5) = 0.25.
  4. 네 점을 지나는 3차 다항식 p(x)=x−x(x−1)+23x(x−1)(x−2)p(x) = x - x(x-1) + \tfrac23x(x-1)(x-2)은 p(0.5)=1p(0.5) = 1, p(1.5)=0.5p(1.5) = 0.5, p(2.5)=0p(2.5) = 0이다. 스플라인이 데이터의 지그재그를 더 얌전하게 따른다.
SIMULATOR

삼중대각계를 토머스 알고리즘으로 한 줄씩 풀기

점을 위아래로 끌기
해볼 것: ① '다음 단계'로 전진 소거를 한 행씩 진행하세요. 각 행은 바로 위 행의 c′, d′만 씁니다. 후진 대입에서는 아래에서 위로 M이 하나씩 정해집니다. 모든 M이 정해지면 스플라인이 그려집니다. ② 표의 w(소거 후 대각)가 언제나 b보다 조금 작을 뿐 0 근처로 가지 않는 것을 보세요. 대각 우세 덕분에 피벗팅이 필요 없습니다. ③ '곡률' 막대를 켜고 점 하나를 끌면, M이 그 점 근처에서 크게 변하고 멀어질수록 부호를 바꾸며 빠르게(대략 한 칸에 −0.27배) 줄어듭니다. 모델: 자연 경계 M₀ = Mₙ = 0, 미지수는 M₁ … Mₙ₋₁, 등간격 h = 1.

경계 조건: 자연·고정·not-a-knot

모자란 두 조건을 어떻게 채울까

미지수 4n4n개에 조건 4n−24n - 2개였습니다. 양 끝에서 하나씩 조건을 더해야 하는데, 선택에 따라 끝 근처의 곡선 모양과 정확도의 차수가 달라집니다. 라이브러리의 기본값도 제각각입니다.

정의 6.6 (경계 조건)
  • 자연(natural): M0=Mn=0M_0 = M_n = 0. 끝에서 자가 곧게 풀려 있는 상태. 방정식 첫 행과 끝 행이 M0=0M_0 = 0, Mn=0M_n = 0.
  • 고정(clamped, complete): s′(x0)=f′(a)s'(x_0) = f'(a), s′(xn)=f′(b)s'(x_n) = f'(b)를 지정. 첫 행 2h0M0+h0M1=6(δ0−f′(a))2h_0M_0 + h_0M_1 = 6(\delta_0 - f'(a)), 끝 행 hn−1Mn−1+2hn−1Mn=6(f′(b)−δn−1)h_{n-1}M_{n-1} + 2h_{n-1}M_n = 6(f'(b) - \delta_{n-1}).
  • not-a-knot: 첫 두 구간과 마지막 두 구간이 같은 3차식이 되도록 s′′′s'''을 x1x_1과 xn−1x_{n-1}에서 연속으로. x1,xn−1x_1, x_{n-1}이 사실상 이음매(knot)가 아니게 된다. 노드가 4개면 결과는 3차 보간 다항식 자체다. MATLAB spline과 SciPy CubicSpline의 기본값이다.
  • 주기(periodic): s′s', s′′s''이 x0x_0과 xnx_n에서 같도록. 닫힌 곡선이나 주기 신호에 쓴다(행렬 모서리에 원소가 생기는 순환 삼중대각계).
정리 6.7 (스플라인의 수렴 차수) f∈C4[a,b]f \in C^4[a, b]이고 노드가 등간격(또는 간격 비가 유계)이면, 고정 스플라인은
max⁡∣f−s∣≤5384h4max⁡∣f(4)∣\max|f - s| \le \frac{5}{384}h^4\max|f^{(4)}| 를 만족하고, not-a-knot 스플라인도 O(h4)O(h^4)이다. 자연 스플라인은 f′′(a)=f′′(b)=0f''(a) = f''(b) = 0이 아니면 끝 근처에서 M0=0M_0 = 0이라는 틀린 정보 때문에 오차가 O(h2)O(h^2)로 떨어진다(내부에서는 그 영향이 지수적으로 줄어든다).

f=exf = e^x, [0,2][0, 2]에서 실제로 잰 최대 오차입니다(nn = 구간 수). 자연 스플라인은 exe^x의 끝 곡률 f′′(2)=e2≠0f''(2) = e^2 \ne 0을 0으로 강제하므로 끝에서 틀립니다.

방법n=8n = 8n=16n = 16n=32n = 32n=64n = 64비율(32→64)차수
조각별 선형5.10×10⁻²1.36×10⁻²3.50×10⁻³8.88×10⁻⁴3.92
PCHIP4.19×10⁻³5.75×10⁻⁴7.53×10⁻⁵9.64×10⁻⁶7.8≈ 3
자연 스플라인2.25×10⁻²5.66×10⁻³1.42×10⁻³3.54×10⁻⁴4.02
not-a-knot6.31×10⁻⁴4.48×10⁻⁵2.99×10⁻⁶1.93×10⁻⁷15.54
고정 스플라인7.16×10⁻⁵4.59×10⁻⁶2.91×10⁻⁷1.83×10⁻⁸15.94

고정 스플라인의 n=16n = 16 오차 4.59×10−64.59\times10^{-6}은 한계 5384(0.125)4e2=2.35×10−5\frac{5}{384}(0.125)^4e^2 = 2.35\times10^{-5} 안에 있습니다. 모든 방법에서 최대 오차는 x≈1.9x \approx 1.9 이상, 곧 ∣f∣|f|와 ∣f′′∣|f''|가 큰 오른쪽 끝 근처에서 생깁니다. 도함수를 알면 고정 조건이 가장 정확하고, 모르면 not-a-knot이 거의 같은 차수를 줍니다. 자연 조건은 끝에서 곡선이 직선처럼 풀려야 하는 경우(실제 나무 자, 외삽이 직선이어야 하는 경우)에 씁니다.

SIMULATOR

경계 조건 비교: 끝에서 생기는 오차

f 와 스플라인
|f − s| (로그)
위 그림의 경계 조건
자연고정not-a-knot
자연 max |f − s|—
고정—
not-a-knot—
자연: 끝 M₀, Mₙ vs 참 f″—
해볼 것: ① eˣ에서 아래 그림의 자연 스플라인 오차(빨강)가 오른쪽 끝에서 다른 둘보다 한두 자릿수 큰 것을 보세요. 끝 곡률을 0으로 강제한 탓입니다. ② sin x, [0, π]로 바꾸면 끝 곡률이 정말 0이라 자연 조건이 고정 조건만큼 정확해집니다. ③ n을 두 배로 늘리면 자연은 약 4배, 고정·not-a-knot은 약 16배 줄어듭니다. 모델: 등간격 노드, 고정 조건은 참 도함수 f′(a), f′(b) 사용.

다음 시뮬레이터는 같은 실험을 n=4n = 4부터 256256까지 로그–로그 그래프로 모은 것입니다. 5장 오차 공식의 hph^{p} 기울기를 직선의 기울기로 읽을 수 있습니다.

SIMULATOR

오차–간격 로그–로그 그래프: 방법별 차수

조각별 선형PCHIP자연not-a-knot고정
선형 기울기—
PCHIP—
자연—
not-a-knot—
고정—
해볼 것: ① eˣ에서 기울기가 2, 3, 2, 4, 4 근처인 것을 확인하세요(작은 h 쪽 네 점으로 맞춘 값). ② 룽게 함수에서는 5장의 다항식 보간이 발산했지만 모든 조각별 방법이 수렴합니다. 처음 몇 점은 h가 특이점까지의 거리 0.2보다 커서 아직 점근 영역이 아닙니다. ③ |x − 0.3|³은 f‴이 x = 0.3에서 끊겨 f⁽⁴⁾가 없으므로, 스플라인도 4차를 다 내지 못합니다. 정리의 가정(f ∈ C⁴)이 왜 필요한지 보여 줍니다. 모델: n = 4, 8, …, 256 등간격 구간, 오차는 4000개 점의 최댓값.

최소 굽힘 에너지: 스플라인은 가장 덜 휜다

나무 자는 왜 그 모양이 되는가

얇은 탄성 막대의 굽힘 에너지는 곡률의 제곱을 길이에 대해 적분한 것에 비례하고, 기울기가 작으면 곡률은 y′′y''과 거의 같습니다. 못(데이터 점)에 걸린 자는 이 에너지를 최소로 하는 모양을 택합니다. 수학적으로 그 모양이 3차 스플라인일까요?

정리 6.8 (최소 굽힘 에너지, 홀러데이) ss를 데이터 (xi,yi)(x_i, y_i)의 자연 3차 스플라인이라 하자. 같은 점을 지나는 임의의 g∈C2[a,b]g \in C^2[a, b]에 대해
∫abs′′(x)2 dx≤∫abg′′(x)2 dx\int_a^b s''(x)^2\,dx \le \int_a^b g''(x)^2\,dx 이고, 등호는 g=sg = s일 때만 성립한다. 고정 스플라인은 끝 기울기가 같은 gg들 가운데 같은 성질을 가진다.

증명. e=g−se = g - s라 하면 e(xi)=0e(x_i) = 0이고 ∫g′′2=∫s′′2+2∫s′′e′′+∫e′′2\int g''^2 = \int s''^2 + 2\int s''e'' + \int e''^2. 가운데 항이 0임을 보이면 된다. 부분적분하면 ∫abs′′e′′=[s′′e′]ab−∫abs′′′e′\int_a^b s''e'' = [s''e']_a^b - \int_a^b s'''e'. 자연 조건 s′′(a)=s′′(b)=0s''(a) = s''(b) = 0으로 첫 항이 사라진다. 각 구간에서 s′′′s'''은 상수 cic_i이므로 ∫s′′′e′=∑ici(e(xi+1)−e(xi))=0\int s'''e' = \sum_i c_i\bigl(e(x_{i+1}) - e(x_i)\bigr) = 0. 그러므로 ∫g′′2=∫s′′2+∫e′′2≥∫s′′2\int g''^2 = \int s''^2 + \int e''^2 \ge \int s''^2이고, 등호는 e′′≡0e'' \equiv 0, 곧 ee가 일차식이면서 노드에서 0일 때, 즉 e≡0e \equiv 0일 때뿐이다. ∎

예제 6.3의 데이터로 확인해 봅시다. 자연 스플라인의 s′′s''은 각 구간에서 MiM_i와 Mi+1M_{i+1}을 잇는 직선이므로 한 구간의 적분은 h(Mi2+MiMi+1+Mi+12)/3h(M_i^2 + M_iM_{i+1} + M_{i+1}^2)/3입니다. M=(0,−4,4,0)M = (0, -4, 4, 0)이면 163+163+163=16\tfrac{16}{3} + \tfrac{16}{3} + \tfrac{16}{3} = 16. 같은 네 점을 지나는 3차 다항식은 p′′=4x−6p'' = 4x - 6이라 ∫03(4x−6)2dx=36\int_0^3(4x - 6)^2dx = 36. 스플라인이 절반 이하로 덜 휩니다. 1절 시뮬레이터의 두 에너지 값이 바로 이것입니다.

이 정리의 뜻 스플라인은 "우연히 매끄러운" 곡선이 아니라 변분 문제의 해다. 이 관점은 7장의 평활 스플라인(데이터와의 거리 + λ·굽힘 에너지 최소화)과 16장 유한 요소법의 약형식(에너지 최소화 → 연립방정식)으로 이어진다. 실제 탄성 막대의 에너지는 ∫κ2 ds\int\kappa^2\,ds이고 y′′y''과 다르므로, 기울기가 클 때는 물리적인 자와 스플라인이 조금 다르다.

매개변수 곡선, 베지에 곡선과 드 카스텔조 알고리즘

글자 'S'는 함수의 그래프가 아니다

지금까지의 보간은 y=f(x)y = f(x) 꼴이었습니다. 하지만 글자 윤곽, 자동차 측면 선, 카메라 경로는 되돌아오고 수직으로 서고 고리를 만듭니다. 이런 모양은 xx와 yy를 모두 매개변수 tt의 함수로 쓰는 매개변수 곡선 B(t)=(x(t),y(t))\mathbf B(t) = (x(t), y(t))로만 그릴 수 있습니다. 또 디자이너는 곡선이 지날 점보다 모양을 당기는 손잡이를 원합니다.

정의 6.9 (베지에 곡선) 제어점(control point) P0,…,Pn\mathbf P_0, \dots, \mathbf P_n에 대해
B(t)=∑k=0n(nk)tk(1−t)n−k Pk,0≤t≤1\mathbf B(t) = \sum_{k=0}^{n}\binom{n}{k}t^k(1 - t)^{n-k}\,\mathbf P_k, \qquad 0 \le t \le 1
를 nn차 베지에 곡선(Bézier curve)이라 한다. 가중치 bk,n(t)=(nk)tk(1−t)n−kb_{k,n}(t) = \binom nk t^k(1-t)^{n-k}는 번스타인 다항식이다. 모두 0 이상이고 합이 (t+1−t)n=1(t + 1 - t)^n = 1이다.

여기서 바로 성질 세 가지가 나옵니다. (1) 끝점 보간: B(0)=P0\mathbf B(0) = \mathbf P_0, B(1)=Pn\mathbf B(1) = \mathbf P_n. 가운데 제어점은 지나지 않고 당기기만 합니다. (2) 끝 접선: B′(0)=n(P1−P0)\mathbf B'(0) = n(\mathbf P_1 - \mathbf P_0), B′(1)=n(Pn−Pn−1).\mathbf B'(1) = n(\mathbf P_n - \mathbf P_{n-1}). 그래서 그림 프로그램의 "손잡이"가 곧 P1\mathbf P_1, P2\mathbf P_2입니다. (3) 볼록 껍질: 가중치가 음이 아니고 합이 1이므로 곡선은 제어점의 볼록 껍질 안에 있습니다. 충돌 검사나 화면 잘라내기에서 곡선 대신 제어 다각형을 검사할 수 있습니다.

계산은 번스타인 다항식을 직접 쓰지 않고 선분의 내분을 되풀이합니다.

정리 6.10 (드 카스텔조 알고리즘) Pk(0)=Pk\mathbf P_k^{(0)} = \mathbf P_k라 하고 r=1,…,nr = 1, \dots, n에 대해
Pk(r)=(1−t) Pk(r−1)+t Pk+1(r−1),k=0,…,n−r\mathbf P_k^{(r)} = (1 - t)\,\mathbf P_k^{(r-1)} + t\,\mathbf P_{k+1}^{(r-1)}, \qquad k = 0, \dots, n - r 로 두면 P0(n)=B(t)\mathbf P_0^{(n)} = \mathbf B(t)이다. 또 이때 P0(0),P0(1),…,P0(n)\mathbf P_0^{(0)}, \mathbf P_0^{(1)}, \dots, \mathbf P_0^{(n)}과 P0(n),P1(n−1),…,Pn(0)\mathbf P_0^{(n)}, \mathbf P_1^{(n-1)}, \dots, \mathbf P_n^{(0)}은 각각 [0,t][0, t]와 [t,1][t, 1] 부분의 베지에 제어점이다(분할).

증명의 핵심. 귀납법. Pk(r)\mathbf P_k^{(r)}이 Pk,…,Pk+r\mathbf P_k, \dots, \mathbf P_{k+r}의 rr차 베지에 곡선이라 가정하면, 파스칼 항등식 bj,r(t)=(1−t)bj,r−1(t)+t bj−1,r−1(t)b_{j,r}(t) = (1-t)b_{j,r-1}(t) + t\,b_{j-1,r-1}(t)이 점화식과 정확히 같은 꼴이다. ∎

// 드 카스텔조: 제어점 P[0..n], 매개변수 t  (O(n²), 덧셈과 내분만)
Q ← P                                   // 복사
for r = 1 to n
  for k = 0 to n − r
    Q[k] ← (1 − t) · Q[k] + t · Q[k+1]
return Q[0]

볼록 결합만 쓰므로 반올림 오차에 강하다. 계수 (nk)\binom nk를 만들 필요도 없다.

예제 6.4 (3차 베지에 한 점) P0=(0,0)\mathbf P_0 = (0, 0), P1=(1,2)\mathbf P_1 = (1, 2), P2=(3,2)\mathbf P_2 = (3, 2), P3=(4,0)\mathbf P_3 = (4, 0)에서 B(0.5)\mathbf B(0.5)와 B(0.25)\mathbf B(0.25)를 구하라.
  1. t=0.5t = 0.5, 1단계(중점): (0.5,1)(0.5, 1), (2,2)(2, 2), (3.5,1)(3.5, 1). 2단계: (1.25,1.5)(1.25, 1.5), (2.75,1.5)(2.75, 1.5). 3단계: B(0.5)=(2,1.5)\mathbf B(0.5) = (2, 1.5).
  2. 번스타인으로 확인: (P0+3P1+3P2+P3)/8=((0+3+9+4)/8, (0+6+6+0)/8)=(2,1.5)(\mathbf P_0 + 3\mathbf P_1 + 3\mathbf P_2 + \mathbf P_3)/8 = ((0 + 3 + 9 + 4)/8,\ (0 + 6 + 6 + 0)/8) = (2, 1.5).
  3. t=0.25t = 0.25: 1단계 (0.25,0.5)(0.25, 0.5), (1.5,2)(1.5, 2), (3.25,1.5)(3.25, 1.5). 2단계 (0.5625,0.875)(0.5625, 0.875), (1.9375,1.875)(1.9375, 1.875). 3단계 B(0.25)=(0.90625,1.125)\mathbf B(0.25) = (0.90625, 1.125).
  4. 끝 접선: B′(0)=3(P1−P0)=(3,6)\mathbf B'(0) = 3(\mathbf P_1 - \mathbf P_0) = (3, 6). 곡선은 손잡이 P1\mathbf P_1 쪽으로 출발한다.
SIMULATOR

드 카스텔조 알고리즘 단계별로 보기

제어점을 끌기
차수 n
B(t)—
번스타인 가중치 bₖ,ₙ(t)—
접선 B′(t)—
해볼 것: ① 단계 r을 0 → n으로 올리며 선분마다 같은 비율 t로 내분한 점이 하나씩 줄어 마지막 한 점 B(t)가 되는 것을 보세요. ② 마지막 단계의 선분(가장 짧은 선분)은 곡선의 접선입니다. B′(t) = n·(그 선분의 벡터). ③ '둘로 나눈 제어 다각형'을 켜면 중간 단계의 맨 왼쪽·맨 오른쪽 점들이 두 반쪽 곡선의 제어점이 됩니다. 이 분할을 되풀이하면 제어 다각형이 곡선으로 빠르게 수렴하며, 화면에 곡선을 그릴 때 쓰입니다. 모델: 좌표는 화면 단위, 가중치는 k = 0 … n 순서.

한 개의 고차 베지에 곡선은 5장의 고차 다항식과 같은 약점을 가집니다. 제어점 하나가 곡선 전체를 움직이고, 복잡한 모양에는 차수가 너무 높아집니다. 그래서 실제로는 3차 베지에 조각을 이어 붙입니다(글꼴, SVG의 C 명령). 이음매의 매끄러움은 손잡이의 배치로 정해집니다.

  • C0C^0: 앞 조각의 P3\mathbf P_3과 뒤 조각의 Q0\mathbf Q_0이 같다(이어지기만 한다, 모서리 가능).
  • G1G^1(기하적 연속): 이음점 양쪽의 손잡이가 한 직선 위에 반대 방향으로 놓인다. 접선의 방향이 같다.
  • C1C^1: 게다가 길이도 같다, P3−P2=Q1−Q0\mathbf P_3 - \mathbf P_2 = \mathbf Q_1 - \mathbf Q_0. 매개변수 속도까지 연속이라 애니메이션 경로에서 속도가 튀지 않는다.

G1G^1과 C1C^1이어도 곡률은 이음매에서 끊길 수 있습니다. 자동차 디자인에서는 반사광의 띠가 이음매에서 꺾이는 것으로 곡률 불연속이 눈에 보이므로 G2G^2(곡률 연속)를 요구합니다. 아래 시뮬레이터의 곡률 빗(curvature comb)은 곡선의 법선 방향으로 곡률에 비례하는 길이의 선을 그려 이것을 보여 줍니다. CAD 프로그램에도 같은 도구가 있습니다.

SIMULATOR

베지에 경로 편집기: 이음매의 연속성

검은 점 = 지나는 점 · 보라 점 = 손잡이
손잡이 규칙
이음매 접선 각 차이 (최대)—
손잡이 길이 비 (최대)—
이음매 곡률 점프 (최대)—
해볼 것: ① '자유'에서 손잡이 하나를 끌어 모서리를 만들어 보세요. 접선 각 차이가 0이 아닙니다(C⁰만). ② '정렬'로 바꾸고 손잡이를 끌면 반대쪽 손잡이가 같은 직선 위로 따라 돌지만 길이는 그대로입니다. 곡선은 매끄러워 보여도 곡률 빗의 길이가 이음매에서 뚝 끊깁니다. ③ '대칭'에서도 곡률 점프가 남는 경우가 많습니다. C¹은 곡률 연속(G²)을 보장하지 않습니다. 모델: 3차 베지에 조각 4개로 만든 닫힌 경로, 곡률 κ = (x′y″ − y′x″)/|B′|³.

B-스플라인과 국소 제어

손잡이 규칙을 일일이 지키지 않고 매끄러운 곡선을

베지에 조각을 C2C^2로 이으려면 이음매마다 손잡이 위치에 제약이 붙고, 디자이너가 점 하나를 옮길 때마다 이웃 손잡이를 다시 맞춰야 합니다. 반대로 3절의 보간 스플라인은 C2C^2이지만 한 점을 옮기면 (빠르게 줄긴 해도) 전체가 움직입니다. 매끄러움이 저절로 보장되면서 제어점 하나가 근처만 움직이는 곡선이 있을까요?

답은 기저 함수 자체를 조각별 다항식으로 만들고, 그 기저가 짧은 구간에서만 0이 아니게 하는 것입니다. 매듭(knot) 열 t0≤t1≤…t_0 \le t_1 \le \dots에서 다음 점화식으로 기저를 정의합니다.

정의 6.11 (B-스플라인 기저, 콕스–드 부어 점화식)
Nj,0(t)={1,tj≤t<tj+10,그 밖,Nj,p(t)=t−tjtj+p−tjNj,p−1(t)+tj+p+1−ttj+p+1−tj+1Nj+1,p−1(t).N_{j,0}(t) = \begin{cases}1, & t_j \le t \lt t_{j+1}\\ 0, & \text{그 밖}\end{cases}, \qquad N_{j,p}(t) = \frac{t - t_j}{t_{j+p} - t_j}N_{j,p-1}(t) + \frac{t_{j+p+1} - t}{t_{j+p+1} - t_{j+1}}N_{j+1,p-1}(t).
분모가 0이면 그 항을 0으로 둔다. pp차 B-스플라인(B-spline) 곡선은 C(t)=∑jNj,p(t) Pj\mathbf C(t) = \sum_j N_{j,p}(t)\,\mathbf P_j이다. 이 장에서는 p=3p = 3(3차)을 쓴다.
정리 6.12 (B-스플라인 기저의 성질) (가) 국소 받침: Nj,pN_{j,p}는 [tj,tj+p+1)[t_j, t_{j+p+1}) 밖에서 0이다. 따라서 3차에서 제어점 Pj\mathbf P_j는 매듭 구간 4개에만 영향을 준다. (나) 단위 분할: 유효 구간에서 Nj,p≥0N_{j,p} \ge 0, ∑jNj,p=1\sum_j N_{j,p} = 1이므로 곡선은 볼록 껍질 안에 있다. (다) 매끄러움: 매듭이 겹치지 않으면 Nj,pN_{j,p}는 Cp−1C^{p-1}이다. 3차면 제어점을 어디에 두어도 곡선은 저절로 C2C^2다.

핵심 아이디어. (가)와 (나)는 pp에 대한 귀납법으로, 점화식의 두 가중치가 0 이상이고 이웃 항끼리 합이 1이 되는 데서 나온다. (다)는 Nj,pN_{j,p}가 상자 함수를 pp번 "번지게" 한(등간격이면 상자 함수의 p+1p+1중 합성곱) 함수라서 한 번 번질 때마다 매끄러움이 하나씩 오르는 데서 나온다. ∎

등간격 매듭(tj=jt_j = j)의 3차 B-스플라인 한 조각은 행렬로 간단히 쓸 수 있습니다. u∈[0,1]u \in [0, 1]에서

C(u)=16[(1−u)3P0+(3u3−6u2+4)P1+(−3u3+3u2+3u+1)P2+u3P3].\mathbf C(u) = \frac16\Bigl[(1-u)^3\mathbf P_0 + (3u^3 - 6u^2 + 4)\mathbf P_1 + (-3u^3 + 3u^2 + 3u + 1)\mathbf P_2 + u^3\mathbf P_3\Bigr].
조각의 시작점은 (P0+4P1+P2)/6(\mathbf P_0 + 4\mathbf P_1 + \mathbf P_2)/6로, 제어점을 지나지 않고 그 근처를 지난다. 끝점을 지나게 하려면 매듭 열의 양 끝을 네 번 겹친다(clamped). 이때 첫 조각과 끝 조각은 베지에 곡선과 같아진다.

B-스플라인에 가중치를 붙여 유리 함수로 만든 것이 NURBS(Non-Uniform Rational B-Spline)로, 원과 원뿔 곡선을 정확히 표현할 수 있어 CAD 데이터 교환의 표준 표현이 되었습니다. 3절의 보간 스플라인도 B-스플라인 기저로 쓸 수 있습니다. 보간 조건 C(xi)=yi\mathbf C(x_i) = y_i가 제어점에 대한 띠 행렬 계가 되고, 이것이 라이브러리들의 내부 구현 방식 중 하나입니다.

SIMULATOR

B-스플라인 국소 제어 vs 베지에 전역 제어

제어점을 끌기
기저 함수 Nⱼ,₃(t)
B-스플라인영향받는 구간베지에끌기 전
마지막에 끈 점—
영향받는 매듭 구간—
B-스플라인 이동 / 베지에 이동 (먼 끝)—
해볼 것: ① 가운데 제어점 하나를 끌어 보세요. 노란 구간(매듭 구간 4개)만 움직이고 나머지 B-스플라인은 끌기 전 곡선(회색)과 정확히 겹칩니다. ② 베지에를 켜고 같은 점을 끌면 베지에 곡선은 끝점을 뺀 모든 곳이 움직입니다. ③ 아래 기저 그림에서 끈 점의 기저 Nⱼ(굵은 선)가 0이 아닌 구간이 바로 노란 구간입니다. '끝점 고정'을 끄면 곡선이 끝 제어점에 닿지 않습니다. 모델: 3차, 제어점 8개, 내부 매듭 등간격.

이 도구가 쓰이는 곳

"구간마다 낮은 차수 + 이음매 조건"은 데이터 처리와 기하 설계 모두의 기본 문법입니다.

분야쓰는 곡선왜
글꼴·벡터 그래픽2차(TrueType)·3차(PostScript/CFF, SVG) 베지에확대해도 매끄럽고, 드 카스텔조 분할로 빠르게 그린다
CAD·자동차·항공기 외형NURBS(유리 B-스플라인)국소 제어, 원뿔 곡선의 정확한 표현, 곡률 연속 검사
애니메이션·UICSS cubic-bezier() 감속 곡선, 키프레임 에르미트시작·끝 기울기(속도)를 직접 지정
카메라·로봇 궤적3차 스플라인, 캣멀–롬(에르미트 변형)위치·속도·가속도가 연속이라 흔들림과 충격이 없다
측정 데이터·보정표PCHIP, 3차 스플라인단조성 보존(PCHIP), 매끄러운 미분(스플라인)
수치 해법의 부품스플라인 보간·조밀 출력ODE 해법의 걸음 사이 값, 표로 주어진 계수 함수

핵심 정리

  1. 고차 다항식 대신 구간마다 낮은 차수를 쓰면 차수는 고정, 간격 hh만 줄이므로 룽게 현상이 없다. 조각별 선형은 h28max⁡∣f′′∣\frac{h^2}{8}\max|f''|.
  2. 조각별 3차 에르미트는 값과 기울기를 이웃과 공유해 C1C^1이다. PCHIP는 기울기를 조화 평균(극값에서는 0)으로 골라 오버슈트 없이 단조성을 지킨다.
  3. 3차 스플라인은 C2C^2 조각별 3차식이다. 모멘트 Mi=s′′(xi)M_i = s''(x_i)에 대한 방정식 hi−1Mi−1+2(hi−1+hi)Mi+hiMi+1=6(δi−δi−1)h_{i-1}M_{i-1} + 2(h_{i-1} + h_i)M_i + h_iM_{i+1} = 6(\delta_i - \delta_{i-1})은 대각 우세 삼중대각계로, 토머스 알고리즘으로 O(n)O(n)에 풀린다.
  4. 미지수 4n4n개에 조건 4n−24n - 2개, 모자란 둘이 경계 조건이다. 고정·not-a-knot은 O(h4)O(h^4), 자연 조건은 끝 곡률이 0이 아니면 O(h2)O(h^2).
  5. 자연 스플라인은 같은 점을 지나는 모든 C2C^2 함수 가운데 ∫g′′2\int g''^2이 가장 작다(부분적분 한 번의 증명).
  6. 베지에 곡선은 번스타인 가중치의 볼록 결합이다. 끝점을 지나고 끝 접선이 n(P1−P0)n(\mathbf P_1 - \mathbf P_0)이며, 드 카스텔조의 내분 반복으로 안정적으로 계산하고 분할한다.
  7. 조각 베지에의 이음매는 손잡이 배치로 C0C^0, G1G^1, C1C^1이 정해지며, C1C^1도 곡률 연속을 보장하지 않는다.
  8. B-스플라인 기저는 콕스–드 부어 점화식으로 만들고, 받침이 매듭 구간 p+1p+1개라 국소 제어를 주며 3차면 저절로 C2C^2이다.

확인 퀴즈

Q1. 조각별 선형 보간의 간격을 hh에서 h/3h/3으로 줄이면 오차 한계는 몇 배가 되는가?

한계 (h²/8)·max|f″|이 h²에 비례하므로 (1/3)² = 1/9. 1/81은 고정 3차 스플라인(h⁴)의 경우다.

Q2. 노드 n+1n+1개(구간 nn개)의 3차 스플라인에서 보간과 연속 조건만으로는 몇 개의 조건이 모자라는가?

미지수 4n개, 조건은 보간 2n + 내부 노드의 s′·s″ 연속 2(n − 1) = 4n − 2개. 모자란 2개를 양 끝의 경계 조건으로 채운다.

Q3. 등간격 h=1h = 1인 네 점 (0,0)(0,0), (1,1)(1,1), (2,0)(2,0), (3,1)(3,1)의 자연 스플라인에서 M1M_1은?

4M₁ + M₂ = −12, M₁ + 4M₂ = 12를 풀면 M₁ = −4, M₂ = 4. 토머스 알고리즘의 d′₁ = −3은 중간값일 뿐이다.

Q4. 스플라인 모멘트 방정식을 피벗팅 없이 풀어도 안정적인 이유는?

2(hᵢ₋₁ + hᵢ) > hᵢ₋₁ + hᵢ. 엄격한 대각 우세 행렬은 가역이고 소거 중 피벗이 작아지지 않는다. 대칭(등간격 등)이지만 대칭만으로는 충분하지 않다.

Q5. 데이터 y=0,0.1,0.2,3,3.1,3.2y = 0, 0.1, 0.2, 3, 3.1, 3.2를 보간할 때 결과가 데이터 범위 [0,3.2][0, 3.2]를 벗어나지 않는 방법은?

PCHIP는 조화 평균 기울기로 단조 구간에서 단조성을 지켜 범위가 정확히 [0, 3.2]다. 자연 스플라인은 −0.135까지 내려가고 3.335까지 올라간다.

Q6. 자연 스플라인이 같은 점을 지나는 C2C^2 함수 가운데 최소로 만드는 양은?

정리 6.8(홀러데이). ∫g′²를 최소로 하는 것은 조각별 선형 보간이다. 길이를 최소로 하는 것도 꺾은선이다.

Q7. 제어점 (0,0),(1,2),(3,2),(4,0)(0,0), (1,2), (3,2), (4,0)인 3차 베지에 곡선의 B(0.5)\mathbf B(0.5)는?

(P₀ + 3P₁ + 3P₂ + P₃)/8 = (16/8, 12/8) = (2, 1.5). 드 카스텔조로 중점을 세 번 잡아도 같다. (1.25, 1.5)는 2단계의 중간점이다.

Q8. 3차 B-스플라인 곡선에서 제어점 하나를 옮기면 곡선의 어느 부분이 바뀌는가?

기저 Nⱼ,₃의 받침이 [tⱼ, tⱼ₊₄), 곧 매듭 구간 p + 1 = 4개다. 제어점이 같은 하나의 베지에 곡선이라면 끝점을 뺀 전체가 바뀐다.