측정값이나 표에 적힌 값은 띄엄띄엄 있지만, 우리는 그 사이의 값이 필요합니다. 점들을 지나는 다항식을 하나 정하면 그 사이를 계산할 수 있고, 미분하고 적분할 수도 있습니다. 이 장은 그 다항식이 언제나 하나뿐이라는 사실에서 출발해, 같은 다항식을 어떤 형식으로 계산해야 하는지(반데르몽드·라그랑주·뉴턴·무게중심), 그 다항식이 원래 함수와 얼마나 다른지(보간 오차 공식), 그리고 점을 늘렸는데 오히려 틀려지는 룽게 현상과 그 처방인 체비쇼프 노드까지 다룹니다. 수치적분(10장), 다단계 ODE 해법(11장), 할선법(3장)이 모두 이 장의 보간 다항식 위에 서 있습니다.
서로 다른 n+1개의 점을 지나는 n차 이하 다항식의 존재와 유일성을 증명하고, 반데르몽드 행렬로 계수를 구하는 방법이 왜 나쁜지 조건수로 설명한다.
라그랑주 기저와 뉴턴 형식(분할 차분표)으로 보간 다항식을 손으로 만들고, 점을 하나 더할 때의 비용을 비교한다.
보간 오차 공식 f(n+1)(ξ)/(n+1)!⋅∏(x−xi)를 롤의 정리로 유도하고 오차 한계를 계산한다.
등간격 노드에서 차수를 높이면 발산하는 룽게 현상을 관찰하고, 체비쇼프 노드가 노드 다항식의 최댓값을 최소로 만든다는 정리를 이해한다.
계산기가 없던 시대의 엔지니어와 천문학자는 로그표와 삼각함수표를 들고 다녔습니다. 표에는 x=2.71과 2.72의 값만 있는데 필요한 것은 log102.718입니다. 두 값을 잇는 직선(1차 보간)으로 읽으면 다섯 자리 표에서 소수 여섯째 자리까지 맞는다는 것을 이 장의 오차 공식이 보장합니다. 표 한 줄 한 줄이 보간을 전제로 만들어진 셈입니다.
오늘날에도 같은 생각이 쓰입니다. 미국 제트추진연구소(JPL)가 배포하는 행성 궤도력은 시간 구간마다 체비쇼프 다항식의 계수를 저장하고, 사용자는 그 다항식을 계산해 임의 시각의 행성 위치를 얻습니다. 몇 천 개의 계수로 수십 년치 궤도를 담을 수 있는 것은, 잘 고른 노드에서의 다항식 근사가 매끄러운 함수에 대해 지수적으로 빨리 수렴하기 때문입니다.
띄엄띄엄한 표·측정값→사이의 값이 필요→점을 지나는 다항식 p(x)→보간·미분·적분·궤도력
점을 지나는 다항식: 존재와 유일성
네 점을 지나는 3차 곡선은 몇 개인가
풍동 실험에서 받음각 0°, 4°, 8°, 12°의 양력 계수를 쟀습니다. 6°에서의 값을 추정하려고 네 점을 지나는 3차 다항식을 쓰기로 했습니다. 그런 다항식이 정말 있을까요? 있다면 하나뿐일까요? 사람마다 다른 다항식을 고르면 추정값이 달라질 테니, 이것부터 확인해야 합니다.
서로 다른 노드(node)x0,x1,…,xn과 값 y0,…,yn이 주어졌을 때 p(xi)=yi를 만족하는 다항식 p를 찾는 문제를 다항식 보간(polynomial interpolation)이라 합니다. 값이 어떤 함수 f에서 왔다면(yi=f(xi)) p를 f의 보간 다항식이라 부릅니다.
정리 5.1 (보간 다항식의 존재와 유일성) 노드 x0,…,xn이 모두 다르면, 임의의 값 y0,…,yn에 대해 p(xi)=yi(i=0,…,n)를 만족하는 차수 n 이하의 다항식 p가 정확히 하나 있다.
증명. 유일성: 두 다항식 p,q가 모두 조건을 만족하면 r=p−q는 차수 n 이하인데 n+1개의 서로 다른 근 x0,…,xn을 가진다. 0이 아닌 n차 이하 다항식의 근은 많아야 n개이므로 r≡0. 존재: 아래 정의 5.3의 라그랑주 형식이 실제로 그런 다항식을 하나 만들어 준다. (또는: 계수에 대한 (n+1)×(n+1) 선형계가 유일성 때문에 영공간이 {0}이므로 가역이다.) ∎
가장 직접적인 계산법은 p(x)=a0+a1x+⋯+anxn로 두고 조건 n+1개를 연립방정식으로 쓰는 것입니다.
V를 반데르몽드 행렬(Vandermonde matrix)이라 한다. detV=∏0≤i<j≤n(xj−xi)이므로 노드가 서로 다르면 가역이다.
이론으로는 이것으로 끝입니다. 문제는 계산입니다. x5와 x6은 [0,1]에서 그래프가 거의 겹칩니다. 기저 함수들이 서로 비슷하면 V의 열들이 거의 평행해지고, 2장에서 본 조건수가 폭발합니다. 아래 표는 실제로 계산한 2-노름 조건수 κ2(V)입니다(노드 n개).
노드 수
등간격, [0,1]
등간격, [−1,1]
체비쇼프, [−1,1]
5
6.86×10²
2.35×10¹
1.96×10¹
10
1.52×10⁷
4.63×10³
1.47×10³
15
4.03×10¹¹
1.10×10⁶
1.19×10⁵
20
1.20×10¹⁶
2.72×10⁸
9.48×10⁶
[0,1]의 등간격 노드 20개에서 κ2≈1016, 곧 배정밀도의 1/ε에 닿았습니다. 계수 ak는 소수 첫 자리도 믿을 수 없습니다. 체비쇼프 노드(6절)를 써도 조건수는 지수적으로 자랍니다. 반데르몽드의 병은 노드가 아니라 단항식 기저에 있습니다. 그래서 이 장의 나머지는 같은 다항식을 다른 기저로 쓰는 이야기입니다. 다행히 조건수가 크다고 해서 p(x)의 값이 언제나 틀리는 것은 아닙니다(7절에서 그 미묘한 차이를 실험합니다).
SIMULATOR
점을 끌어 보간 다항식 만들기
점을 끌기 · 빈 곳 클릭으로 점 추가
점 수 / 차수—
κ₂(V) 반데르몽드—
점 사이 최대 |p|—
해볼 것: ① 점 두 개를 x가 거의 같은 자리로 끌어 보세요. 곡선이 크게 출렁이고 κ₂가 치솟습니다. 두 점의 x가 같아지면 보간 자체가 불가능합니다(정리 5.1의 가정). ② 빈 곳을 클릭해 점을 8~9개로 늘리면 곡선이 양 끝에서 요동치기 시작합니다. 5절의 룽게 현상의 예고입니다. ③ 점 하나만 위아래로 끌면 곡선 전체가 움직입니다. 다항식 보간은 국소적이지 않습니다(6장 스플라인과 비교). 모델: 계수는 부분 피벗 가우스 소거로 반데르몽드 계를 풀어 얻고, 곡선은 무게중심 공식(7절)으로 그립니다.
라그랑주 형식: 노드마다 하나씩의 기저
연립방정식을 풀지 않고 보간 다항식을 적을 수 있을까
세 점 (0,1), (1,3), (3,2)를 지나는 2차식을 반데르몽드 계 없이 바로 적고 싶습니다. 비결은 "한 노드에서만 1이고 나머지 노드에서는 0인" 다항식을 먼저 만드는 것입니다.
정의 5.3 (라그랑주 기저와 라그랑주 형식) 노드 x0,…,xn에 대해
ℓk(x)=j=k∏xk−xjx−xj,p(x)=k=0∑nykℓk(x).
ℓk는 n차 다항식이고 ℓk(xi)=δik(i=k이면 1, 아니면 0)이다. 그러므로 p(xi)=yi.
ℓk를 라그랑주 기저 다항식(Lagrange basis polynomial)이라 한다. 이 기저에서 반데르몽드 행렬의 자리에 오는 행렬은 단위 행렬이다. 계수가 곧 데이터 yk다.
상수 함수 1도 보간 다항식이므로(모든 yk=1) 언제나 ∑kℓk(x)=1입니다. 곧 p(x)는 데이터의 가중 평균인데, 가중치 ℓk(x)가 음수일 수도 있고 1보다 클 수도 있습니다. 노드 밖으로 나가면(외삽) 가중치의 크기가 급격히 커지고, 데이터의 작은 오차가 크게 증폭됩니다.
예제 5.1 (세 점의 라그랑주 형식)(0,1), (1,3), (3,2)를 지나는 2차식의 x=2에서의 값을 구하라.
가중치 ℓ0(2)가 음수다. 2는 노드 1과 3 사이에 있으므로 멀리 있는 x0=0의 값은 "빼서" 곡률을 맞춘다.
라그랑주 형식은 이론에 편리하지만 그대로 계산하면 한 점 x에서 p(x)를 얻는 데 O(n2)번의 곱셈이 들고, 점을 하나 추가하면 모든 ℓk를 새로 만들어야 합니다. 이 두 약점을 뉴턴 형식(3절)과 무게중심 공식(7절)이 고칩니다.
그림 5-1. 세 노드의 라그랑주 기저. 각 ℓk는 자기 노드에서 1, 다른 노드에서 0이다. 데이터 yk로 각 기저의 높이를 조절해 더하면 보간 다항식이 된다.
SIMULATOR
라그랑주 기저 함수의 합으로 보는 보간
데이터 점을 위아래로 · x축의 ◆를 좌우로
보기
보간 다항식 p강조한 기저나머지 기저
탐침 x*—
가중치 ℓₖ(x*)—
Σℓₖ(x*)—
p(x*) = Σyₖℓₖ—
해볼 것: ① 탐침 ◆를 어디에 두어도 가중치의 합 Σℓₖ가 1인 것을 보세요. ② 탐침을 노드 구간 밖(외삽)으로 끌면 가중치의 절댓값이 수십으로 커집니다. 데이터에 섞인 측정 오차가 그만큼 증폭됩니다. ③ '보기'를 ℓₖ로 바꾸고 노드를 7개로 늘리면 양 끝 노드 근처에서 기저가 크게 출렁입니다. 이 출렁임의 최댓값 합이 7절의 르베그 상수입니다. 모델: 노드는 [0, 6]의 등간격.
뉴턴 형식과 분할 차분표
측정점이 하나 더 들어오면
예제 5.1의 세 점으로 2차식을 만든 뒤, 네 번째 측정값 (4,5)가 도착했습니다. 라그랑주 형식에서는 모든 기저가 바뀝니다. 이미 한 계산을 버리지 않고 항 하나만 덧붙일 수는 없을까요?
pn을 처음 n+1개 점의 보간 다항식이라 하면 pn+1−pn은 x0,…,xn에서 0이 되는 n+1차 이하 다항식이므로 c(x−x0)⋯(x−xn) 꼴입니다. 그래서 보간 다항식을 점을 하나씩 더하는 꼴로 쓸 수 있습니다.
정리 5.5 (분할 차분의 성질) (가) f[x0,…,xk]는 pk의 최고차 계수다. (나) 노드의 순서를 바꿔도 값이 같다(대칭). (다) f가 Ck이면 노드를 포함하는 구간의 어떤 ξ에 대해 f[x0,…,xk]=f(k)(ξ)/k!.
증명의 핵심. (가) 위의 pn+1−pn=c(x−x0)⋯(x−xn)에서 c가 최고차 계수. (나) 보간 다항식은 노드 순서와 무관하므로 그 최고차 계수도 무관. 점화식: x0..xk−1의 보간 q0와 x1..xk의 보간 q1로 pk=xk−x0(x−x0)q1−(x−xk)q0이 모든 노드에서 맞으므로, 양변의 최고차 계수를 비교. (다) f−pk는 k+1개의 근을 가지니 롤의 정리를 k번 쓰면 (f−pk)(k)(ξ)=0, 곧 f(k)(ξ)=k!ck. ∎
(다)는 분할 차분이 "이산적인 도함수"라는 뜻입니다. 1차 분할 차분은 할선의 기울기이고(CalculusBook: 도함수), 노드가 모이면 도함수가 됩니다. 이 사실이 8절의 에르미트 보간과 9장 수치 미분의 출발점입니다.
// 분할 차분 계수 c[0..n] (제자리 계산, O(n²))
c ← y
for k = 1 to n
for i = n downto k
c[i] ← (c[i] − c[i−1]) / (x[i] − x[i−k])
// 뉴턴 형식의 계산 (호너와 같은 중첩, O(n))function evaluate(t)
p ← c[n]
for i = n−1 downto 0
p ← p · (t − x[i]) + c[i]
return p
계수 계산은 한 번 O(n2), 그 뒤 점마다 O(n). 점을 하나 더하면 표의 새 행 하나, O(n)만 추가로 계산한다.
예제 5.2 (분할 차분표와 점 추가) 예제 5.1의 데이터에 (4,5)를 더해 3차 보간 다항식을 만들고 p3(2)를 구하라.
점 추가는 항 하나: p3(x)=p2(x)+21x(x−1)(x−3), p3(2)=310+21⋅2⋅1⋅(−1)=37≈2.3333. 같은 다항식을 단항식으로 쓰면 1+313x−617x2+21x3이다.
SIMULATOR
분할 차분표를 한 칸씩 채우기
지금 계산한 칸사용한 두 칸뉴턴 계수(대각선)
해볼 것: ① '다음 칸'으로 한 칸씩 채우며, 각 칸이 왼쪽의 두 칸(노랑)만 쓰는 것을 보세요. 행이 끝날 때마다 곡선의 차수가 하나 올라갑니다. ② '점 추가'를 누르면 표에 새 행 하나만 생깁니다. 위쪽 행은 그대로입니다. ③ x² 데이터에서는 2차 열이 모두 1이고 3차 이상은 0입니다. 정리 5.5(다): f[…] = f⁽ᵏ⁾(ξ)/k! 이고 (x²)″/2! = 1. 모델: 행 i는 f[xᵢ₋ⱼ, …, xᵢ] (j = 0 … i)를 담습니다.
보간 오차 공식
표 사이의 값은 몇 자리까지 믿을 수 있나
사인표에 0, π/4, π/2의 값만 있습니다. 2차 보간으로 sin(π/8)을 구하면 몇 자리가 맞을까요? 참값을 모르는 상태에서 오차를 미리 말할 수 있어야 표를 설계할 수 있습니다.
정리 5.6 (보간 오차)f∈Cn+1[a,b]이고 노드 x0,…,xn∈[a,b]가 서로 다르면, 각 x∈[a,b]에 대해 ξ∈(a,b)가 있어
ω를 노드 다항식(node polynomial)이라 한다. ξ는 x에 따라 달라지고 보통 알 수 없다. 그래서 실제로는 ∣f(n+1)∣≤M으로 바꾸어 ∣f(x)−pn(x)∣≤(n+1)!M∣ω(x)∣를 쓴다.
증명.x가 노드면 양변이 0. 아니면 x를 고정하고 g(t)=f(t)−pn(t)−(f(x)−pn(x))ω(t)/ω(x)라 하자. g는 x0,…,xn과 x, 모두 n+2개의 점에서 0이다. 롤의 정리를 n+1번 쓰면 g(n+1)(ξ)=0인 ξ가 있다. pn(n+1)=0, ω(n+1)=(n+1)!이므로 0=f(n+1)(ξ)−(f(x)−pn(x))(n+1)!/ω(x). ∎
이 식은 테일러 정리의 나머지 f(n+1)(ξ)(x−a)n+1/(n+1)!과 꼴이 같습니다. 테일러 다항식은 한 점에 n+1개의 조건을 몰아넣은 보간이고, 그때 ω=(x−a)n+1입니다. 오차는 세 요소의 곱입니다. 함수의 매끄러움f(n+1), 차수(n+1)!, 그리고 우리가 고를 수 있는 유일한 요소인 노드 배치ω(x).
오차 한계: ∣f′′′∣=∣cos∣≤1, ∣ω(π/8)∣=8π⋅8π⋅83π=5123π3=0.181677. 한계 0.181677/3!=0.030280. 실제 오차 0.0226이 한계 안에 있다.
구간 전체: 간격 h의 등간격 세 노드에서 max∣ω∣=332h3. h=π/4이면 한계 0.031079, 실제 최대 오차는 x≈0.320에서 0.023537이다.
1차 보간의 오차: h²/8n=1이면 ω=(x−x0)(x−x1)의 최대 크기가 구간 가운데에서 h2/4이므로 ∣f−p1∣≤8h2max∣f′′∣. 로그표(h=0.01, x≥1)에서는 ∣(log10x)′′∣=1/(x2ln10)≤0.4343이라 한계가 5.43×10−6이다. 예: log102.71=0.432969, log102.72=0.434569에서 직선 보간한 log102.718≈0.4342490, 참값 0.4342495, 오차 4.7×10−7. 다섯 자리 표의 반올림 오차(5×10−6)보다 작으니 1차 보간으로 충분하다.
SIMULATOR
오차 곡선과 오차 한계: 노드를 옮겨 보기
f와 p · 노드(●)를 좌우로 끌기
오차 f − p 와 한계 ±M|ω|/(n+1)!
fp오차 f − p오차 한계
max |f − p|—
max 한계—
max |ω|—
해볼 것: ① 오차 곡선(빨강)이 언제나 한계(노랑) 안에 있고, 노드에서 0을 지나는 것을 보세요. 오차의 모양은 ω(x)를 닮았습니다. ② 노드 하나를 끌어 다른 노드에 바짝 붙이면 그 근처 오차는 줄지만 반대쪽 빈 곳에서 커집니다. ③ '등간격' 다음에 '체비쇼프'를 누르면 양 끝으로 노드가 몰리며 max |ω|와 max |f − p|가 함께 줄어듭니다. 6절의 주제입니다. 모델: M은 구간에서 |f⁽ⁿ⁺¹⁾|의 최댓값(ln x는 x = 1에서 n!).
룽게 현상: 점을 늘렸는데 더 틀린다
더 많은 측정점은 언제나 더 좋은가
오차 공식의 분모 (n+1)!은 아주 빨리 커지니, 노드를 늘리면 보간이 점점 정확해질 것 같습니다. 실제로 ex나 sinx에서는 그렇습니다. 그런데 무한 번 미분 가능하고 모양도 얌전한 f(x)=1/(1+25x2)을 [−1,1]의 등간격 노드로 보간하면 이야기가 달라집니다.
1901년 룽게(Carl Runge)가 이 예를 연구했습니다. 등간격 노드 n+1개로 보간한 최대 오차를 계산하면 다음과 같습니다.
차수 n
4
8
10
16
20
40
등간격 max∣f−pn∣
0.438
1.05
1.92
14.4
59.8
1.05×10⁵
체비쇼프 max∣f−pn∣
0.402
0.171
0.109
0.0326
0.0153
2.89×10⁻⁴
등간격에서는 오차가 줄기는커녕 지수적으로 커지고, 그 오차는 모두 구간의 양 끝 근처에서 생깁니다. 이것이 룽게 현상(Runge phenomenon)입니다. 같은 함수를 체비쇼프 노드(6절)로 보간하면 꾸준히 줄어듭니다.
왜일까요? 오차 공식의 두 요소가 서로 싸웁니다. 1/(1+25x2)의 도함수는 x=±i/5의 복소 특이점 때문에 f(n+1)이 대략 (n+1)!5n+1만큼 자랍니다. (n+1)!은 지워지고 5n+1max∣ω∣이 남는데, 등간격 노드의 max∣ω∣는 대략 (2/e)n 정도로만 줄어 5⋅2/e>1이 이깁니다. 더 정확한 이론(복소 평면의 퍼텐셜 이론)은 등간격 보간이 수렴하는 영역이 실수축 위의 대략 ∣x∣<0.726뿐임을 보여 줍니다. 시뮬레이터에서 가운데는 맞아 들어가고 양 끝만 터지는 것이 그 결과입니다.
교훈 매끄러움만으로는 부족하다. 고차 다항식 보간은 노드 배치가 결정한다. 등간격 데이터밖에 없다면 차수를 높이는 대신 조각별 다항식(6장 스플라인)이나 최소제곱(7장)을 쓴다.
SIMULATOR
룽게 현상: 차수 n 슬라이더
노드
f등간격 보간체비쇼프 보간
등간격 max |f − p|—
체비쇼프 max |f − p|—
최대 오차 위치 (등간격)—
해볼 것: ① 룽게 함수에서 ▶를 눌러 n을 올리면 가운데는 점점 맞는데 양 끝의 출렁임이 화면을 뚫고 나갑니다(세로축은 잘려 있으니 수치를 보세요). ② 노드를 체비쇼프로 바꾸면 같은 n에서 출렁임이 사라집니다. ③ 1/(1 + x²)은 특이점이 더 멀리(±i) 있어 등간격으로도 수렴합니다. |x|는 매끄럽지 않아 체비쇼프로도 느리게(오차 ∝ 1/n) 줄어듭니다. 모델: 구간 [−1, 1], 무게중심 공식으로 계산.
체비쇼프 노드와 최적성
노드를 어디에 두어야 할까
오차 공식에서 f(n+1)은 함수가 정하고 (n+1)!은 차수가 정합니다. 우리가 바꿀 수 있는 것은 ω(x)=∏(x−xi)뿐입니다. [−1,1]에서 max∣ω∣를 가장 작게 만드는 노드는 무엇일까요?
를 n+1개의 체비쇼프 노드(Chebyshev nodes)라 한다. 반원 위의 등간격 점을 지름에 내린 그림자라서 양 끝에 촘촘하다. 일반 구간 [a,b]에서는 x=2a+b+2b−axk로 옮긴다.
그림 5-2. 체비쇼프 노드 6개. 반원 위에서 각 θk=(2k+1)π/12로 같은 간격인 점(청록, 일부만 보임)을 지름에 내리면 xk=cosθk(초록)가 된다. 가운데는 성기고 양 끝은 촘촘하다.
정리 5.8 (체비쇼프 노드의 최적성) 최고차 계수가 1인 n+1차 다항식 가운데 [−1,1]에서 최댓값 max∣q∣이 가장 작은 것은 T~n+1=2−nTn+1이고, 그 값은 2−n이다. 따라서 체비쇼프 노드에서 ω=T~n+1이고
[−1,1]max∣f−pn∣≤(n+1)!2nmax∣f(n+1)∣.
증명의 핵심. 어떤 최고차 계수 1인 q가 max∣q∣<2−n이라 하자. T~n+1은 n+2개의 점에서 ±2−n을 번갈아 찍으므로, r=T~n+1−q는 그 점들에서 부호가 번갈아 바뀐다. 그러면 r은 n+1개 이상의 근을 갖는데, 최고차 항이 지워져 차수가 n 이하이므로 r≡0, 모순. ∎
등간격과 비교하면 차이가 분명합니다. 노드 3개에서 등간격 {−1,0,1}의 ω=x3−x는 최대 2/(33)=0.385, 체비쇼프 {±3/2,0}의 ω=x3−43x는 최대 0.25입니다. 노드 21개에서는 2.34×10−4 대 9.54×10−7, 245배 차이입니다. 예제 5.3의 사인 보간을 체비쇼프 노드 {0.1052,0.7854,1.4656}으로 바꾸면 오차 한계는 0.0311에서 0.0202로, 실제 최대 오차는 0.0235에서 0.0162로 줄어듭니다.
노드 배치의 품질을 재는 더 완전한 척도는 르베그 상수(Lebesgue constant)Λn=maxx∑k∣ℓk(x)∣입니다. 최선의 n차 근사 p∗에 대해 ∥f−pn∥∞≤(1+Λn)∥f−p∗∥∞이고, 데이터의 오차도 최대 Λn배로 증폭됩니다. 계산해 보면 등간격은 n=10에서 29.9, n=20에서 10987로 지수적으로 커지고, 체비쇼프는 2.49, 2.90으로 π2lnn 정도로만 자랍니다.
SIMULATOR
노드 다항식 |ω(x)|: 등간격 vs 체비쇼프
|ω(x)| = |∏(x − xᵢ)|
노드 위치
세로축
등간격체비쇼프2⁻ⁿ
max |ω| 등간격—
max |ω| 체비쇼프 (= 2⁻ⁿ)—
비율—
르베그 상수 Λ 등간격 / 체비쇼프—
해볼 것: ① 로그 축에서 등간격의 |ω|는 가운데가 낮고 양 끝 구간에서 수십~수백 배 솟습니다. 체비쇼프는 모든 봉우리가 같은 높이 2⁻ⁿ입니다(등진동). ② n+1을 늘리며 비율이 지수적으로 커지는 것을 보세요. ③ 아래 노드 그림에서 체비쇼프 노드가 양 끝에 몰리는 정도를 보세요. 끝의 큰 봉우리를 누르기 위해서입니다. 모델: [−1, 1], 르베그 상수는 1500개 점에서 Σ|ℓₖ|의 최댓값.
무게중심 공식: 빠르고 안정적인 계산
100차 다항식을 믿고 계산할 수 있을까
체비쇼프 노드라면 차수 100의 보간도 정확하다고 했습니다. 하지만 반데르몽드 계수는 1절에서 본 대로 조건수가 1016을 넘고, 라그랑주 형식은 점마다 O(n2)입니다. 실제로 수백 차수의 보간을 쓰는 라이브러리(예: Chebfun)는 어떻게 계산할까요?
라그랑주 기저의 공통 인수를 묶어 냅니다. ω(x)=∏j(x−xj)와 무게중심 가중치(barycentric weight)wk=1/∏j=k(xk−xj)를 쓰면 ℓk(x)=ω(x)wk/(x−xk)입니다. 여기에 ∑kℓk=1로 나누면 ω(x)가 지워집니다.
정리 5.9 (무게중심 공식)x가 노드가 아니면
p(x)=k=0∑nx−xkwkk=0∑nx−xkwkyk.
가중치는 데이터 y와 무관하므로 한 번 O(n2)로 구해 두면, 점마다 O(n)이다. 가중치 전체에 같은 상수를 곱해도 결과가 같다. 체비쇼프 노드(제1종)에서는 wk∝(−1)ksin2(n+1)(2k+1)π, 끝점을 포함하는 체비쇼프 점 cos(kπ/n)에서는 wk∝(−1)kδk(δ0=δn=21, 나머지 1)로 닫힌 꼴이다.
// 무게중심 가중치 (한 번, O(n²))for k = 0 to n
w[k] ← 1
for j = 0 to n, j ≠ k
w[k] ← w[k] / (x[k] − x[j])
// 한 점 t에서의 값 (O(n))function bary(t)
num ← 0; den ← 0
for k = 0 to n
d ← t − x[k]
if d = 0 then return y[k] // 노드 위에서는 데이터 그대로
q ← w[k] / d
num ← num + q · y[k]; den ← den + q
return num / den
분자 61⋅1−21⋅3−61⋅2=−35, 분모 61−21−61=−21. p(2)=310. 예제 5.1, 5.2와 같은 답이다.
안정성은 놀랍습니다. t가 노드 xk에 아주 가까우면 1/(t−xk)가 거대해지지만, 분자와 분모에 같은 비율로 나타나 서로 지워집니다. 하이엄(Nicholas Higham)은 2004년에 이 공식이 르베그 상수가 작은 노드(체비쇼프 등)에서 전방 안정임을 증명했습니다. 반면 같은 다항식을 반데르몽드로 구한 단항식 계수로 계산하면, 계수 자체가 조건수만큼 틀려서 정확도에 바닥이 생깁니다. 아래 시뮬레이터의 세 번째 곡선이 그 바닥입니다.
예제 5.5 (계산 방법이 정확도를 가른다) 룽게 함수를 체비쇼프 노드로 보간한 최대 오차를 두 방법으로 계산했다.
차수 n
20
40
60
80
무게중심 공식
1.53×10⁻²
2.89×10⁻⁴
5.42×10⁻⁶
1.02×10⁻⁷
반데르몽드 → 단항식 계수
1.53×10⁻²
3.03×10⁻⁴
3.48×10⁻⁴
7.70×10⁻⁴
수학적으로 같은 다항식인데 n=40부터 단항식 계산은 더 좋아지지 않고 오히려 나빠진다. 무게중심 공식은 이론적 수렴 속도 ρ−n, ρ=51+1+251≈1.2198을 그대로 따라 n=128에서 7.4×10−12에 이른다.
SIMULATOR
오차–차수 그래프: 노드와 계산 방법
등간격 · 무게중심체비쇼프 · 무게중심체비쇼프 · 반데르몽드
등간격—
체비쇼프 · 무게중심—
체비쇼프 · 반데르몽드—
해볼 것: ① eˣ에서 등간격도 처음엔 체비쇼프만큼 빨리 줄지만 n ≈ 14에서 10⁻¹³ 근처에 닿은 뒤 다시 올라갑니다. 함수가 아니라 반올림 오차가 르베그 상수(지수적으로 큼)만큼 증폭된 것입니다. ② 룽게 함수에서 반데르몽드 곡선(노랑)이 10⁻⁴ 근처에서 멈추고, 무게중심(초록)은 직선으로 계속 내려갑니다. 세로축이 로그이므로 직선은 지수 수렴입니다. ③ cos 20x는 n이 16~20을 넘어야 비로소 줄기 시작합니다. 파장당 최소 노드 수(대략 π개)가 필요합니다. 모델: [−1, 1], 오차는 1201개 점의 최댓값, 반데르몽드 계는 부분 피벗 가우스 소거.
에르미트 보간: 기울기까지 맞추기
위치와 속도를 함께 아는 경우
로봇 팔의 관절이 t=0에 각도 0, 각속도 1이고 t=1에 각도 1, 각속도 0이어야 합니다. 값 두 개로는 직선밖에 못 정하지만, 끝점의 기울기까지 지정하면 부드럽게 출발하고 부드럽게 멈추는 궤적을 만들 수 있습니다. 애니메이션의 키프레임, 위성 궤도력의 위치·속도 표도 같은 구조입니다.
정의 5.10 (에르미트 보간) 서로 다른 노드 x0,…,xm에서 값 f(xi)와 도함수 f′(xi)를 모두 맞추는 2m+1차 이하 다항식 H를 에르미트 보간(Hermite interpolation)이라 한다. 조건 2m+2개, 미지수 2m+2개이며 해는 유일하다. 오차는
f(x)−H(x)=(2m+2)!f(2m+2)(ξ)i=0∏m(x−xi)2.
계산은 분할 차분표에 각 노드를 두 번 적으면 됩니다. 정리 5.5(다)에 의해 같은 노드의 1차 분할 차분은 f[xi,xi]=limh→0hf(xi+h)−f(xi)=f′(xi)로 정의하는 것이 자연스럽습니다. 나머지 칸은 보통 점화식 그대로입니다.
구간 하나에서의 3차 에르미트 보간은 6장의 조각별 3차 에르미트(PCHIP)와 3차 스플라인의 부품이 됩니다. 노드마다 기울기를 어떻게 정하느냐가 두 방법의 차이입니다.
SIMULATOR
같은 정보량, 다른 보간: 라그랑주 vs 에르미트
f라그랑주 m+1점라그랑주 2m+2점에르미트
라그랑주 m+1점—
라그랑주 2m+2점—
에르미트—
해볼 것: ① 노드 위의 짧은 선분이 에르미트가 맞추는 기울기입니다. 에르미트 곡선(초록)이 노드에서 f에 접하는 것을 보세요. ② 정보량(조건 2m+2개)이 같은 '라그랑주 2배 노드'와 에르미트의 최대 오차를 비교하세요. 대체로 비슷하지만, 에르미트는 오차가 노드 사이로 몰립니다(∏(x − xᵢ)²). ③ 1/(1 + x²), [−4, 4]에서 노드를 5개 넘게 늘리면 에르미트와 2배 노드 라그랑주 모두 양 끝에서 오차가 다시 커집니다(룽게 현상). 도함수를 아는 것이 노드 배치 문제를 없애 주지는 않습니다. 모델: 등간격 노드, 반복 노드 분할 차분표로 계산. 표시는 최대 오차.
이 도구가 쓰이는 곳
보간 다항식은 그 자체로 쓰이기보다 다른 알고리즘의 부품으로 더 자주 쓰입니다. "모르는 함수를 다항식으로 바꾸고, 다항식에 대해서는 정확히 계산한다"가 수치해석의 기본 동작입니다.