온도, 압력, 전위, 농도처럼 공간과 시간에 함께 퍼져 있는 양은 편미분방정식을 따릅니다. ODEBook 16장(편미분방정식 입문)은 열·파동·라플라스 방정식을 변수분리로 풀고, 마지막에 명시적 차분법 FTCS와 그 안정 조건 r≤1/2, 파동의 CFL 조건을 맛보았습니다. 이 장은 거기서 출발합니다. 막대 대신 판을, 사인 급수 대신 큰 희소 연립방정식을, 명시적 방법 대신 음적 방법을 씁니다. 모든 방법을 같은 세 질문으로 다룹니다. 얼마나 정확한가(차수), 오차가 자라지 않는가(안정성), 얼마나 비싼가(비용). 그리고 이 세 질문을 묶는 랙스 동등성 정리, 이류 방정식에서 드러나는 수치 확산과 분산, 그리고 복잡한 모양을 다루는 유한 요소법과 보존 법칙을 지키는 유한 체적법까지 갑니다. 이 장은 책의 마지막 본문 장이라, 끝에서 책 전체를 돌아봅니다.
푸아송 방정식을 5점 스텐실로 이산화해 희소 선형계를 만들고, 그 크기·구조·풀이 비용(야코비·SOR·직접법)을 견준다.
열 방정식의 FTCS·BTCS·크랭크–니콜슨을 비교하고, 폰 노이만 분석으로 각 방법의 증폭 인자와 안정 조건을 유도한다.
랙스 동등성 정리로 일관성·안정성·수렴의 관계를 설명한다.
이류 방정식에서 중앙 차분이 불안정한 이유, 풍상 차분의 수치 확산, 랙스–벤드로프의 진동, CFL 조건을 설명한다.
1차원 문제를 약형식과 모자 함수로 유한 요소 강성 행렬로 조립하고, 유한 체적법의 보존 성질을 안다.
이 수식이 없었다면칩의 열 설계와 날개 주위의 공기 흐름
스마트폰 칩 안의 뜨거운 점이 어디에 생기는지, 엔진 블록이 시동 뒤 몇 분 만에 데워지는지, 날개 위를 지나는 공기의 압력 분포가 어떤지, 트랜지스터 안의 전자 농도가 어떻게 분포하는지는 모두 편미분방정식의 해입니다. 이런 문제의 영역은 직사각형이 아니고 물성도 균일하지 않아서, 변수분리나 급수로는 풀 수 없습니다. 공학자는 영역을 수만~수십억 개의 칸이나 요소로 자르고, 미분을 이웃 값의 차이로 바꾸어 거대한 연립방정식으로 만든 뒤 컴퓨터로 풉니다.
미분방정식을 격자로 바꾸는 생각의 수학적 토대 가운데 하나는 쿠랑, 프리드리히스, 레위(Courant, Friedrichs, Lewy)의 1928년 논문입니다. 1950년대에는 랙스(Peter Lax)의 동등성 정리와 폰 노이만(John von Neumann)의 안정성 분석이, 1960년대 이후에는 구조 공학에서 자란 유한 요소법이 자리 잡았습니다. 오늘날 상용 열·구조 해석 프로그램, 전산 유체 역학(CFD) 코드, 반도체 소자 시뮬레이터는 이 장의 방법을 수백만 배 큰 규모로 돌립니다.
∂u/∂t = α∇²u→격자 위의 차분→희소 연립방정식 Au = b, 안정한 시간 진행→열·유체·소자 시뮬레이션
격자와 유한 차분 근사
미분을 이웃 값의 차이로
길이 1 m인 막대에 열원 f(x)가 있고 양 끝이 0 °C일 때의 정상 온도는 −u′′=f, u(0)=u(1)=0을 따릅니다. 컴퓨터는 함수 u(x)를 저장할 수 없고 점 몇 개의 값만 저장할 수 있습니다. 점 N−1개의 값만으로 방정식을 어떻게 쓰고, 점을 두 배로 늘리면 답은 얼마나 좋아질까요?
구간을 간격 h=1/N로 나눈 격자(grid, mesh)xi=ih 위에서 ui≈u(xi)를 미지수로 둡니다. 9장의 중앙 차분을 2계 도함수에 쓰면, 테일러 전개 u(x±h)=u±hu′+2h2u′′±6h3u′′′+24h4u′′′′+⋯를 더해 홀수 항이 지워지고
h2u(x+h)−2u(x)+u(x−h)=u′′(x)+12h2u′′′′(ξ).
좌변을 δ2u/h2로 적는다. 버린 항이 국소 절단 오차이고 h2에 비례한다(2차 정확). 이 공식을 이웃 세 점의 무게 (1,−2,1)/h2로 보는 것을 스텐실이라 한다.
이를 각 내부 점에 쓰면 −ui−1+2ui−ui+1=h2fi, i=1,…,N−1이고, 경계값 u0=uN=0을 넣으면 삼중대각 연립방정식 Tu=h2f입니다. 행렬 T=tridiag(−1,2,−1)은 대칭 양정치이며, 12장의 토머스 알고리즘으로 O(N) 연산에 풀립니다.
정의 16.1 (일관성과 정확도 차수) 차분 방정식에 참 해 u(xi)를 넣었을 때 남는 값 τi를 국소 절단 오차라 하고, h→0일 때 τ→0이면 그 방법이 미분방정식과 일관적(consistent)이라 한다. τ=O(hp)이면 p차 정확하다.
정리 16.2 (1차원 푸아송 차분법의 수렴)u∈C4이면 위 차분 해의 오차는 maxi∣ui−u(xi)∣≤96h2max∣u′′′′∣이다.
증명의 핵심. 오차 ei=ui−u(xi)는 Te/h2=−τ를 만족한다. 그러므로 ∥e∥∞≤∥(T/h2)−1∥∞∥τ∥∞. (T/h2)−1의 성분은 모두 양수이고 행 합은 −w′′=1의 차분 해 xi(1−xi)/2(이 이차식에서는 차분이 정확하다)이므로 최대 1/8이다. ∣τ∣≤12h2max∣u′′′′∣와 곱하면 된다. 절단 오차가 작다는 것(일관성)과 역행렬이 h에 무관하게 유계라는 것(안정성)이 합쳐져 수렴이 된다. 5절의 랙스 동등성 정리의 원형이다. ∎
예제 16.1 (격자 수렴 실험)−u′′=π2sinπx, 참 해 u=sinπx.
N
uN/2 (참값 1)
최대 오차
오차 비 (이전/지금)
4
1.053029
5.303×10⁻²
—
8
1.012951
1.295×10⁻²
4.095
16
1.003219
3.219×10⁻³
4.023
32
1.000804
8.036×10⁻⁴
4.006
64
1.000201
2.008×10⁻⁴
4.001
격자를 두 배로 촘촘히 하면 오차가 4분의 1, 곧 log24=2차다. 상한 96h2π4은 N=4에서 6.3×10−2으로 실제 오차 5.3×10−2에 가깝다. 이 비율 실험은 PDE 코드를 검증하는 표준 절차다(제조된 해의 방법).
SIMULATOR
격자 수렴: 점을 두 배로, 오차는 4분의 1
차분 해(점)와 참 해(선)
최대 오차 vs h (로그–로그)
h = 1/N—
최대 오차—
오차 비 (N/2 대비)—
맞춘 기울기 (차수)—
해볼 것: ① N을 4 → 8 → 16으로 올리며 오차 비가 4에 다가가는지 보세요. ② 'eˣ' 문제에서도 기울기는 2입니다. 차수는 해의 매끄러움에만 달려 있습니다. ③ 덜 매끄러운 해(u‴가 x = 0.4에서 무한대)에서는 오차 비가 N마다 들쭉날쭉해집니다. 격자점이 x = 0.4에 얼마나 가까운지에 따라 오차가 달라지고, 정리 16.2의 가정 u ∈ C⁴가 깨져 깔끔한 h² 법칙이 사라집니다. 모델: 경계값은 참 해에서 가져오고, 삼중대각계는 토머스 알고리즘으로 풉니다. 오차는 격자점에서의 최대 오차, N = 4 … 512.
푸아송 방정식: 5점 스텐실과 희소 선형계
칩 위의 정상 온도 분포
정사각형 판의 네 변 온도가 정해져 있고 판 안에 발열 부품이 있습니다. 정상 상태 온도는 −∇2u=f(푸아송 방정식, f=0이면 라플라스 방정식)를 따릅니다. ODEBook에서는 이웃 평균을 되풀이해 판의 온도를 구했습니다. 그 되풀이가 실제로는 어떤 연립방정식을 푸는 것이고, 격자를 키우면 얼마나 비싸지는지 정량적으로 봅시다.
x와 y 방향에 앞 절의 중앙 차분을 각각 쓰면, 간격 h의 정사각 격자 점 (xi,yj)에서
−h2ui+1,j+ui−1,j+ui,j+1+ui,j−1−4ui,j=fi,j.
가운데 점과 동서남북 네 이웃, 다섯 점의 5점 스텐실. 절단 오차는 12h2(uxxxx+uyyyy), 2차 정확하다. f=0이면 "각 점의 값은 네 이웃의 평균"이다.
그림 16-1. 5점 스텐실(왼쪽)과 그것이 만드는 행렬(오른쪽). 미지수를 한 줄씩 차례로 번호 매기면 행렬은 대각 근처의 세 줄과 거리 n의 두 줄만 0이 아닌 블록 삼중대각 행렬이 된다.
한 변에 내부 점이 n=N−1개면 미지수는 n2개, 행렬은 n2×n2입니다. n=100이면 미지수 9801개(N=100), 밀집 행렬로 저장하면 약 108개의 칸이지만 0이 아닌 값은 5만 개 미만입니다. 그래서 행렬을 만들지 않고 스텐실만으로 계산하는 희소 방법이 중요합니다. 밀집 가우스 소거는 (n2)3/3≈3×1011번, 띠 촐레스키는 띠 너비 n을 이용해 약 n2⋅n2/2=5×107번입니다. 3차원이면 차이가 훨씬 커집니다.
정리 16.3 (이산 최대 원리)f=0인 5점 차분 해는 각 내부 점의 값이 네 이웃의 평균이므로, 최댓값과 최솟값을 경계에서만 가진다. 따라서 차분 해는 유일하고(같은 경계값의 두 해의 차는 0), 경계값의 범위를 벗어나지 않는다. ODEBook 정리 16.5의 평균값 성질을 격자로 옮긴 것이다.
예제 16.2 (윗변만 뜨거운 판) 단위 정사각형의 윗변 100 °C, 나머지 세 변 0 °C, f=0.
판을 90°씩 돌린 네 문제를 겹치면 경계가 모두 100 °C인 문제가 되고 그 해는 어디나 100이다. 정중앙은 네 문제에서 같은 값이므로 u(21,21)=25. 이 논증은 차분 방정식에도 그대로 성립해서, 5점 차분 해의 중앙값도 어떤 N(짝수)에서나 정확히 25다(계산 결과 N=4,8,16에서 25.00000000).
점 (0.5,0.75)의 참값(급수해)은 54.053. 차분 해는 N=4,8,16에서 52.679, 53.608, 53.933, 오차 1.37, 0.445, 0.120으로 비가 3.1, 3.7이다. 윗변 양 끝 모서리에서 경계값이 불연속(100과 0)이라 해가 매끄럽지 않아 처음에는 2차보다 느리게 준다.
큰 희소계를 푸는 방법은 13장의 주제였습니다. 이 문제에서 야코비 반복의 스펙트럼 반지름은 정확히 ρJ=cosπh, 가우스–자이델은 ρJ2, 최적 SOR(ω=2/(1+sinπh))은 ω−1입니다. 오차를 10−6배 줄이는 데 필요한 반복 수는 다음과 같습니다.
N (h = 1/N)
미지수
야코비
가우스–자이델
최적 SOR (ω)
10
81
276
138
22 (1.528)
20
361
1116
558
44 (1.730)
50
2401
6995
3498
110 (1.882)
100
9801
27992
13996
220 (1.939)
야코비는 N2에, SOR은 N에 비례해 늘어납니다. 격자 간격이 작아지면 행렬의 조건수가 κ≈4/(πh)2로 커지기 때문입니다. 켤레 기울기법도 κ∝N번이 들고, 격자 크기와 무관한 반복 수로 푸는 것이 13장의 다중 격자법입니다. 직사각형 영역의 상수 계수 문제라면 8장의 FFT로 사인 변환을 해서 O(n2logn)에 직접 풀 수도 있습니다.
SIMULATOR
판의 정상 온도: 경계를 바꾸고 열원을 찍기
판을 누르면 열원(다시 누르면 지움)
보기
중앙 온도 u(½, ½)—
미지수 · 0 아닌 행렬 값—
반복 수 (잔차 10⁻⁸) 야코비 · G-S—
최적 SOR—
해볼 것: ① 기본값(윗변만 100 °C)에서 중앙 온도가 정확히 25.00인지 보세요(예제 16.2). 네 변을 모두 100으로 하면 어디나 100입니다. ② 판 안을 눌러 열원을 몇 개 찍으면 온도가 경계값보다 높아질 수 있습니다. f ≠ 0이면 최대 원리가 성립하지 않기 때문입니다. ③ 'SOR 반복 과정'은 0에서 시작한 SOR이 경계의 정보를 안쪽으로 퍼뜨리는 모습을, '행렬 구조'는 같은 문제를 6×6 내부 격자로 줄였을 때의 36×36 행렬을 보여 줍니다. 모델: N = 32(미지수 31² = 961개), 열원은 한 점에 f = 3·10⁴(°C/m²). 반복 수는 같은 문제를 0에서 시작해 직접 센 값입니다.
열 방정식: 명시적 FTCS, 음적 BTCS, 크랭크–니콜슨
안정 조건이 계산을 묶는다
ODEBook에서 FTCS는 r=αΔt/Δx2≤1/2일 때만 안정했습니다. 막대를 Δx=1/1000로 자르면 α=1일 때 Δt≤5×10−7, 시각 1까지 가는 데 200만 걸음이 필요합니다. 답의 정확도로는 Δt=10−3이면 충분한데도 말입니다. 11장의 강성 ODE와 같은 상황입니다. 처방도 같습니다. 음적 방법.
공간을 먼저 차분화하면 열 방정식 ut=αuxx는 내부 점 n개의 연립 ODE u′=−Δx2αTu가 됩니다(선의 방법(method of lines)). T의 고유값은 4sin22kπΔx(k=1,…,n)로, 가장 큰 것이 약 4라 이 ODE의 고유값은 0에 가까운 것부터 −4α/Δx2까지 퍼져 있습니다. 강성비가 Δx−2에 비례하는 전형적인 강성 계입니다. 이 ODE에 11장의 세 방법을 쓰면 세 가지 PDE 방법이 나옵니다.
정의 16.4 (FTCS, BTCS, 크랭크–니콜슨)r=αΔt/Δx2, δ2ui=ui+1−2ui+ui−1라 하자.
행렬로 쓰면 BTCS는 (I+rT)uk+1=uk, CN은 (I+2rT)uk+1=(I−2rT)uk. 매 걸음 삼중대각 연립방정식을 하나 푼다. 국소 절단 오차는 FTCS·BTCS가 O(Δt+Δx2), CN이 O(Δt2+Δx2)이다.
크랭크–니콜슨 방법은 1947년 크랭크와 니콜슨(John Crank, Phyllis Nicolson)이 발표했습니다. 음적 방법의 대가는 매 걸음의 선형계인데, 1차원에서는 토머스 알고리즘(12장)으로 O(n), 곧 FTCS 한 걸음과 같은 차수의 비용입니다. 다차원에서는 희소 선형계를 반복법이나 교대 방향 음적법(ADI: 방향마다 삼중대각계를 번갈아 푸는 방법)으로 풉니다.
function crank_nicolson_step(u, r) // u: 내부 점 n개, 양끝 0for i = 1 .. n // 오른쪽: (I - r/2 T) u
d[i] = u[i] + (r/2) * (u[i-1] - 2*u[i] + u[i+1])
sub = -r/2; diag = 1 + r; sup = -r/2 // 왼쪽: (I + r/2 T)return thomas(sub, diag, sup, d) // O(n): 12장
예제 16.3 (같은 정확도, 다른 비용)ut=uxx, u(x,0)=sinπx, 양끝 0, Δx=1/20. t=0.1에서 u(0.5)의 참값은 e−0.1π2=0.372708. 공간 차분만의 오차(Δt→0의 극한)는 7.6×10−4이다.
방법
Δt
r
걸음 수
u(0.5, 0.1)
시간 오차 (반이산 해 대비)
FTCS
0.001
0.4
100
0.371645
−1.82×10⁻³
FTCS
0.0025
1
40
약 3.8×10²
폭발
BTCS
0.01
4
10
0.390864
1.74×10⁻²
BTCS
0.005
2
20
0.382339
8.87×10⁻³
BTCS
0.0025
1
40
0.377947
4.48×10⁻³
CN
0.01
4
10
0.373167
−2.98×10⁻⁴
CN
0.005
2
20
0.373390
−7.44×10⁻⁵
CN
0.0025
1
40
0.373446
−1.86×10⁻⁵
BTCS의 시간 오차는 Δt를 반으로 줄일 때마다 1.96, 1.98배로 준다: 1차. CN은 4.00, 4.00배: 2차.
CN은 10걸음(r=4)만으로 시간 오차 3×10−4, 전체 오차 4.6×10−4로 공간 오차 수준에 닿는다. 안정한 FTCS는 100걸음을 걷고도 시간 오차가 1.8×10−3이다.
FTCS r=1은 40걸음 만에 값이 약 380이 되었다(정확한 값은 반올림 오차의 크기라 계산 순서에 따라 달라진다). 처음 자료 sinπx에는 톱니 성분이 반올림 오차 정도로만 있지만, ∣G(π)∣=3배씩 자라 340≈1019배가 되면 10−16도 눈에 보인다.
CN에도 약점이 있습니다. 가운데 0.4~0.6만 1이고 나머지가 0인 사각 펄스에서 Δt=0.05(r=20)로 한 걸음 가면, t=0.05의 참값 중앙 온도 0.244 대신 CN은 −0.235라는 음의 온도를 내고 이웃 점과 부호가 번갈아 바뀝니다. BTCS는 0.281로 조금 퍼졌지만 매끄럽습니다. 다음 절의 증폭 인자가 이유를 보여 줍니다.
SIMULATOR
세 방법 나란히: FTCS · BTCS · 크랭크–니콜슨
처음 온도
참 해 (급수)FTCSBTCS크랭크–니콜슨
걸음 k · 시각 t—
최대 오차 FTCS—
BTCS—
CN—
해볼 것: ① r = 0.4에서 세 방법이 모두 참 해를 따라갑니다. r을 0.6으로 올리면 FTCS에만 톱니가 자랍니다(사각 펄스에서 빨리 보입니다). ② r = 4에서 sin πx를 돌리면 BTCS는 눈에 띄게 늦게 식고(1차), CN은 참 해에 거의 붙어 있습니다(2차). ③ 사각 펄스 + r = 20에서 '한 걸음'을 누르면 CN이 음의 온도와 지그재그를 냅니다. BTCS는 그렇지 않습니다. 모델: ut = uxx, [0, 1], Δx = 1/20, 양끝 0. 참 해는 400항 사인 급수. 화면 밖으로 나간 값은 잘립니다.
폰 노이만 안정성 분석
ODEBook 16장은 FTCS의 증폭 인자 G(θ)=1−4rsin22θ를 구해 r≤21을 얻었습니다. 같은 계산을 모든 선형 상수 계수 차분법에 할 수 있습니다. 이것이 폰 노이만 안정성 분석(von Neumann stability analysis)입니다.
정의 16.5 (증폭 인자) 무한하거나 주기적인 격자에서 격자 푸리에 모드 ujk=Gkeijθ(−π≤θ≤π, θ=ξΔx)를 차분법에 넣으면 한 걸음의 곱 인자 G(θ)가 정해진다. 이를 증폭 인자(amplification factor)라 한다. 모든 θ에서 ∣G(θ)∣≤1(또는 ≤1+CΔt)이면 폰 노이만 의미에서 안정하다.
δ2eijθ=(eiθ−2+e−iθ)eijθ=−4s2eijθ, s=sin2θ를 쓰면 세 방법의 증폭 인자가 곧바로 나옵니다.
참 해의 모드 eiξx는 한 걸음 Δt에 e−αξ2Δt=e−rθ2배가 된다. 낮은 모드(θ→0)에서 세 인자 모두 이 값과 맞고, 차이는 높은 모드에서 난다.
정리 16.6 (열 방정식 차분법의 안정성) FTCS는 r≤21일 때만 안정하다. BTCS와 크랭크–니콜슨은 모든 r>0에서 안정하다(무조건 안정). 또 r→∞일 때 가장 높은 모드에서 GBTCS(π)=1/(1+4r)→0이지만 GCN(π)=(1−2r)/(1+2r)→−1이다.
증명.0≤s2≤1. BTCS의 분모는 1 이상이라 0<G≤1. CN은 ∣1−2rs2∣≤1+2rs2이 늘 성립한다. FTCS는 ODEBook 정리 16.6. 극한은 s=1을 넣으면 된다. ∎
정리의 둘째 부분이 앞 절 CN의 지그재그를 설명합니다. r=20이면 GCN(π)=−39/41=−0.951. 톱니 모드는 사라지지 않고 걸음마다 부호만 바꾸며 거의 그대로 남습니다. 참 해에서는 이 모드가 e−20π2배, 사실상 즉시 사라져야 합니다. 사각 펄스처럼 높은 모드를 많이 가진 자료에서 이것이 눈에 보입니다. BTCS처럼 ∣G∣→0인 성질을 11장에서 L-안정이라 불렀습니다. 실무에서는 처음 몇 걸음을 BTCS로 걸어 높은 모드를 죽인 뒤 CN으로 바꾸는 요령(래너처 시작)을 씁니다.
폰 노이만 분석은 이류 방정식에도 그대로 쓰입니다(6절). 아래 시뮬레이터에서 두 방정식의 증폭 인자를 비교하세요.
SIMULATOR
증폭 인자 그래프: 모드마다 한 걸음에 몇 배인가
방정식
그래프
FTCS max|G|—
BTCS—
CN—
G(π) CN—
해볼 것: ① 열 방정식에서 r을 0.5 위로 올리면 FTCS 곡선(빨강)이 θ = π 근처에서 −1 아래로 내려갑니다. ② r = 20에서는 CN 곡선이 θ = π에서 −1에 붙고, BTCS는 0에 붙습니다. 참 인자 e−rθ²(검정)는 거의 즉시 0입니다. ③ 이류로 바꾸면 중앙 차분 FTCS의 |G|는 어떤 C에서도 1보다 크고, 풍상·랙스–벤드로프는 C ≤ 1에서만 1 이하입니다. '위상 비'는 수치 파의 속도 / 참 속도입니다. 모델: θ = ξΔx ∈ [0, π].
랙스 동등성 정리: 일관성 + 안정성 = 수렴
절단 오차가 작은데 왜 틀리나
FTCS를 r=0.6으로 돌리면, 매 걸음 미분방정식을 O(Δt+Δx2) 오차로 근사합니다. 격자를 아무리 줄여도(같은 r) 국소 오차는 0으로 갑니다. 그런데 답은 폭발합니다. 반대로, 국소 오차가 작고 폭발하지 않으면 답이 맞는다고 믿어도 될까요?
수치 해가 참 해에 다가가는 것(수렴)은 우리가 원하는 성질이지만 직접 확인하기 어렵습니다. 참 해를 모르기 때문입니다. 반면 일관성은 테일러 전개로, 안정성은 폰 노이만 분석으로 확인할 수 있습니다. 다음 정리가 둘을 수렴에 잇습니다.
정리 16.7 (랙스 동등성 정리) 잘 놓인(해가 존재·유일하고 처음 자료에 연속적으로 의존하는) 선형 초기값 문제와 그것에 일관적인 선형 차분법에 대해, 그 차분법이 수렴할 필요충분조건은 안정한 것이다. 여기서 안정성은 고정된 시간 T까지 kΔt≤T인 모든 k에 대해 ∥Sk∥≤CT(한 걸음 연산자 S의 거듭제곱이 격자에 무관하게 유계)라는 뜻이다. 1956년 랙스와 리히트마이어(Lax, Richtmyer)가 발표했다.
"안정 ⇒ 수렴"의 핵심. 오차 ek는 ek+1=Sek+Δtτk를 따르므로 ek=Δt∑m<kSk−1−mτm. 안정성으로 ∥ek∥≤CTTmax∥τm∥이고, 일관성으로 이것이 0으로 간다. 정리 16.2와 ODEBook의 오일러 오차 정리(전역 오차 = 국소 오차 × 증폭의 합)가 같은 구조다. ∎
이 정리에서 실용적인 결론 두 가지가 나옵니다. 첫째, 안정한 방법의 수렴 차수는 절단 오차의 차수와 같습니다. 예제 16.3의 BTCS 1차, CN 2차가 그 예입니다. 그래서 새 코드를 검증할 때는 (1) 절단 오차의 차수를 손으로 구하고, (2) 폰 노이만으로 안정성을 확인한 뒤, (3) 격자 수렴 실험으로 그 차수가 실제로 나오는지 봅니다. 둘째, 일관적이지만 불안정한 방법은 어떤 격자에서도 쓸모가 없습니다. 격자를 줄이면 국소 오차는 줄지만 증폭 횟수가 늘어 결국 반올림 오차까지 키웁니다.
방법
일관성 (절단 오차)
안정 조건
결론
열 FTCS
O(Δt + Δx²)
r ≤ 1/2
조건부 수렴, 1차(시간)
열 BTCS
O(Δt + Δx²)
무조건
수렴, 1차(시간)
열 크랭크–니콜슨
O(Δt² + Δx²)
무조건
수렴, 2차
이류 중앙 차분 FTCS
O(Δt + Δx²)
없음 (|G| > 1)
수렴하지 않음
이류 풍상 차분
O(Δt + Δx)
0 ≤ C ≤ 1
조건부 수렴, 1차
이류 랙스–벤드로프
O(Δt² + Δx²)
|C| ≤ 1
조건부 수렴, 2차
파동 립프로그
O(Δt² + Δx²)
C ≤ 1
조건부 수렴, 2차
이류 방정식: 풍상 차분, 수치 확산, 랙스–벤드로프, CFL
모양 그대로 실어 나르기
강물에 떨어진 염료, 바람에 실린 오염 물질, 파이프 속의 온도 펄스는 흐름을 따라 모양을 유지한 채 움직입니다. 가장 단순한 모형 ut+aux=0의 해는 u(x,t)=u0(x−at), 처음 모양을 속도 a로 옮긴 것입니다. 해를 손으로 쓸 수 있는 이 쉬운 방정식이 수치적으로는 놀라울 만큼 어렵습니다. 가장 자연스러운 중앙 차분이 무조건 불안정하기 때문입니다.
C=aΔt/Δx를 쿠랑 수라 합니다. 시간 전진·공간 중앙 차분 ujk+1=ujk−2C(uj+1k−uj−1k)의 증폭 인자는 G=1−iCsinθ이고 ∣G∣2=1+C2sin2θ>1입니다. 어떤 Δt를 써도 불안정합니다. 열 방정식에는 확산이 높은 모드를 눌러 주지만, 이류에는 그런 힘이 없어 중앙 차분의 작은 증폭이 그대로 쌓입니다.
풍상(upwind) 차분은 1차 정확, ∣G∣2=1−2C(1−C)(1−cosθ). 랙스–벤드로프(Lax–Wendroff, 1960)는 테일러 전개 utt=a2uxx를 써서 2차 정확, ∣G∣2=1−4C2(1−C2)sin42θ. 둘 다 0≤C≤1에서 안정하다.
풍상 차분은 안정하지만 대가가 있습니다. 풍상 식에 참 해를 넣고 테일러 전개하면, 이 방법이 실제로 더 정확하게 푸는 방정식(수정 방정식(modified equation))은
ut+aux=Dnum2aΔx(1−C)uxx+O(Δx2)
이류 방정식에 없던 확산항이 생겼다. 이것이 수치 확산(numerical diffusion)이다. Δx=0.01, C=0.8, a=1이면 Dnum=0.001. C=1이면 사라지고, 그때 풍상 차분은 ujk+1=uj−1k, 정확히 한 칸 이동이다.
랙스–벤드로프는 이 확산항을 지웠지만 다음 항인 3계 도함수 항(분산)이 남아, 파장마다 속도가 달라집니다. 짧은 파장이 뒤처지며 급한 경사 뒤에 물결 같은 진동이 생깁니다. 실제로 계산해 보면 다음과 같습니다.
예제 16.4 (사각 펄스 실어 나르기) 주기 구간 [0, 1], 칸 100개, a=1, C=0.8(Δt=0.008), 처음 자료는 0.1<x<0.3에서 1. 60걸음(t=0.48) 뒤.
방법
최댓값
최솟값
L¹ 오차
총량 ∫u dx
참 해
1
0
0
0.200000
중앙 차분 FTCS
2.7×10⁵
−2.6×10⁵
5.2×10⁴
0.200000
풍상
0.9990
0.0000
4.91×10⁻²
0.200000
랙스–프리드리히스
0.9716
0.0000
7.31×10⁻²
0.200000
랙스–벤드로프
1.1613
−0.1613
3.90×10⁻²
0.200000
중앙 차분은 60걸음 만에 105배가 되었다. 모든 방법이 총량은 정확히 보존한다(7절의 유한 체적 구조). 보존이 정확성을 보장하지는 않는다.
풍상과 랙스–프리드리히스는 모서리를 둥글게 뭉갰지만 새 최댓값·최솟값을 만들지 않았다(단조). 랙스–벤드로프는 오차가 가장 작지만 0과 1 밖으로 16%씩 넘친다. 농도가 음수가 되는 것이다.
매끄러운 가우스 펄스(폭 0.05)에서는 칸을 두 배씩 늘릴 때 L¹ 오차의 차수가 풍상 0.70 → 0.81 → 0.88(1로 다가감), 랙스–벤드로프 1.65 → 1.92 → 1.99다. 같은 칸 100개에서 풍상은 봉우리를 0.750으로, 랙스–벤드로프는 0.968로 남긴다.
이 딜레마는 우연이 아닙니다. 고두노프(Sergei Godunov)는 새 극값을 만들지 않는(단조) 선형 방법은 많아야 1차 정확이라는 것을 보였습니다. 현대의 고해상도 방법(TVD, 플럭스 제한자, WENO)은 매끄러운 곳에서는 2차 이상, 급한 경사 근처에서는 1차로 바뀌는 비선형 방법으로 이 벽을 넘습니다.
정리 16.9 (CFL 조건) 명시적 차분법이 수렴하려면 수치적 의존 영역이 참 의존 영역을 포함해야 한다. 이웃 한 칸만 쓰는 방법에서 이것은 ∣C∣=∣a∣Δt/Δx≤1이다. 이 조건은 필요조건이며 충분조건이 아니다(중앙 차분 FTCS는 C≤1이어도 불안정하다).
CFL 조건의 의미는 "한 걸음에 정보가 한 칸보다 멀리 가면 안 된다"입니다. 빠른 흐름(a 큼)이나 가는 격자(Δx 작음)는 시간 걸음을 직접 줄입니다. 3차원 CFD 코드가 비싼 이유의 상당 부분이 이것이고, 음적 방법이 여기서도 쓰입니다. 다만 이류에서는 큰 C의 음적 방법이 정확도를 크게 잃으므로, 열 방정식만큼 쉽게 걸음을 키우지는 못합니다.
SIMULATOR
펄스 실어 나르기: 중앙 · 풍상 · 랙스–프리드리히스 · 랙스–벤드로프
방법
처음 모양
참 해중앙풍상랙스–프리드리히스랙스–벤드로프
걸음 · 시각 t (바퀴)—
최대 · 최소—
L¹ 오차—
총량 ∫u dx—
해볼 것: ① 풍상, C = 0.8로 한 바퀴를 돌리면 사각 펄스가 둥근 언덕이 됩니다(수치 확산). C = 1로 하면 모양이 그대로 돌아옵니다. ② 랙스–벤드로프는 모양을 더 잘 지키지만 모서리 뒤에 물결이 생기고 0 아래로 내려갑니다(분산). ③ C를 1.05로 올리면 풍상·랙스–벤드로프도 폭발합니다(CFL). 중앙 차분은 C = 0.3에서도 결국 폭발합니다. 모델: 주기 구간 [0, 1], 칸 100개, a = 1. 값은 화면 밖에서 잘립니다.
파동 방정식: 립프로그와 수치 분산
ODEBook 16장은 파동 방정식 utt=c2uxx의 중앙 차분 uik+1=2uik−uik−1+C2δ2uik와 CFL 조건 C=cΔt/Δx≤1을 보였습니다. 시간과 공간 모두 중앙 차분이라 앞뒤 두 시각을 "뛰어넘는" 꼴이어서 흔히 립프로그(leapfrog) 방법이라 부릅니다. 여기서는 그 다음 질문, 안정한 범위 안에서도 무엇이 틀리는가를 봅니다.
시작에는 두 시각이 필요합니다. u0=f와 ut(x,0)=g에서 테일러 전개로 ui1=ui0+Δtgi+2C2δ2ui0을 만들면 2차 정확도가 유지됩니다. 모드 ujk=ei(ξjΔx−ωkΔt)를 넣으면 수치 분산 관계
sin2ωΔt=Csin2ξΔx
참 관계는 ω=cξ(모든 파장이 같은 속도 c). C≤1이면 우변이 1 이하라 ω가 실수, 곧 진폭이 유지된다(안정, 감쇠 없음). 수치 위상 속도는 ω/ξ이다.
가 나옵니다. 수치 파의 속도 cnum/c=Cθ2arcsin(Csin2θ), θ=ξΔx는 파장에 따라 달라집니다. 계산하면
cnum/c
파장당 10칸 (θ = π/5)
파장당 4칸 (θ = π/2)
파장당 2.2칸 (θ = 0.9π)
C = 0.5
0.98759
0.92021
0.73071
C = 0.9
0.99677
0.97589
0.86060
C = 1
1
1
1
짧은 파장일수록 늦고, C가 작을수록 더 늦습니다. 급한 펄스는 여러 파장의 합이므로, 시간이 지나면 짧은 성분이 뒤처져 펄스 뒤에 잔물결 꼬리가 생깁니다. 이것이 수치 분산(numerical dispersion)입니다. 흥미롭게도 1차원에서는 C=1이 가장 정확하고(격자점에서 정확한 해), 안정 경계에서 가장 정확하다는 것은 다차원에서는 성립하지 않습니다. 지진파·음향 시뮬레이션은 "파장당 몇 칸"을 기준으로 격자를 고르고, 분산을 줄이려고 고차 스텐실을 씁니다.
SIMULATOR
줄 위의 펄스: CFL 수와 수치 분산
립프로그 해(색)와 참 해(검정)
수치 위상 속도 cnum/c vs θ = ξΔx
펄스 폭
걸음 · 시각 t—
최대 |u|—
최대 오차—
파장당 4칸 속도—
해볼 것: ① C = 0.5, 좁은 펄스로 ▶를 누르면 두 갈래로 나뉜 펄스 뒤에 잔물결이 따라옵니다. 짧은 파장이 늦기 때문입니다(아래 그래프). ② C = 1로 하면 꼬리가 사라지고 참 해와 겹칩니다. ③ C = 1.05로 올리면 몇십 걸음 뒤 톱니가 폭발합니다(CFL). 모델: utt = uxx, [0, 1], 칸 200개, 양끝 고정, 처음 속도 0. 참 해는 홀수 주기 확장의 달랑베르 공식.
유한 요소법 입문: 약형식, 모자 함수, 강성 행렬
구멍 뚫린 브래킷의 응력
차분법은 바둑판 격자를 좋아합니다. 그러나 엔진 브래킷, 치아 임플란트, 반도체 패키지는 곡선 경계와 구멍과 서로 다른 재료로 되어 있습니다. 경계에 맞춰 크기가 다른 삼각형으로 영역을 채우고 싶지만, 삼각형 격자에서는 "이웃 값의 차이"를 어떻게 써야 할지 분명하지 않습니다. 미분 대신 적분으로 방정식을 다시 쓰면 길이 열립니다.
−u′′=f, u(0)=u(1)=0에 경계에서 0인 아무 시험 함수 v를 곱해 적분하고 부분 적분하면 경계항이 사라져
∫01u′v′dx=∫01fvdx모든v (v(0)=v(1)=0)에대해.
이를 약형식(weak form)이라 한다. u는 2계 도함수 없이 1계 도함수만 있으면 된다. 구조역학에서는 가상 일의 원리, 에너지로 보면 21∫u′2−∫fu의 최소화와 같다.
유한 요소법(finite element method, FEM)은 u와 v를 유한 차원 공간에서 고릅니다. 가장 단순한 공간은 마디 xi에서 1, 다른 마디에서 0이고 그 사이는 직선인 모자 함수(hat function)φi들로 만든 조각별 선형 함수입니다. uh=∑jUjφj를 넣고 v=φi로 두면(갤러킨 방법)
j∑Kij(∫φi′φj′dx)Uj=Fi∫fφidx,KU=F.
K를 강성 행렬(stiffness matrix), F를 하중 벡터라 한다. 이름은 구조 해석의 스프링 강성에서 왔다. φi′는 이웃 요소에서만 0이 아니므로 K는 희소하다.
그림 16-2. 1차원 모자 함수. 각 φi는 이웃 두 요소에서만 0이 아니다. 요소 하나에서 계산한 2×2 행렬을 두 마디 자리에 더하는 "조립"이 유한 요소 코드의 중심 루프다.
정리 16.10 (갤러킨 최적성) 유한 요소 해 uh는 에너지 노름 ∥w∥E=(∫w′2)1/2에서 조각별 선형 함수 가운데 참 해에 가장 가깝다: ∥u−uh∥E=minvh∥u−vh∥E. 따라서 ∥u−uh∥E=O(h)이고, 최대 오차는 O(h2)이다. 또 1차원의 이 문제에서는 하중을 정확히 적분하면 마디 값 Ui=u(xi)가 정확하다.
증명의 핵심. 약형식에서 갤러킨 식을 빼면 ∫(u−uh)′φi′=0, 곧 오차가 근사 공간에 에너지 내적으로 수직이다(갤러킨 직교성). 7장의 최소제곱에서 잔차가 열공간에 수직인 것과 같은 그림이고, 수직 사영이 최단 거리다. 마디 정확성은 이 문제의 그린 함수가 조각별 선형이라 근사 공간에 들어 있기 때문이다. ∎
예제 16.5 (요소 넷)−u′′=1, n=4 요소, h=1/4.
요소 강성 h1[1−1−11]=[4−4−44]을 네 요소에 대해 조립하고 경계 마디를 지우면 K=8−40−48−40−48, 하중 Fi=h=0.25.
풀면 U=(0.09375,0.125,0.09375). 참 해 u=x(1−x)/2의 마디 값과 정확히 같다.
마디 사이에서는 직선이라 최대 오차는 7.81×10−3(요소 중앙). n=8,16,32에서 최대 오차는 4분의 1씩(2차), 에너지 노름 오차는 7.22×10−2에서 반씩(1차) 준다.
2차원에서는 삼각형 요소 위의 조각별 선형 함수를 쓰고, 요소 강성 행렬은 3×3이 됩니다. 정사각 격자의 직각삼각형으로 라플라스 방정식을 풀면 5점 스텐실과 같은 행렬이 나옵니다. 유한 요소법은 차분법을 포함하면서 임의의 모양과 재료, 고차 요소, 오차 추정에 따른 적응 세분화로 확장됩니다. 구조 해석의 상용 코드, 전자기장 해석, 열 해석 대부분이 이 방법입니다.
SIMULATOR
1차원 FEM: 모자 함수 조립하기
모자 함수 · FEM 해(색) · 참 해(검정)
강성 행렬 K (조립 중: 이번 요소의 칸 강조)
조립한 요소—
마디 최대 오차—
최대 오차 (마디 사이 포함)—
에너지 노름 오차—
해볼 것: ① '요소 하나 조립'을 눌러 요소마다 2×2 블록이 대각선을 따라 더해지는 것을 보세요. 경계 마디의 행·열은 마지막에 지웁니다. ② f = 1에서 마디 오차가 반올림 수준(10⁻¹⁶)인 것을 확인하세요(정리 16.10). 마디 사이 오차는 n을 두 배로 하면 4분의 1입니다. ③ 'f = 5 (패치)'처럼 하중이 불연속이어도 FEM은 하중을 적분해서 쓰므로 문제없이 풉니다. 모델: 조각별 선형 요소, 하중은 요소마다 가우스 구적 5점으로 적분, 선형계는 토머스 알고리즘.
유한 체적법 맛보기: 보존을 정확히
유체의 질량·운동량·에너지, 반도체의 전하는 보존됩니다. 칸의 양이 변하는 것은 칸의 경계를 드나드는 흐름(플럭스) 때문뿐입니다. 보존 법칙 ut+F(u)x=0을 칸 [xj−1/2,xj+1/2]에서 적분하면 칸 평균 uˉj에 대해
dtduˉj=−ΔxFj+1/2−Fj−1/2
Fj+1/2는 칸 경계를 지나는 수치 플럭스. 한 칸이 잃는 양은 이웃 칸이 정확히 얻으므로, 모든 칸을 더하면 내부 플럭스가 소거되어 총량은 반올림 오차까지 정확히 보존된다.
이것이 유한 체적법(finite volume method)의 뼈대입니다. 무엇을 Fj+1/2로 쓰느냐가 방법을 정합니다. 이류 F=au에서 바람이 불어오는 쪽 칸의 값 Fj+1/2=auˉj를 쓰면 정확히 앞 절의 풍상 차분이 되고, 예제 16.4의 표에서 모든 방법의 총량이 0.200000으로 보존된 것도 그 식들이 이런 플럭스 차이 꼴이기 때문입니다. 비선형 보존 법칙(충격파가 생기는 기체 역학)에서는 칸 경계마다 작은 리만 문제를 풀어 플럭스를 정하는 고두노프 계열 방법이 표준이고, 보존형으로 쓰지 않으면 충격파의 속도가 틀리게 나옵니다. 임의의 다각형 칸에서도 경계 면의 플럭스만 계산하면 되므로, 상용·공개 CFD 코드 대부분이 유한 체적법을 씁니다.
응용: 열 해석, 유체, 반도체 소자
전자 기기의 열 해석. 칩과 기판의 온도는 발열원이 있는 열 방정식 ρcut=∇⋅(k∇u)+q를 따릅니다. 재료마다 열전도도 k가 수백 배 다르고 층이 얇아 격자가 매우 불균일하므로 강성이 심합니다. 그래서 BTCS나 CN 같은 음적 시간 진행과, 매 걸음 큰 희소 선형계를 푸는 전처리 켤레 기울기법(13장)의 조합이 표준입니다. 정상 상태만 원하면 2절의 푸아송 문제 하나입니다.
전산 유체 역학. 나비에–스토크스 방정식은 이류(6절)·확산(3절)·압력의 푸아송 방정식(2절)을 모두 품고 있습니다. 많은 코드가 유한 체적법으로 보존을 지키고, 이류 항에는 풍상 계열의 고해상도 방법을, 시간 걸음은 CFL 수로 고르며, 매 걸음 압력의 푸아송 방정식을 다중 격자법으로 풉니다. 수치 확산이 실제 점성보다 커지지 않게 격자를 고르는 것이 결과를 믿기 위한 첫 점검입니다.
반도체 소자 시뮬레이션. 트랜지스터 안의 전위는 전하 밀도를 원천으로 하는 푸아송 방정식을, 전자·정공 농도는 표류–확산 연속 방정식을 따릅니다. 농도가 깊이에 따라 수십 자릿수 변하기 때문에 보통의 중앙 차분은 음의 농도를 만들기 쉽습니다. 1969년 샤르페터와 굼멜(Scharfetter, Gummel)이 제안한 이산화는 칸 사이의 전류를 지수 함수 꼴로 정확히 맞춰 이 문제를 피하며, 오늘날 소자 시뮬레이터의 기본 구성 요소로 알려져 있습니다. 결과 연립방정식은 비선형이라 4장의 뉴턴 방법으로, 그 안의 선형계는 희소 직접법이나 반복법으로 풉니다.
이 책은 한 문장에서 출발했습니다. 컴퓨터는 유한한 수와 유한한 단계로 근사한다. 좋은 수치해석은 오차를 예측하고, 통제하고, 비용과 바꾸는 기술이다. 1장에서 그 "유한한 수"는 0.1 + 0.2가 0.3이 아니게 만드는 기계 엡실론 2−52이었고, 이 장의 마지막에서 "유한한 단계"는 판을 자른 격자와 시간 걸음이었습니다. 무대가 숫자 하나에서 수백만 개의 미지수로 넓어졌을 뿐, 묻는 질문은 같았습니다.
우리는 그 질문을 몇 개의 공통 언어로 다루었습니다. 오차 차수 O(hp)는 보간(5–6장), 미분과 적분(9–10장), ODE와 PDE(11장, 이 장)에서 로그–로그 그래프의 기울기로 되풀이해 나타났습니다. 수렴 차수는 이분법의 1차, 뉴턴의 2차, 할선법의 1.618(3–4장)에서 시작해 반복 해법과 최적화의 수렴률 (κ−1)/(κ+1)과 κ 가속(13장, 15장)으로 이어졌습니다. 조건수는 2장에서 문제의 민감도로 등장해 연립방정식의 오차 한계(12장), 최소제곱의 QR(7장), 경사 하강의 지그재그(15장), 격자를 줄일수록 나빠지는 푸아송 행렬(이 장)까지 따라왔습니다. 그리고 안정성은 2장의 점화식과 근의 공식에서 11장의 안정성 영역, 이 장의 증폭 인자와 랙스 동등성 정리까지, "작은 오차가 자라지 않는가"라는 한 질문의 여러 얼굴이었습니다.
여기서 길은 여러 갈래로 이어집니다. 다차원 유한 요소법과 적응 격자, 비선형 보존 법칙과 충격파, 확률 미분방정식과 몬테카를로, 큰 규모의 병렬 계산과 혼합 정밀도, 그리고 데이터로 학습한 모델과 물리 방정식을 결합하는 계산이 모두 이 책의 질문을 다시 묻습니다. 새로운 알고리즘을 만나면 먼저 물어보세요. 오차는 얼마나 빨리 줄어드는가, 작은 오차가 자라지는 않는가, 그 정확도에 얼마를 내는가. 세 질문에 숫자로 답할 수 있으면, 그 계산을 믿어도 됩니다.
핵심 정리
중앙 차분 δ2u/h2=u′′+12h2u′′′′은 2차 정확하다. 격자를 두 배로 하면 오차가 4분의 1이 되는지 보는 격자 수렴 실험이 PDE 코드 검증의 기본이다.
5점 스텐실은 n2×n2 블록 삼중대각 희소 행렬을 만든다. 이산 최대 원리가 성립하고, 조건수가 h−2에 비례해 야코비는 N2, 최적 SOR은 N에 비례하는 반복이 든다. 다중 격자는 격자와 무관한 반복 수를 낸다.
열 방정식의 선의 방법은 강성 ODE다. FTCS(전진 오일러)는 r≤1/2, BTCS(후진 오일러)와 크랭크–니콜슨(사다리꼴)은 무조건 안정이고 1차원에서 한 걸음 O(n)(토머스). CN은 2차지만 큰 r에서 높은 모드가 G→−1로 진동한다.