1부의 앞 열한 장은 전부 닫힌 해를 찾는 이야기였다. 적분을 손으로 하고, 급수를 전개하고,
변수를 분리해 고유함수를 얻었다. 그런데 반도체 소자 하나를 앞에 놓으면 그 방법이 거의 다
막힌다. 도핑이 위치마다 다르고, 이동도가 전기장에 따라 변하고, 캐리어 농도가 퍼텐셜의
지수함수라서, 푸아송 방정식 하나조차 닫힌 해가 없다. 그 자리에서 쓰는 것이 이 장이다.
수치해석이 하는 일은 딱 하나다 — 연속을 이산으로 바꾸고, 그때 무엇을 잃는지 잰다.
함수를 점 몇 개로, 미분을 차분으로, 적분을 합으로, 무한 반복을 유한 반복으로 바꾼다. 바꾸는
것 자체는 쉽다. 어려운 것은 바꾼 뒤에 남는 두 질문이다.
얼마나 틀리는가. 이산화가 만든 오차(절단 오차)와 컴퓨터가 만든 오차(반올림 오차)가
따로 있고, 둘은 반대 방향으로 움직인다. 한쪽을 줄이면 다른 쪽이 커진다.
믿어도 되는가. 답이 나왔다고 해서 맞는 답이 아니다. 반복이 엉뚱한 곳으로 수렴하거나,
시간 전진이 폭발하거나, 조건이 나쁜 문제라 입력의 미세한 흔들림이 답을 통째로 바꿀 수 있다.
이 장의 열네 절은 모두 이 두 질문의 변주다. 1절에서 오차의 종류를 나눈 뒤, 2절부터 9절까지는
정적인 문제 — 방정식 풀기, 함수 근사, 적분, 선형계, 고유값 — 를, 10절부터 12절까지는
시간이 흐르는 문제 — ODE와 PDE — 를 다룬다. 13절은 소자·전자기 시뮬레이터가 실제로 쓰는
두 이산화 방식(유한요소법·모멘트법)의 뼈대이고, 14절은 “가장 좋은 파라미터를 찾는” 최적화다.
이 장이 반도체 어디로 이어지는지 미리 적어 둔다. 소자 시뮬레이터(TCAD)는 푸아송·연속
방정식을 격자에서 이산화하고(11·12절) 뉴턴법으로 비선형계를 풀며(2절) 그때 나오는 희소
선형계를 LU나 반복법으로 처리한다(5·6절). 회로 시뮬레이터(SPICE)는 강성 ODE를 암시적으로
적분하고(10절), 소자 모델의 파라미터는 최소제곱으로 추출하며(8절·14절), 밴드 구조는 큰
에르미트 행렬의 고유값을 반복법으로 구한다(9절). 공정 시뮬레이션의 확산은 포물형 PDE(12절),
배선 기생 커패시턴스는 모멘트법(13절), 기계적 응력은 유한요소법(13절)이다. 뒤의 장들이
“수치적으로 푼다”고 한 줄로 넘기는 자리마다 이 장의 절 하나가 들어 있다.
컴퓨터는 실수를 가수 × 밑의 거듭제곱 꼴로 저장한다. Kreyszig의 표기로 십진 t자리
부동소수점 수는
a~=±0.d1d2⋯dt×10e,d1=0
이다. d1=0이 정규화 조건이다 — 앞자리에 0을 낭비하지 않는다. 실제 컴퓨터는
밑이 2이고, 표준(IEEE 754) 배정도(double)에서는 가수가 53비트, 지수가 11비트다. 십진으로
옮기면 유효숫자 약 16자리, 크기 범위 약 10−308에서 10308이다.
실수 a를 가장 가까운 부동소수점 수 fl(a)로 반올림하면, 상대 오차는 한 값을 넘지
않는다.
fl(a)=a(1+δ),∣δ∣≤u
u를 반올림 단위(rounding unit, 단위 반올림 오차)라 한다. 십진 t자리에서는
u=21×101−t, 배정도에서는 u=2−53≈1.1×10−16이다.
1 다음의 부동소수점 수까지의 간격 2−52를 머신 엡실론이라 부르는데, u의 두 배다.
책과 라이브러리에 따라 둘 중 아무거나 “엡실론”이라 부르므로 2배 차이는 신경 쓰지 않아도
되지만, 이 절에서는 Kreyszig를 따라 u를 쓴다.
테일러 전개 f(x+h)=f(x)+hf′(x)+21h2f′′(ξ)를 넣으면 절단 오차는
21hf′′(ξ), 즉 h에 비례한다. 한편 분자의 두 함수값에는 각각 ∣f∣u
급의 반올림 오차가 있고, 그것이 h로 나뉘므로 반올림 오차는 u/h에 비례한다.
∣εtotal∣≲절단21h∣f′′∣+반올림h2u∣f∣
첫 항은 h를 줄이면 줄고, 둘째 항은 h를 줄이면 는다. 합이 최소가 되는 곳은
hopt∼u≈10−8이고, 그때 오차도 u≈10−8
수준이다. 배정도로 계산해도 도함수는 여덟 자리밖에 못 얻는다.
그림 1.12-1. 전진 차분으로 f′(x)를 구할 때의 오차를 걸음 폭 h에 대해 양대수 축에 그린 것. 오른쪽에서 왼쪽으로 h를 줄이면 절단 오차(기울기 +1인 직선)는 줄지만 반올림 오차(기울기 −1인 직선)가 늘어, 총오차는 두 직선이 만나는 h ≈ √u ≈ 10⁻⁸ 근처에서 바닥을 찍고 다시 올라간다. 바닥의 높이가 곧 그 방법으로 얻을 수 있는 최선의 정밀도다. 중심 차분처럼 절단 오차의 차수가 높으면 왼쪽 직선이 가팔라져 바닥이 더 낮고 더 오른쪽으로 온다.직접 작도
같은 문제를 푸는 두 알고리즘이 반올림 오차에 다르게 반응할 수 있다. 오차가 단계마다 일정
비율로 줄거나 그대로면 안정, 단계마다 불어나면 불안정하다. 앞의 이차방정식에서 근의
공식 그대로가 불안정한 알고리즘이었고, x2=c/x1이 안정한 알고리즘이었다.
그런데 알고리즘을 아무리 잘 짜도 안 되는 문제가 있다. 입력이 10−16만 흔들려도 답이
10−6만큼 바뀌는 문제라면, 어떤 알고리즘도 여섯 자리 이상은 못 준다. 이것은 알고리즘이
아니라 문제 자체의 성질이고, 7절에서 조건수라는 이름으로 정량화한다. 두 개념을 나눠
두자 —
조건(conditioning)은 문제의 성질. 입력의 작은 변화에 답이 얼마나 민감한가.
안정성(stability)은 알고리즘의 성질. 계산 중에 생긴 오차를 얼마나 키우는가.
안정한 알고리즘으로 조건이 좋은 문제를 풀 때만 정확한 답이 나온다. 하나라도 빠지면 답의
자릿수가 깎인다.
f(x)=0을 푸는 일은 수치해석의 첫 문제이면서 가장 자주 만나는 문제다. 대수 방정식은
5차부터 근의 공식이 없고, x=cosx 같은 초월 방정식은 처음부터 닫힌 해가 없다. 그래서
답을 한 번에 구하는 대신, 대충 찍은 뒤 고쳐 나간다. 이것이 반복법(iteration)이고,
이 장의 6절·9절·10절·14절이 전부 같은 뼈대다.
반도체에서는 페르미 준위를 구하는 전하 중립 조건 n(EF)−p(EF)+NA−−ND+=0이
초월 방정식이고, 푸아송 방정식의 우변 ni(eψ/VT−e−ψ/VT)가 미지수의
지수함수라 방정식 전체가 비선형이다. 문턱전압 아래의 반전층 전하, 이종접합의 밴드 정렬,
쇼트키 접합의 영상 전하 — 어디를 봐도 f(x)=0이 있다.
f(xn)과 f′(xn)을 알면, xn에서 곡선을 접선으로 바꿔 놓고 접선이 축과 만나는 곳을
다음 근사로 삼는다.
xn+1=xn−f′(xn)f(xn)
같은 식을 테일러 전개로도 얻는다. 0=f(s)=f(xn)+(s−xn)f′(xn)+⋯에서 2차
이상을 버리고 s에 대해 풀면 위 식이다. 접선은 1차 테일러 다항식이니 같은 말이다.
그림 1.12-2. 뉴턴법의 한 걸음. 현재 위치 xₙ에서 곡선 f(x)에 접선을 긋고, 접선이 가로축을 지나는 자리를 xₙ₊₁로 삼는다. 접선의 기울기가 f′(xₙ)이므로 가로축까지의 거리는 f(xₙ)/f′(xₙ)이다. 근 근처에서 곡선이 접선과 거의 같아지므로 두세 걸음이면 붙지만, 오른쪽처럼 f′ ≈ 0인 평평한 자리에서 출발하면 접선이 축과 아주 먼 곳에서 만나 엉뚱한 곳으로 튀어 나간다.직접 작도
예 — 제곱근.f(x)=x2−a이면
xn+1=xn−2xnxn2−a=21(xn+xna)
바빌로니아 사람들이 알던 공식이다. a=2, x0=1에서 시작하면
1.5,1.41667,1.41422,1.41421356… — 네 번째에서 이미 열 자리가 맞는다.
이것이 뉴턴법의 특징인 2차 수렴이다. g(x)=x−f(x)/f′(x)로 놓고 미분하면
g′(x)=ff′′/f′2이므로 근 s에서 g′(s)=0이다. 앞의 정리에서 K가 0으로 내려앉는
경우이고, 2차 항까지 전개하면
εn+1≈−2f′(s)f′′(s)εn2
오차가 제곱으로 준다. 오차 10−2가 다음에 10−4, 그다음 10−8, 10−16 —
반복마다 맞는 자릿수가 두 배가 된다. 배정도의 16자리는 네다섯 번이면 끝난다.
뉴턴법은 근 가까이에서만 2차 수렴한다. 멀리서 시작하면 다음 셋 중 하나가 흔히 일어난다.
평평한 곳에서 출발.f′(xn)≈0이면 나눗셈이 큰 값을 만들어 멀리 튄다. 그림의
오른쪽 경우다. tan−1x=0을 x0=1.5에서 시작하면 발산한다.
순환.x0→x1→x0처럼 두 점 사이를 오간다. x3−2x+2=0을 x0=0에서
시작하면 0과 1을 영원히 오간다.
중근.f(s)=0이면서 f′(s)=0인 경우(예: (x−1)2). 수렴은 하지만
εn+1≈21εn — 선형 수렴으로 떨어진다. 중복도가 m이면
xn+1=xn−mf/f′로 고쳐 2차를 되찾을 수 있다.
실용적인 처방은 두 가지다. 첫째, 이분법(bisection)으로 먼저 근을 가둔다. f(a)f(b)<0인
구간의 중점을 취해 부호가 바뀌는 쪽 절반을 남기는 방법으로, 한 번에 자릿수 하나 얻기도
어려울 만큼 느리지만(오차가 매번 정확히 절반) 절대 실패하지 않는다. 둘째, 감쇠
(damping). 뉴턴 걸음 Δx=−f/f′를 그대로 밟지 않고 ∣f∣가 줄어들 때까지
Δx/2,Δx/4,…로 줄여 밟는다.
나눗셈 f/f′가 선형계 풀이 J−1F로 바뀐다. 뉴턴 한 걸음마다 N×N
선형계를 하나씩 풀어야 하고, 그 선형계를 어떻게 푸는가가 5·6절이다. 수렴 성질은 스칼라와
같다 — 해 근처에서 2차, 멀리서는 감쇠 필요.
세 방정식을 한꺼번에 푸는 대신 번갈아 풀 수도 있다. 푸아송을 n,p 고정으로 풀어 ψ를
얻고, 그 ψ로 두 연속 방정식을 풀어 n,p를 갱신하고, 다시 푸아송으로 — 이것이
검멜 반복(Gummel iteration)이다. 야코비 행렬의 비대각 블록을 버린 셈이라 한 걸음이 싸지만
수렴은 선형이고, 결합이 강하면 발산한다. 시뮬레이터가 낮은 바이어스에서 검멜로 시작해
결합 뉴턴으로 넘어가는 것이 이 때문이다. 6절에서 이 “번갈아 풀기”를 선형계 위에서 다시 만난다.
측정값은 언제나 점이다. SIMS로 잰 도핑 프로파일은 깊이 200군데의 농도이고, 이동도 모델은
온도·도핑 몇 조합에서의 표 값이며, 소자 모델의 표 기반(table-based) 모델은 I–V 격자점의
전류다. 그 사이의 값이 필요할 때 점들을 잇는 함수를 만드는 일이 보간(interpolation)이다.
점 사이를 채우면 보간, 점 범위 밖으로 나가면 외삽(extrapolation)이고, 뒤의 것은 훨씬
위험하다.
n+1개의 점 (x0,f0),…,(xn,fn)이 주어졌다고 하자(xj는 서로 다르다).
차수가 n 이하인 다항식 중 이 점을 전부 지나는 것은 정확히 하나 있다. 있다는 것은
아래 라그랑주 공식이 직접 보여 주고, 하나뿐이라는 것은 두 개가 있다면 그 차가 n차 이하이면서
근을 n+1개 가지므로 영다항식이어야 한다는 데서 나온다.
여기서 ξ는 x와 마디들을 포함하는 구간 안의 어딘가다. 정확한 위치는 모르고, 그래서
쓸 때는 ∣f(n+1)∣의 최댓값으로 갈음한다. 이 식은 테일러 정리의 나머지항과 꼭
닮았다 — 실제로 마디를 전부 한 점으로 모으면 테일러 나머지항이 된다(1.5.3함수의 급수 전개와 근사의 정확도).
두 인자를 따로 읽는다.
f(n+1)(ξ) — 함수의 성질. 함수가 매끄러울수록 작다. ex는 모든 도함수가 ex라
얌전하고, 1/(1+25x2)는 고계 도함수가 n!처럼 자라 사납다.
∏(x−xj) — 마디의 배치. 마디 근처에서는 0에 가깝고, 마디 사이 한가운데에서
크며, 양 끝 구간에서 가장 크다. 마디 밖(외삽)으로 나가면 다항식처럼 빠르게 커진다.
균등 마디에서 두 번째 인자의 크기를 h로 적으면 ∣∏(x−xj)∣≤ 대략
n!hn+1/4 수준이므로, 오차는 hn+1에 비례한다. 선형 보간(n=1)이면 h2 —
마디 간격을 절반으로 줄이면 오차가 4분의 1이다.
테일러 급수의 이산판이다. (x−x0)k 자리에 (x−x0)⋯(x−xk−1)이,
f(k)/k! 자리에 k차 분할 차분이 들어갔다. 마디를 하나 더 넣으면 항 하나만 뒤에 붙는다.
계산은 표로 한다 — 첫 열에 fj, 둘째 열에 인접 1차 차분, 셋째 열에 인접 2차 차분 … 표의
맨 윗줄이 그대로 계수다.
마디가 균등(xj=x0+jh)하면 분할 차분의 분모가 상수가 되어 전진 차분Δfj=fj+1−fj, Δ2fj=Δfj+1−Δfj로 간단해진다.
r=(x−x0)/h로 놓으면 Newton 전진 공식은
오차 공식대로면 마디를 늘릴수록 hn+1이 작아져 좋아질 것 같다. 그렇지 않다.f(x)=1/(1+25x2)를 [−1,1]의 균등 마디로 보간하면 n을 올릴수록 양 끝에서 진동이
커져 발산한다. 오차 공식의 첫 인자 f(n+1)이 n!보다 빨리 자라기 때문이다.
그림 1.12-3. f(x) = 1/(1 + 25x²)를 [−1, 1]에서 보간한 것. 균등한 11개 마디로 10차 다항식을 지나게 하면 가운데는 잘 맞지만 양 끝 구간에서 크게 출렁인다(룽게 현상). 같은 함수를 같은 마디로 3차 스플라인으로 이으면 출렁임이 없다. 문제는 점의 수가 아니라 '한 다항식으로 전부를 맞추려는' 데 있다 — 한 곳의 정보가 다항식을 통해 멀리까지 전달되기 때문이다.직접 작도
한 다항식으로 전부를 맞추는 대신, 마디 사이마다 3차 다항식을 두고 마디에서 매끄럽게
잇는다. 제도사가 가는 자(spline)를 못에 걸어 휘어 곡선을 그리던 도구에서 온 이름이다.
정의. 마디 x0<x1<⋯<xn에 대해 함수 g(x)가 3차 스플라인이라 함은
① 각 구간 [xj,xj+1]에서 3차 다항식이고, ② 전체에서 g,g′,g′′이 연속이며,
③ g(xj)=fj인 것이다.
미지수를 세어 보자. 구간 n개 × 계수 4 = 4n. 조건은 마디값 2n(각 구간 양 끝), 안쪽 마디
n−1개에서 g′ 연속과 g′′ 연속 2(n−1). 합이 4n−2이니 둘이 모자란다. 양 끝에서
조건 두 개를 더 주어야 하고, 그 선택이 스플라인의 종류다.
고정(clamped) 스플라인 — 양 끝의 기울기 g′(x0)=k0, g′(xn)=kn을 지정.
Kreyszig의 기본 형태다.
자연(natural) 스플라인 — 양 끝에서 g′′=0. 끝 너머로 직선처럼 나간다. 끝 기울기를
모를 때의 표준.
Kreyszig는 각 마디의 기울기 kj=g′(xj)를 미지수로 잡는다. 구간마다 양 끝의 값과
기울기로 3차식이 하나로 정해지므로(에르미트 보간), 남는 조건은 g′′의 연속뿐이고, 마디
간격이 균등(h)하면 그것이
kj−1+4kj+kj+1=h3(fj+1−fj−1),j=1,…,n−1
이다. 미지수 k1,…,kn−1에 대한 삼중대각 선형계다 — 한 줄에 미지수가 셋뿐이라
5절의 토머스 알고리즘으로 O(n)에 풀린다. 우변은 중심 차분 (fj+1−fj−1)/2h의 6배,
즉 “기울기의 가중 평균이 중심 차분과 같다”는 조건이다. 대각 성분 4가 비대각 1 + 1보다 크므로
6절의 대각 우세 조건이 자동으로 성립해 언제나 풀린다.
h2 차수. 기울기 부호는 위로 볼록한 함수(f′′<0)에서 사다리꼴이 곡선 아래를 과소평가
한다는 그림과 맞는다.
각 조각 두 개(마디 셋)를 포물선으로 잇는 것이 심프슨 공식이다. n은 짝수여야 한다.
J≈3h[f0+4f1+2f2+4f3+⋯+2fn−2+4fn−1+fn]
1,4,2,4,…,4,1의 가중치는 포물선 조각 하나의 적분
3h(f0+4f1+f2)을 이어 붙인 결과다. 오차는
εSimp=−180b−ah4f(4)(ξ)
포물선(2차) 보간이니 h3을 기대할 텐데 **h4**다. 포물선 조각의 대칭 때문에 3차 항의
오차가 저절로 사라지기 때문이다 — 심프슨 공식은 3차 다항식까지 정확히 적분한다. 같은
h에서 사다리꼴보다 h2배 좋고, 1절의 V자 그림에서 왼쪽 직선이 기울기 2에서 4로 가팔라진
것이다.
오차의 차수를 안다는 것은 오차를 빼낼 수 있다는 뜻이다. 사다리꼴 근사를 걸음 h와
h/2로 두 번 계산해 Jh,Jh/2를 얻었다면, 오차가 Ch2 꼴이므로
J−Jh≈Ch2,J−Jh/2≈41Ch2⟹J≈Jh/2+3Jh/2−Jh
두 근사를 조합해 h2 오차를 없앴다. 이것이 리처드슨 외삽이고, 결과는 정확히 심프슨
공식과 같다. 같은 요령을 되풀이해 h4,h6,… 오차를 차례로 없애는 것이 롬베르크
적분이다. 사다리꼴 값을 h,h/2,h/4,…로 표의 첫 열에 적고, 이웃 열을 조합해
다음 열을 만든다.
Tm,k=Tm,k−1+4k−1Tm,k−1−Tm−1,k−1
표의 대각선이 빠르게 수렴한다. “오차의 차수를 알면 그 차수를 없앨 수 있다”는 원리는 10절의
걸음 폭 조절(RKF)과 11절의 격자 수렴 검사에서 다시 쓴다.
지금까지는 마디를 균등하게 미리 정해 놓고 가중치만 골랐다. 마디도 자유롭게 고르면
미지수가 두 배(n개 마디 + n개 가중치 = 2n)이므로, 2n−1차 다항식까지 정확히 적분하는
공식을 만들 수 있다. 그 최적 마디가 르장드르 다항식 Pn의 영점이고(1.5.6르장드르 방정식과 르장드르 다항식),
그 공식이 가우스 구적법(가우스–르장드르)이다.
∫−11f(t)dt≈j=1∑nAjf(tj),Pn(tj)=0
n=2이면 tj=±1/3, Aj=1 — 함수값 두 개로 3차 다항식까지 정확하다.
심프슨은 세 개로 3차이니, 같은 정확도를 값 하나 덜 쓰고 얻는다. n=5면 값 다섯 개로 9차.
일반 구간 [a,b]는 x=21(a+b)+21(b−a)t로 옮긴다.
왜 르장드르인가. 오차는 f를 2n−1차 다항식 q와 나머지로 쪼개서 보면
∫f−∑Ajf(tj)=∫(f−q) 꼴이 되고, f−q가 마디에서 0이 되게 하면 그것은
∏(t−tj)×(저차다항식)이다. ∏(t−tj)가 n차 이하의 모든
다항식과 직교하면 이 적분이 사라진다 — 그 직교 다항식이 Pn이다. 1.6의 직교 함수계가
적분 공식으로 다시 나온 것이다.
함수가 어떤 곳에서는 급하고 어떤 곳에서는 완만하면 균등 마디는 낭비다. 각 구간에서 오차를
추정해(예: 심프슨을 h와 h/2로 두 번) 허용치보다 크면 그 구간만 반으로 나누는 것이
적응 적분이다. 재귀적으로 진행되어 급한 곳에 마디가 저절로 몰린다. 라이브러리의 quad
류 함수가 이것이고, 오차 허용치를 인자로 받는 이유가 이 추정 때문이다.
이 장의 절반은 결국 Ax=b로 끝난다. 2절의 뉴턴 걸음, 3절의 스플라인,
8절의 정규방정식, 11절의 차분 방정식, 13절의 유한요소 방정식이 전부 선형계이고, 그것을
얼마나 빨리 정확히 푸는가가 시뮬레이션의 속도를 정한다. 1.2에서 가우스 소거를 개념으로
봤다면(1.2.2가우스 소거와 선형계의 해), 여기서는 알고리즘으로 본다 — 몇 번 계산하고, 어디서
오차가 생기며, 어떻게 재활용하는가.
앞선 소거로 A를 상삼각으로 만든 뒤 후진 대입한다. 연산 횟수를 세 보면, k번째 열을
소거할 때 아래 (n−k)개 행 각각에 (n−k)개 성분을 갱신하므로
k=1∑n−1(n−k)2≈3n3(곱셈⋅덧셈각각),후진대입≈2n2
소거가 n3, 대입이 n2.n이 두 배가 되면 시간이 여덟 배다. 크래머 공식이 n!이니
비교가 안 되고, 역행렬을 구해 곱하는 것은 소거의 세 배라 역행렬을 구하는 것은 언제나
손해다(1.2.4역행렬). n=104이면 1012번 — 초 단위, n=106이면
1018번 — 불가능. 소자 시뮬레이션의 n이 그 사이에 있고, 그래서 아래의 희소성이 없으면
아무것도 못 푼다.
을 풀어 보자(Kreyszig의 예). 첫 행을 피벗으로 쓰면 곱수가 0.4003/0.0004≈1001이고,
둘째 행은 −1.502−1001×1.402=−1405가 되어 원래의 −1.502가 자릿수 밖으로
밀려난다. 결과 x2=1.002, x1=−2.500 — 참값 x2=1, x1=10과 딴판이다.
두 행을 바꿔 0.4003을 피벗으로 쓰면 곱수가 0.001이 되어 정확히 x1=10.00, x2=1.000이
나온다.
부분 피벗팅은 매 단계에서 그 열의 남은 성분 중 절댓값이 가장 큰 것을 피벗으로 올리는
규칙이다. 곱수가 언제나 1 이하가 되어, 소거 과정에서 성분이 폭발적으로 자라는 일을 막는다.
행렬이 대각 우세이거나 대칭 양의 정부호이면 피벗팅 없이도 안전하다는 것이 알려져 있고, 그
경우가 아니면 언제나 켠다.
L은 곱수를 아래에 채운 단위 하삼각(대각이 1), U는 소거가 끝난 상삼각이다. 이렇게 대각을
L 쪽에서 1로 고정한 것이 둘리틀(Doolittle) 분해, U 쪽에서 1로 고정하면 크라우트
(Crout) 분해다. 둘은 대각행렬 하나 차이라 본질이 같다.
분해가 있으면 Ax=b는 두 번의 삼각계로 쪼개진다.
Ly=b(전진대입),Ux=y(후진대입)
각각 n2/2이므로 **한 번 분해해 두면 우변마다 n2**이다. 우변이 여러 개인 문제 — 같은
구조에 바이어스만 바꾸는 소자 시뮬레이션, 같은 회로에 입력만 바꾸는 과도 해석, 역행렬의
열을 하나씩 구하는 일 — 에서 이것이 n3과 n2의 차이다. 회로 시뮬레이터가 한 시간
걸음의 뉴턴 반복 안에서 야코비 행렬이 크게 변하지 않으면 분해를 재활용하는 것도 같은
이유다(수정 뉴턴법).
행렬식도 공짜다. detA=detLdetU=u11u22⋯unn — 피벗의 곱이고, 행
교환마다 부호가 바뀐다. 피벗 중 하나가 0에 가까우면 그 행렬이 특이에 가깝다는 경고다.
절반의 저장 공간과 절반의 연산(n3/6)으로 끝나고, 피벗팅이 필요 없다 — 제곱근 안이
언제나 양수라는 것이 양의 정부호의 정의이고, 그래서 성분이 자라지 않는다. 제곱근 안이 음수가
되면 그 행렬은 양의 정부호가 아니라는 판정이 되기도 한다. 13절의 유한요소 강성 행렬, 8절의
정규방정식 ATA, 11절의 (부호를 바꾼) 이산 라플라시안이 전부 이 부류라 콜레스키가
기본 도구다.
한 번 전진해서 cj′,dj′를 만들고 한 번 후진해서 xj=dj′−cj′xj+1로 푼다.
일반적으로 대각에서 거리 w 안에만 성분이 있으면(띠 폭w) 소거 비용이 nw2이다.
2차원 N×N 격자를 행 순서로 번호 매기면 n=N2, w=N이므로 비용은 N4=n2;
3차원은 n=N3, w=N2이라 N7=n7/3이다. 차원이 오를수록 직접법의 상대적 비용이
급히 커지는데, 6절의 반복법이 필요한 자리가 정확히 여기다.
5절의 직접법은 유한 번의 연산으로 (반올림을 빼면) 정확한 답을 준다. 그런데 3차원 소자를
100×100×100 격자로 이산화하면 미지수가 106개이고, 띠 폭이 104라
직접법의 비용 nw2=1014은 감당이 안 된다. 반면 행렬–벡터 곱 Ax는 0이 아닌
성분 수만큼, 즉 7×106번이면 된다. 행렬–벡터 곱만으로 답에 다가가는 방법이
반복법이고, 반복 횟수가 108번보다 훨씬 적으면 이긴다.
N=100이면 ρJ≈0.9995 — 자릿수 하나에 4700번, 여섯 자리에 3만 번이다.
가우스–자이델은 ρGS=ρJ2이라 절반, 그래도 만 번이 넘는다. 게다가 N을 두 배로
하면 ρ가 1에 네 배 가까워져 반복 횟수가 네 배가 되고, 한 바퀴 비용도 네 배이니 전체가
열여섯 배다.
그림 1.12-4. 같은 라플라스 문제에 대한 세 반복법의 오차를 반복 횟수에 대해 반대수 축에 그린 것. 직선의 기울기가 log ρ(C)이므로 기울기가 가파를수록 빠르다. 가우스–자이델은 야코비의 정확히 두 배 기울기(ρ_GS = ρ_J²)이고, 최적 과완화(SOR)는 격자가 커질수록 두 방법과의 격차가 벌어져 반복 횟수가 N²이 아니라 N에 비례한다. 오차가 곧장 직선을 타지 않고 처음 몇 번 빨리 떨어지는 것은 고주파 오차 성분이 먼저 사라지는 구간이다.직접 작도
ω=1이면 가우스–자이델이고, ω>1이 연속 과완화(SOR, successive
over-relaxation)다. ω≥2면 발산한다. 최적 ω는 야코비의 스펙트럼 반지름으로
정해진다.
ωopt=1+1−ρJ22,ρSOR=ωopt−1≈1−N2π
1−π2/2N2이 1−2π/N으로 — 1에서의 거리가 N2 급에서 N 급으로 좋아졌다.
N=100이면 ρSOR≈0.94, 자릿수 하나에 37번이다. 가우스–자이델의
4700번에 비하면 백 배가 넘는다. 단 ω가 최적에서 조금만 벗어나도 이득이 급히 줄고,
최적값은 문제마다 다르므로 실제로는 ρJ를 추정해 가며 맞춘다.
야코비·가우스–자이델·SOR은 고정 반복이다 — 매번 같은 C를 곱한다. 현대의 반복법은
다르게 간다. 지금까지 만든 벡터들 r,Ar,A2r,…이 펼치는
공간(크릴로프 부분공간) 안에서 가장 좋은 근사를 매번 고른다.
켤레 기울기법(CG) — A가 대칭 양의 정부호일 때. 잔차가 서로 A-직교가 되게 방향을
고르며, 반복 횟수가 κ(A)에 비례한다(7절). 라플라시안이면 κ∼N2이라
N번 — SOR과 같은 급이지만 ω 같은 조율 파라미터가 없다. 14절에서 최적화로
다시 나온다.
GMRES · BiCGSTAB — 비대칭 행렬용. 소자 시뮬레이션의 야코비 행렬은 드리프트 항 때문에
비대칭이라 이쪽을 쓴다.
어느 방법이든 성패는 전처리(preconditioning)에 달려 있다. Ax=b 대신
M−1Ax=M−1b를 풀되, M은 A와 비슷하면서 풀기 쉬운 행렬로 잡는다
(불완전 LU, 야코비의 대각, 다중 격자 한 바퀴). M−1A의 고유값이 1 근처로 뭉치면 반복이
몇 십 번에 끝난다. 시뮬레이터 설정의 ILU, AMG 같은 항목이 이 M의 선택이다.
∥⋅∥1은 성분의 합(택시 거리), ∥⋅∥2는 유클리드 길이,
∥⋅∥∞는 가장 큰 성분이다. 어느 것을 써도 “0에 간다”는 결론은 같다 —
유한 차원에서는 상수배 안에서 서로 갈음되기 때문이다(∥x∥∞≤∥x∥2≤n∥x∥∞). 다만 값과 편의가
다르다. ∞-노름은 계산이 가장 싸고 “최악의 성분”을 말해 주며, 2-노름은 회전에 불변이라
이론에 편하다.
행렬의 노름은 벡터를 얼마나 늘일 수 있는가로 정의한다.
∥A∥=x=0max∥x∥∥Ax∥
벡터 노름마다 하나씩 딸려 나오고(유도 노름), 셋은 닫힌 꼴이 있다.
노름
값
읽는 법
∥A∥1
maxj∑i∣aij∣
열합의 최대
∥A∥∞
maxi∑j∣aij∣
행합의 최대
∥A∥2
ρ(ATA)=σmax
최대 특이값. A 대칭이면 max∣λ∣
∥A∥F
(∑i,jaij2)1/2
프로베니우스. 유도 노름은 아니지만 계산이 쉽다
유도 노름은 정의에서 바로 ∥Ax∥≤∥A∥∥x∥와
∥AB∥≤∥A∥∥B∥를 만족한다. 6절의 수렴 판정
∥C∥<1이 이 부등식이었다. 그리고 어느 노름에서든 ρ(A)≤∥A∥다 —
고유벡터를 넣으면 ∥Ax∥=∣λ∣∥x∥이기
때문이다.
Ax=b에서 우변이 δb만큼 흔들리면 해는 얼마나 흔들리는가.
A(x+δx)=b+δb에서 δx=A−1δb이므로
∥δx∥≤∥A−1∥∥δb∥,∥b∥≤∥A∥∥x∥
두 부등식을 나누면 상대 변화 사이의 관계가 나온다.
∥x∥∥δx∥≤κ(A)∥A∥∥A−1∥∥b∥∥δb∥
κ(A)=∥A∥∥A−1∥가 조건수다. 입력의 상대 오차가 답의
상대 오차로 최대 κ배 증폭된다. A가 δA만큼 흔들릴 때도 1차 근사에서 같은
꼴이다. 언제나 κ≥1이고(∥I∥=1=∥AA−1∥≤κ),
직교행렬은 κ2=1로 최선이다. κ가 크면 불량 조건(ill-conditioned)이라 한다.
그림 1.12-5. 2 × 2 선형계의 두 방정식을 직선으로 그린 것. 왼쪽은 두 직선이 거의 수직이라(조건이 좋다) 한 직선을 조금 옮겨도 교점이 조금만 움직인다. 오른쪽은 두 직선이 거의 평행이라(조건이 나쁘다) 같은 크기로 옮겼는데 교점이 멀리 달아난다. 두 경우 모두 행렬은 정칙이고 가우스 소거는 정상적으로 끝난다 — 조건수는 알고리즘이 아니라 문제의 성질이다.직접 작도
Kreyszig가 드는 표준 예가 힐베르트 행렬hij=1/(i+j−1)이다. 3×3만 해도
κ≈748, 6×6은 107, 10×10은 1013이다. 단항식
1,x,x2,…로 최소제곱 다항식 맞춤을 하면 정규방정식이 정확히 이 꼴이 되므로, 8절에서
말하듯 고차 다항식 맞춤은 단항식 기저로 하면 안 된다.
측정은 언제나 미지수보다 많다. 저항 하나를 재려고 전류 열 점에서 전압을 재면 방정식이 열
개, 미지수는 하나다. Ax=b에서 A가 m×n, m>n이면 일반적으로
해가 없다 — b가 A의 열공간 밖에 있다. 1.2에서 본 대로(1.2.4역행렬)
그때 할 수 있는 최선은 잔차의 길이를 최소로 하는 것이다.
으로 쪼개진다. U(m×m)와 V(n×n)는 직교행렬, σj가 특이값이다.
ATA=VΣ2VT이므로 σj2은 ATA의 고유값,
V의 열은 그 고유벡터다 — 1.3의 대칭 행렬 대각화를 정사각이 아닌 행렬로 확장한 것이다.
SVD가 있으면 최소제곱은 각 특이 방향에서 나눗셈이다.
x=VΣ+UTb=j∑σjujTbvj
Σ+는 0이 아닌 σj를 역수로 바꾼 것이고, 이것이 1.2에서 이름만 나온
유사역행렬A+다. 식이 말해 주는 것이 두 가지다. 첫째, σj가 0이면 그 항을
버린다 — 계수가 모자란 경우에도 노름이 가장 작은 해를 준다. 둘째, σj가 0은
아닌데 아주 작으면 1/σj가 잡음을 폭발시킨다. 그때 그 항을 버리거나(절단 SVD)
σj/(σj2+μ2)로 눌러 주는 것(티호노프 정칙화)이 7절 끝에서 말한 처방이다.
파라미터 추출에서 이것이 뜻하는 바 — 두 파라미터가 데이터에 같은 방향으로만 영향을
주면(예: 이동도와 채널 폭은 선형 영역 전류에 곱으로만 들어간다) 그 조합에 해당하는
σj가 0에 가깝고, 둘을 따로 추출하려는 시도는 잡음을 맞추는 일이 된다. SVD의 작은
특이값에 딸린 vj가 어느 파라미터 조합이 결정되지 않는지를 알려 준다.
잡음의 분산 σi2의 역수가 통계적으로 맞는 가중치다. 앞의 아레니우스 예에서 로그를
취하면 자동으로 wi∝Di2이 되는 셈이고, 그것이 잡음의 성질과 맞는지가 로그 맞춤의
타당성을 정한다. 전류처럼 열 자릿수를 오가는 양을 맞출 때는 로그 잔차나 상대 잔차를 쓰지
않으면 큰 전류만 맞고 서브스레숄드 영역은 전혀 맞지 않는다.
모델이 파라미터에 비선형이면(I=Is(eV/nVT−1)에서 n, 타원계측의 굴절률 모델,
SPICE 모델 파라미터 전부) 정규방정식이 없다. 2절의 뉴턴법을 끌어온다. 잔차 벡터
r(p)=b−f(p)를 현재 파라미터 근처에서
선형화하면 r(p+δ)≈r−Jδ(Jij=∂fi/∂pj)이고,
이것의 최소제곱이
JTJδ=JTr
가우스–뉴턴법이다. 매 걸음이 선형 최소제곱이고, 해 근처에서 거의 2차로 수렴한다.
멀리서는 뉴턴법과 같은 이유로 튀므로 감쇠를 넣는다.
(JTJ+μI)δ=JTr
μ가 크면 δ≈JTr/μ — 14절의 최급강하 방향으로
작은 걸음이고, μ→0이면 가우스–뉴턴이다. 걸음이 잔차를 줄이면 μ를 낮추고, 늘리면
μ를 올린다. 이것이 레벤버그–마쿼트법이고, 곡선 맞춤 라이브러리의 기본 알고리즘이다.
μI가 JTJ의 작은 고유값을 밀어 올려 조건수를 낮추는 정칙화이기도 하다는
점이 7절과 잇는 고리다.
1.3에서 고유값을 det(A−λI)=0의 근으로 정의했고, 손 계산은 그렇게 했다. 컴퓨터는
절대 그렇게 하지 않는다. 이유는 1.3의 1절에서 이미 봤다(1.3.1고유값 방정식과 특성 다항식 —
윌킨슨의 예) — 다항식의 근은 계수에 극도로 예민해서, 계수를 10−10만큼 흔들면 근이
10−1만큼 움직인다. 특성 다항식의 계수를 계산하는 과정에서 반올림이 반드시 들어가므로,
얻은 근은 원래 행렬의 고유값과 무관해진다.
그래서 수치 고유값 계산은 행렬에서 다항식을 거치지 않고 행렬을 직접 변형해 간다. 크게 두
부류다 — 고유값 하나(또는 몇 개)를 반복으로 얻는 멱승법 계열과, 전부를 닮음 변환으로
얻는 QR 계열.
의 합집합 안에 있다(게르슈고린 정리). 증명은 한 줄이다 — 고유벡터의 가장 큰 성분을
xj라 하고 j번째 방정식 ∑kajkxk=λxj를 (λ−ajj)xj=∑k=jajkxk로
정리한 뒤 ∣xj∣로 나누면 우변이 원판의 반지름 이하다.
대각 성분을 중심으로, 그 행의 비대각 절댓값 합을 반지름으로 하는 원판이다. 비대각이 작으면
고유값은 대각 성분 근처에 있고, 대각 우세면 원판이 원점을 포함하지 않아 행렬이 정칙이다 —
6절의 대각 우세 수렴 판정이 이 정리의 따름이다. 반복법의 초기값과 아래 QR의 이동량(shift)을
고를 때 쓴다.
∣λ1∣>∣λ2∣≥⋯이면 대괄호 안의 둘째 항부터 전부
0으로 가고, 절댓값이 가장 큰 고유값의 고유벡터만 남는다. 매번 노름으로 나눠 크기를 1로
유지하면 그것이 멱승법이다. 수렴 속도는 ∣λ2/λ1∣m — 두 고유값의
비가 수렴의 전부다. 비가 0.5면 빠르고, 0.99면 6절의 야코비 반복만큼 느리다.
A 대신 (A−σI)−1에 멱승법을 쓴다. 이 행렬의 고유값은 1/(λj−σ)이므로
σ에 가장 가까운λj가 지배적이 되고, 수렴비는
∣λj−σ∣/∣λk−σ∣(λk는 둘째로 가까운 것)다.
σ를 목표 고유값 가까이 잡으면 이 비가 0에 가까워 두세 번에 끝난다. 역행렬은
구하지 않고, 매 반복 (A−σI)y=x를 5절의 LU로 푼다 — 한 번
분해해 두고 우변만 바꾸는 바로 그 경우다.
σ를 매번 최신 레일리 몫으로 갱신하면 레일리 몫 반복이고, 대칭 행렬에서 수렴이
3차다 — 자릿수가 매번 세 배. 1.3의 7절이 “1.12에서 다룬다”고 미룬 것이 이것이다.
밴드 계산이나 양자우물의 슈뢰딩거 방정식을 이산화하면 n=104에서 107의 희소
행렬이 나오고, 필요한 것은 가장 낮은 몇 개의 고유값뿐이다(페르미 준위 근처의 밴드,
속박 준위 몇 개). 삼중대각화는 채워짐 때문에 못 쓰고, 행렬–벡터 곱만으로 가야 한다.
란초스법이 그 답이다. 멱승법이 마지막 벡터 하나만 남기고 버린 것을, 전부 보관해
정규직교화하면(6절의 크릴로프 부분공간) 그 부분공간에서 A의 표현이 작은 삼중대각
행렬이 되고, 그 고유값이 원래 행렬의 극단 고유값(가장 크고 가장 작은 것)에 빠르게 수렴한다.
m번 곱하면 m×m 삼중대각 — 그것을 위의 QR로 푼다. 비대칭 버전이 아놀디법이고,
6절의 GMRES와 같은 뼈대다. 평면파 밀도범함수 계산이 매 자기일관 반복마다 하는 일이 이것이다
(정확히는 그 변형인 다비드슨법·켤레기울기 최소화).
y′=f(x,y), y(x0)=y0. 1.4에서 해의 존재와 유일성을 보았고(1.4.3방향장과 해의 존재·유일성),
닫힌 해가 있는 경우도 몇 가지 보았다. 그 밖의 경우 — 이동도가 전기장에 비선형인 캐리어
운동, 비선형 소자가 든 회로의 과도 응답, 산화막 성장 속도식 — 는 시작점에서 출발해 한
걸음씩 전진한다. xn=x0+nh에서의 근사 yn을 앞의 값들로부터 만든다.
이 절의 이름표를 정리해 둔다. 일단계법(one-step)은 yn+1을 yn만으로 만들고
(오일러·룽게–쿠타), 다단계법(multistep)은 yn,yn−1,…를 함께 쓴다(아담스).
명시적(explicit) 방법은 yn+1이 우변에 나오지 않아 대입으로 끝나고, 암시적
(implicit) 방법은 yn+1이 양변에 있어 매 걸음 방정식(비선형이면 2절의 뉴턴법)을 풀어야
한다. 암시적이 비싼데도 쓰는 이유가 이 절의 뒷부분이다.
테일러 전개 y(xn+h)=yn+hy′+21h2y′′+⋯의 첫 두 항이다. 버린 첫
항이 21h2y′′이므로 한 걸음의 오차(국소 절단 오차)는 O(h2)다. 그런데
구간 [x0,X]를 건너려면 (X−x0)/h 걸음이 필요하고, 오차가 쌓이므로 끝점의 오차
(전역 오차)는 O(h)다. 이것을 1차 방법이라 한다 — 차수는 언제나 전역 오차로 센다.
1.4의 방향장(1.4.3방향장과 해의 존재·유일성) 위에서 오일러법은 화살표를 따라 짧은 직선을 잇는 일이다.
곡선이 휘는 쪽으로 항상 바깥에서 따라가므로, y′=y처럼 위로 볼록한 해에서는 늘 아래로
처지고, 그 처짐이 걸음마다 쌓인다.
k1은 시작점, k2와 k3은 중점(두 번째는 첫 번째 중점 기울기로 다시 예측한 중점),
k4는 끝점의 기울기이고, 1:2:2:1의 가중치가 심프슨의 1:4:1이다. 전역 오차
O(h4). 한 걸음에 f를 네 번 계산하지만, 오일러법으로 같은 정확도를 얻으려면 걸음을
수천 배 잘게 해야 하므로 비교가 안 된다. RK4는 “특별한 사정이 없으면 이것”인 기본값이다.
걸음 폭 h를 처음부터 고정하면 낭비이거나 위험하다. 해가 완만한 곳에서는 크게, 급한 곳에서는
작게 걸어야 한다. 그러려면 걸음마다 오차를 추정해야 하고, 4절의 리처드슨 요령이 그대로
쓰인다. 같은 걸음을 h로 한 번, h/2로 두 번 걸어 차이를 보면 오차가 추정된다. 더 싼 방법은
차수가 다른 두 공식이 같은 ki를 공유하게 짜는 것이다 — 4차와 5차 공식이 여섯 개의
ki를 나눠 쓰는 룽게–쿠타–펠베르크(RKF45)가 그것이고, 두 답의 차이가 곧 오차 추정이다.
추정이 허용치보다 크면 h를 줄여 다시 걷고, 훨씬 작으면 다음 걸음을 키운다.
라이브러리의 ode45, RK45가 이것이다. 사용자가 주는 것은 h가 아니라 허용 오차이고,
h는 알고리즘이 정한다. SPICE의 시간 걸음도 마찬가지다 — .TRAN의 최대 걸음은 상한일 뿐,
실제 걸음은 국소 절단 오차 추정(LTE)이 정한다. “timestep too small” 오류는 오차 추정이
허용치 안으로 들어오지 않아 h를 줄이다 바닥에 닿았다는 뜻이다. 대개 회로 안의 불연속
(이상적 스위치, 꺾인 모델 방정식)이 원인이다.
RK4는 한 걸음에 f를 네 번 계산하고 버린다. 다단계법은 지난 걸음에서 계산한
fn,fn−1,fn−2,…를 보관해 두고 그것으로 f를 다항식 보간(3절)한 뒤 적분(4절)한다.
y′=f를 xn에서 xn+1까지 적분하면 yn+1−yn=∫fdx이고, 적분 안의 f를
지난 네 점의 3차 보간 다항식으로 바꾸면
yn+1=yn+24h(55fn−59fn−1+37fn−2−9fn−3)
4차 아담스–배시포스법이다. 계수 55,−59,37,−9는 마디 밖(외삽)으로 적분하기 때문에
부호가 번갈아 크다 — 3절에서 경고한 외삽이다. 한 걸음에 f한 번으로 4차. 대신 처음 세
걸음은 RK4로 만들어야 하고(자기 시동이 안 된다), h를 바꾸려면 보관한 값을 다시 만들어야 한다.
외삽을 피하려면 fn+1을 보간에 포함시킨다.
yn+1=yn+24h(9fn+1+19fn−5fn−1+fn−2)
아담스–몰턴법이고, 계수가 작고 얌전한 대신 fn+1=f(xn+1,yn+1)에 미지수가 들어
있어 암시적이다. 둘을 짝지어 쓴다 — 배시포스로 예측한 yn+1∗를 몰턴의 우변에
넣어 수정한다(예측자–수정자). 두 값의 차이 ∣yn+1−yn+1∗∣가 오차
추정이고, Kreyszig가 보이듯 실제 오차의 약 1/15가 그 차이다.
미지수가 여럿이거나 2계 이상이면 1.4에서 한 대로(1.4.9연립 ODE와 위상 평면) 1계 연립으로 바꾼다.
y′′=f(x,y,y′)는 y1=y,y2=y′로 놓아 y1′=y2,y2′=f(x,y1,y2)이고,
위의 모든 공식은 y,f,ki를 굵은 벡터로 바꾸면 그대로다. RK4의 ki가 벡터가 되고
네 번의 f 계산이 각각 연립 전체를 평가한다.
여기서부터가 이 절의 핵심이다. 시험 방정식 y′=λy(λ<0, 해 eλx는
감쇠)에 오일러법을 쓰면
yn+1=(1+hλ)yn=(1+hλ)n+1y0
참해는 0으로 가는데 수치해가 0으로 가려면 ∣1+hλ∣<1, 즉
**h<2/∣λ∣**여야 한다. 넘으면 부호를 바꾸며 폭발한다. 정확도가
아니라 안정성이 h의 상한을 정한 것이다.
연립에서는 λ가 야코비 행렬 ∂f/∂y의 고유값들이고
(1.4.9연립 ODE와 위상 평면 — 선형화한 계의 모드), 가장 큰 ∣λ∣가 h를 묶는다.
문제는 고유값들이 크게 다를 때 생긴다. 시정수 1ps인 모드와 1ms인
모드가 같은 계에 있으면, 빠른 모드는 몇 ps 만에 사라져 관심도 없는데 그것의 안정성 때문에
h<2ps로 묶여 1ms까지 109 걸음을 걸어야 한다. 이런 계를
강성(stiff)이라 하고, 강성비 ∣λ∣max/∣λ∣min이
그 정도다.
암시적으로 바꾸면 사라진다. 후진 오일러법yn+1=yn+hf(xn+1,yn+1)을 시험
방정식에 쓰면
yn+1=1−hλyn⟹1−hλ1<1모든h>0,λ<0
어떤 h에서도 안정하다(A-안정). 빠른 모드는 h가 크면 한 걸음에 그냥 뭉개져 0이 되고 —
그것이 물리적으로 맞다, 어차피 사라질 모드였으니 — 느린 모드만 정확도에 맞는 h로 따라가면
된다. 걸음마다 yn+1에 대한 방정식을 풀어야 하는 비용을 치르고 109 걸음을 103
걸음으로 바꾼다.
그림 1.12-6. 복소 hλ 평면에서 각 방법이 안정한 영역. 전진 오일러는 −1을 중심으로 한 반지름 1의 원판 안에서만, RK4는 그보다 조금 넓은 영역 안에서만 안정하다 — 둘 다 유계라서 |λ|가 큰 모드가 h를 묶는다. 후진 오일러는 +1을 중심으로 한 원판의 바깥 전부, 사다리꼴법은 왼쪽 반평면 전부가 안정 영역이라 감쇠하는 모드(Re λ < 0)에서는 h가 얼마든 안정하다. 강성 문제는 왼쪽 멀리(음의 실축 끝)에 고유값이 있는 문제이고, 그곳을 덮는 방법만 큰 h로 걸을 수 있다.직접 작도
암시적 방법 중 실제로 쓰이는 것은 세 가지다.
방법
공식
차수
안정
비고
후진 오일러
yn+1=yn+hfn+1
1
A-안정, 강하게 감쇠
빠른 모드를 과하게 죽인다(수치 감쇠)
사다리꼴
yn+1=yn+2h(fn+fn+1)
2
A-안정, 감쇠 없음
hλ→−∞에서 증폭률 →−1: 부호가 번갈아 남는 링잉
기어(BDF)
yn+1을 지난 값들의 후진 차분으로
1–6
2차까지 A-안정
SPICE의 METHOD=GEAR
사다리꼴법의 링잉이 SPICE 사용자가 만나는 “시간 걸음마다 부호가 뒤집히는 톱니”의 원인이다.
정확도는 좋지만 빠른 모드를 죽이지 않고 ±로 튕기게 남긴다. 후진 오일러는 죽이지만 1차라
부정확하다. 그래서 실무는 사다리꼴로 걷다가 스위칭처럼 급한 순간에 후진 오일러 몇 걸음을
끼우거나, 2차 BDF(기어)를 쓴다.
1.7에서 2계 PDE를 타원·포물·쌍곡으로 나누었다(1.7.32계 PDE의 분류 — 타원·포물·쌍곡). 타원형은
경계값 문제다 — 시간이 없고, 영역 전체의 해가 경계 조건으로 한꺼번에 정해진다. 라플라스
∇2u=0과 푸아송 ∇2u=f가 대표이고(1.7.10라플라스·푸아송 방정식), 반도체에서는
정전 퍼텐셜이 곧 이것이다.
영역을 간격 h의 격자로 덮고 격자점 (xi,yj)=(ih,jh)에서의 값을 uij로 쓴다. 4절의
2계 중심 차분을 x와 y에 각각 쓰면
5점 공식이다. 절단 오차는 O(h2). 라플라스(f=0)이면
uij=41(ui+1,j+ui−1,j+ui,j+1+ui,j−1) — 각 점은 네 이웃의
평균이다. 이것은 조화함수의 평균값 성질(1.1.9퍼텐셜 이론)의 이산판이고, Sadiku가
정전기장을 격자에서 손으로 풀 때 쓰는 규칙 그 자체다.
그림 1.12-7. 5점 공식의 스텐실과 세 종류의 경계. 안쪽 격자점(가운데)은 상하좌우 네 이웃과 자기 자신으로 식 하나를 만든다. 왼쪽 경계는 디리클레 조건 — 경계 위의 값이 주어져 있어 그 점은 미지수가 아니라 우변으로 넘어간다. 위쪽 경계는 노이만 조건 — 경계 바깥에 가상점을 하나 두고, 법선 도함수의 중심 차분이 주어진 값이 되게 가상점을 안쪽 점으로 표현해 소거한다. 오른쪽 아래처럼 경계가 격자와 어긋나면 그 점에서만 간격이 다른 비균등 공식을 쓴다.직접 작도
N×N개의 안쪽 격자점에 식이 N2개 — n=N2차 선형계 Au=b다.
격자점을 행 순서로 번호 매기면 A는 대각이 −4, 좌우 이웃이 ±1 자리, 상하 이웃이
±N 자리에 1이 있는 블록 삼중대각 행렬이다.
A=TIIT⋱I⋱I⋱T,T=−411−4⋱1⋱1⋱−4
성질 셋이 앞 절들을 불러온다. 대칭이고, −A가 양의 정부호이며(고유값이 6절에서 본
−4+2cosN+1pπ+2cosN+1qπ, 전부 음수), 띠 폭이 N인 희소
행렬이다. 그래서 콜레스키(5절, 비용 N4), 가우스–자이델(6절 — 타원형 문제에서는
리브만 반복이라 부른다), SOR, 그리고 켤레 기울기·다중 격자가 전부 후보다. 조건수는
κ≈4N2/π2 — 격자를 촘촘히 할수록 나빠진다(7절).
디리클레(값이 주어짐, u=g). 경계 격자점의 값을 알고 있으므로 그 점은 미지수가 아니다.
안쪽 점의 식에 경계값이 나오면 우변으로 넘긴다. 가장 쉽다. 반도체에서는 옴 접촉 — 접촉
전극의 퍼텐셜은 인가 전압으로 고정된다.
노이만(법선 도함수가 주어짐, ∂u/∂n=g). 경계 점의 값 자체가 미지수다.
경계 바깥에 가상점(ghost point) ui,N+1을 두고, 법선 도함수의 중심 차분
2hui,N+1−ui,N−1=gi⟹ui,N+1=ui,N−1+2hgi
로 가상점을 안쪽 점으로 바꿔 5점 공식에 넣는다. 경계 점에도 식이 하나 생기고, 그 식은
2ui,N−1 항을 갖는다. 전진 차분 (ui,N−ui,N−1)/h=gi로 해도 되지만 O(h)라
전체의 O(h2)를 망친다 — Kreyszig가 가상점을 쓰는 이유다. 반도체에서는 대칭면
(소자의 절반만 풀 때 ∂ψ/∂n=0)과 인공 경계(멀리 떨어진 기판 바닥,
전기장이 0이라 놓는다)가 노이만이다.
혼합·로빈(αu+β∂u/∂n=g). 위 둘의 조합으로, 같은 가상점
요령이 든다. 반도체에서는 쇼트키 접촉(전류가 표면 재결합 속도에 비례)이나 대류 열전달
경계가 이것이다.
를 그 점에서만 쓴다. 절단 오차가 그 점에서 O(h)로 떨어지지만 몇 점뿐이라 전체에는 크게
영향하지 않는다.
더 중요한 것은 계면이다. 소자에는 산화막/실리콘 경계가 있고, 그곳에서 유전율이
3.9ε0에서 11.7ε0으로 뛴다. 푸아송 방정식은 ∇⋅(ε∇ψ)=−ρ이고,
계면에서 성립해야 하는 것은 ψ의 연속과 전속 밀도ε∂ψ/∂n의
연속이다. 5점 공식을 그냥 쓰면 두 번째가 깨진다. 표준 처방은 유한 체적(box) 이산화다 —
각 격자점 주위에 상자를 두고 발산 정리(1.1.7발산정리와 스토크스 정리)로 방정식을 “상자 표면을
지나는 전속의 합 = 상자 안의 전하”로 바꾼다. 상자 면마다 그 면이 놓인 재료의 ε을
쓰면 계면 조건이 저절로 들어가고, 전하 보존이 격자 수준에서 정확히 성립한다. 균일한
재료에서는 5점 공식과 같은 식이 나오므로 손해가 없다. 소자 시뮬레이터가 전부 이 방식이고,
6·7절에서 “이산 라플라시안”이라 부른 행렬은 정확히는 이 상자 행렬이다.
수치해가 맞는지는 참해를 모르니 직접 확인할 수 없다. 대신 격자를 절반으로 줄여 다시
푼다. 오차가 Ch2이면 두 해의 차이가 오차의 3/4이고(4절의 리처드슨 논리), 차이가 1/4로
줄면 방법이 2차로 수렴하고 있다는 증거다. 차이가 줄지 않으면 격자가 아직 물리를 담지 못한
것이고(위의 디바이 길이), 1/2로만 줄면 어딘가에 O(h)짜리 처리(전진 차분 경계, 비균등
점)가 지배하고 있는 것이다. 이 검사를 하지 않은 시뮬레이션 결과는 그림이지 답이 아니다.
열·확산 방정식 ut=c2uxx(1.7.6열·확산 방정식)와 파동 방정식
utt=c2uxx(1.7.5파동 방정식과 달랑베르 해)는 초기값 문제다. 공간은 11절처럼 격자로 놓고
(xi=ih), 시간은 10절처럼 걸어간다(tj=jk). 이 절에서 k는 시간 걸음이다.
uij=u(xi,tj)이고, 첫 인덱스가 공간, 둘째가 시간이다.
공간을 먼저 이산화하면 격자점마다 ODE 하나가 생긴다 — dui/dt=c2(ui+1−2ui+ui−1)/h2.
이것은 n차 연립 ODE이고(선분법, method of lines), 그 야코비 행렬은 11절의 이산
라플라시안이다. 그러므로 10절의 모든 결론이 적용된다 — 고유값의 범위가 h에 따라
−4c2/h2까지 뻗으니 강성이고, 명시적 방법은 k가 묶인다. 그것이 아래의 안정성 조건이다.
새 값이 지난 시각의 세 값으로 대입 한 번에 나온다. 격자비 r이 방법의 전부다.
r=1/2이면 ui,j+1=21(ui+1,j+ui−1,j) — 자기 값은 사라지고 양쪽 이웃의
평균이 된다. r>1/2이면 uij의 계수가 음수가 되고, 그때부터 문제가 시작된다.
폰 노이만 안정성 해석. 오차를 푸리에 모드로 쪼개(1.10.6이산 푸리에 변환과 FFT)
uij=Gjeiθi(θ는 격자 파수, 여기서 i는 허수단위)를
넣으면 한 시간 걸음의 증폭률이
G(θ)=1−2r+r(eiθ+e−iθ)=1−4rsin22θ
모든 θ에서 ∣G∣≤1이어야 오차가 자라지 않는다. G의 최솟값은
θ=π(이웃끼리 부호 반대인 체스판 모드)에서 1−4r이고, 이것이 −1 이상이려면
r=h2c2k≤21
넘으면 체스판 모드가 부호를 바꾸며 지수적으로 자란다 — 처음엔 안 보이다가 몇 십 걸음 뒤에
톱니가 폭발하는 전형적 불안정이다.
새 값이 두 시각 전의 값까지 쓰므로 첫 걸음을 따로 만들어야 한다. 초기 속도 ut(x,0)=g(x)를
중심 차분 (ui,1−ui,−1)/2k=gi로 쓰고 가상 시각 ui,−1을 소거하면
ui,1=(1−r∗)ui,0+21r∗(ui+1,0+ui−1,0)+kgi
폰 노이만 해석은 G에 대한 2차 방정식이 되고, 결과는
r∗=h2c2k2≤1⟺ck≤h
쿠랑–프리드리히스–레비(CFL) 조건이다. 한 시간 걸음 동안 파동이 진행하는 거리 ck가
격자 간격 h를 넘으면 안 된다.
그림 1.12-8. CFL 조건의 기하. 파동 방정식에서 점 (xᵢ, tⱼ₊₁)의 참값은 아래로 뻗은 특성선 x ± ct 안쪽(물리적 의존 영역)의 초기값으로 정해진다. 차분 공식은 그 점을 아래 시각의 이웃 세 점으로만 만들므로, 수치적 의존 영역은 기울기 h/k의 삼각형이다. 왼쪽처럼 ck ≤ h이면 수치 삼각형이 물리 삼각형을 품어 필요한 정보가 전부 들어온다. 오른쪽처럼 ck > h이면 물리 삼각형이 더 넓어, 답에 영향을 줘야 할 초기값이 계산에 들어오지 않는다 — 어떤 공식으로도 맞을 수 없고, 실제로는 폭발한다.직접 작도
이 절이 세운 조건들을 하나로 묶는 정리가 있다. 차분 공식이 일관(consistent: h,k→0에서
원래 PDE로 돌아간다)하고 안정(오차가 유계)하면, 그리고 그때에만, 수치해가 참해로
수렴한다. 일관성은 테일러 전개로 확인하고(절단 오차가 0으로 가는가), 안정성은 폰 노이만
해석으로 확인한다. 둘 다 국소적 계산인데 그 결과가 전역적 수렴을 보장한다 — 4절에서 “오차의
차수를 알면 그 차수로 수렴한다”고 한 것의 PDE 버전이다.
드리프트 항 μnnE는 **1계 미분(이류)**이고, 이류–확산 방정식은 이 절의 어느 쪽도 아닌
중간이다. 이류항을 중심 차분으로 이산화하면 격자 페클레 수 Pe=μEh/2D=Eh/2VT가
1을 넘을 때 — 즉 한 격자 간격의 전압 강하가 2VT≈52mV를 넘을 때 —
농도가 이웃끼리 부호를 바꾸며 진동한다(음의 농도!). 공핍층의 전기장 105V/cm에서
이것은 h>5nm면 벌써 깨진다는 뜻이다.
처방은 풍상 차분(upwind) — 이류 방향의 상류 값만 쓰는 것 — 인데 O(h)이고 수치 확산이
크다. 반도체는 더 좋은 답을 갖고 있다. 두 격자점 사이에서 전류 J가 일정하고 E가 상수라
가정하면 J=qμnE+qDdn/dx는 n에 대한 1계 선형 ODE라 정확히 풀리고, 그 해가
셰르페터–검멜 이산화다. B는 베르누이 함수이고, ∣ψi+1−ψi∣≪VT이면
B≈1−x/2가 되어 중심 차분으로, ≫VT이면 한쪽 B가 0으로 가서 풍상 차분으로
저절로 넘어간다. 1절에서 예고한 대로 드리프트와 확산을 하나의 지수 식으로 합쳐 상쇄를
피했고, 어떤 h에서도 농도가 양수로 유지된다. 소자 시뮬레이터가 예외 없이 이것을 쓰는
이유이며, 격자 페클레 수의 제약이 사라져 공핍층을 굳이 VT/E보다 잘게 자르지 않아도 된다.
11·12절의 차분법은 격자가 직교해야 한다. 곡선 경계, 비스듬한 계면, 국소적으로만 촘촘해야
하는 영역에서는 직교 격자가 낭비이거나 부정확하다. 그리고 미분을 차분으로 바꾸는 방식이라
해가 매끄럽지 않은 곳(재료 경계의 꺾임)에서 근거가 약하다. 두 방법이 이 불편을 다른 길로
피한다 — 유한요소법(FEM)은 미분 방정식을 적분 형태(변분 원리)로 바꾸고, 모멘트법
(MoM)은 아예 적분 방정식에서 출발한다. Sadiku의 14장이 정전기 문제로 둘을 소개하는 순서를
그대로 따른다.
① 출발점은 미분 방정식이 아니라 에너지다. 라플라스 방정식 ∇2V=0의 해는 경계
조건을 만족하는 모든 함수 중 정전 에너지
W=2ε∫Ω∣∇V∣2dS
를 최소로 하는 함수다(1.6의 변분 원리 — 1.6.6변분법과 오일러 방정식. 오일러 방정식을 쓰면
∇2V=0이 나온다). 그러니 방정식을 푸는 대신 W를 최소화하면 된다. 1.6의
레일리–리츠법(1.6.8레일리-리츠 변분 근사)이 정확히 이것인데, 거기서는 시험 함수를 영역 전체에
걸친 몇 개의 함수로 잡았다. 유한요소법의 새 발상은 시험 함수를 작은 조각마다 따로 잡는
것이다.
② 영역을 요소로 쪼갠다. 2차원이면 삼각형, 3차원이면 사면체. 크기가 제각각이어도 되고,
경계 모양을 따라가도 되며, 필요한 곳만 잘게 해도 된다. 꼭짓점을 절점(node)이라 하고,
미지수는 절점에서의 값 V1,…,Vn이다.
③ 요소 안에서는 1차식. 삼각형 요소 e 안에서 Ve(x,y)=a+bx+cy로 잡는다. 세 꼭짓점의
값 Ve1,Ve2,Ve3이 a,b,c를 정하므로
Ve(x,y)=i=1∑3αi(x,y)Vei,αi(꼭짓점j)=δij
αi가 형상 함수(shape function)다 — 3절의 라그랑주 기저 Lk의 2차원판으로,
자기 꼭짓점에서 1, 다른 꼭짓점에서 0인 평면이다. Sadiku의 표기로 α1=2A1[(x2y3−x3y2)+(y2−y3)x+(x3−x2)y]이고(A는 삼각형 넓이), 나머지는 첨자를 순환한 것이다.
그림 1.12-9. 1차원에서 본 유한요소 기저. 위: 절점마다 자기 절점에서 1이고 이웃 절점에서 0으로 떨어지는 모자 함수(hat function)가 하나씩 있다. 아래: 절점값 V_j에 모자 함수를 곱해 더하면 절점을 지나는 꺾은선이 되고, 그것이 유한요소 근사다. 절점값 하나를 바꾸면 그 절점에 붙은 두 요소만 바뀐다 — 강성 행렬이 희소한 이유이자 3절의 스플라인과 같은 국소성이다. 2차원의 형상 함수 αᵢ는 이 모자를 삼각형 위의 피라미드로 세운 것이다.직접 작도
④ 요소의 에너지를 절점값으로 쓴다.∇Ve=∑iVei∇αi이고 1차식이라
∇αi는 요소 안에서 상수다. 따라서
이며 나머지는 첨자 순환이다. 각 행의 합이 0이다(∑jCij=0 — 상수 퍼텐셜은 에너지가 0).
1.3의 이차 형식(1.3.7이차 형식과 주축 변환)이 여기서 에너지의 얼굴로 나타난다.
⑤ 조립한다. 전체 에너지는 요소 에너지의 합 W=∑eWe=2εVTCV이고,
전역 행렬 C는 각 요소의 3×3을 그 요소의 절점 번호 자리에 더해 넣어 만든다.
한 절점이 여러 요소에 속하면 그만큼 겹쳐 더해진다. Cij는 절점 i와 j가 같은 요소에
속할 때만 0이 아니므로 희소·대칭·(반)양의 정부호 — 11절의 이산 라플라시안과 같은 부류다.
⑥ 최소화.∂W/∂Vk=0 (모든 자유 절점 k)에서 CV=0.
경계에서 값이 지정된 절점(고정 절점)과 나머지(자유 절점)로 나누면
[CffCpfCfpCpp][VfVp]⟹CffVf=−CfpVp
우변이 알려진 경계값이고, 좌변이 5·6절로 푸는 선형계다. 푸아송 방정식이면 우변에 전하 항
∫ραidS가 더해진다.
에너지가 없는 문제(비대칭 연산자, 이류항)에도 같은 뼈대가 통한다. 방정식 Lu=f의
잔차 Lu~−f가 형상 함수 각각과 직교하도록 요구하는 것 — ∫(Lu~−f)αidS=0 —
이 갈러킨법이고, 에너지가 있으면 레일리–리츠와 같은 방정식을 준다. 상용 유한요소
도구(COMSOL, ANSYS)의 내부가 이것이고, 반도체에서는 채널 응력의 탄성 해석, 패키지의
열–기계 해석, 웨이퍼 휨이 유한요소법으로 풀린다. 소자 시뮬레이터가 쓰는 유한 체적법(11절)은
형상 함수 대신 상자를 쓴 사촌이고, 둘 다 비정형 격자를 다룬다.
Δ=L/N이 조각 길이다. m=n이면 분모가 0이라 근사가 깨지는데, 조각 안에서 도선의
반지름 a를 살려 적분하면 자기 항Amm=4πε02lnaΔ이
나온다. 이 항이 대각을 지배하므로 행렬은 대각 우세다.
③ N×N 선형계를 푼다.A는 꽉 찬(dense) 행렬이다 — 모든 조각이 모든 조각에
퍼텐셜을 만들기 때문이다. 그래서 N을 크게 못 잡지만(103 급), 미지수가 표면에만
있어 3차원 문제가 2차원 미지수로 줄어든다. 얻은 ρn을 더하면 총전하 Q=∑ρnΔ이고,
C=Q/V0이 도선의 커패시턴스다.
일반화. 펄스 기저와 점 정합은 가장 거친 선택이다. 미지 함수를 기저 {fn}으로 전개하고
잔차를 가중 함수{wm}과 내적해 0으로 놓는 것이 일반적인 모멘트법이고, wm이
델타 함수이면 점 정합, wm=fn이면 갈러킨이다. 즉 유한요소법과 모멘트법은 같은
가중 잔차법의 두 얼굴이고, 다른 것은 연산자가 미분(국소·희소)이냐 적분(전역·꽉 참)이냐뿐이다.
“모멘트”라는 이름은 잔차와 가중 함수의 내적을 확률의 모멘트에 빗댄 것이다.
지금까지는 “이 식을 만족하는 x“를 찾았다. 마지막 절은 “이 값을 가장 작게 하는
x“다. 8절의 최소제곱이 이미 그것이었고, 13절의 에너지 최소화도 그것이었다.
반도체에서 최적화는 어디에나 있다 — 소자 모델 파라미터 추출(측정과의 차이를 최소로), 공정
조건 최적화(수율을 최대로), 광 근접 보정(웨이퍼 패턴과 설계의 차이를 최소로), 그리고
신경망 학습(손실 함수를 최소로).
minf(x)에서 f를 목적 함수라 한다. 미분 가능하면 최솟값에서
∇f=0이다(필요조건). 이것은 n개의 미지수에 대한 n개의 방정식이니
2절의 뉴턴법으로 풀 수 있다 — 그러면 도함수 J가 f의 헤세 행렬Hij=∂2f/∂xi∂xj가
된다. 그런데 헤세 행렬은 n2개의 2계 도함수라 비싸고, 멀리서는 뉴턴법이 튄다. 그래서 1계
도함수만 쓰는 방법이 먼저 온다.
그림 1.12-10. f = x₁² + 3x₂²의 등고선(타원) 위에서 최급강하법이 걷는 길. 각 걸음은 등고선에 수직인 방향으로 출발해, 그 직선 위에서 f가 최소인 곳 — 직선이 어떤 등고선에 접하는 곳 — 에서 멈춘다. 다음 걸음은 그 접점의 등고선에 수직이므로 직전 걸음과 정확히 직각이다. 그래서 길이 지그재그가 되고, 타원이 길쭉할수록(조건수가 클수록) 골짜기 벽을 오가느라 바닥을 따라 내려가지 못한다. 켤레 기울기법은 두 번째 걸음부터 방향을 보정해 2차원 이차 함수를 정확히 두 걸음에 끝낸다.직접 작도
목적 함수를 2차까지 전개하면 f(x+δ)≈f+∇fTδ+21δTHδ이고,
이것을 δ에 대해 최소화하면
Hδ=−∇f
뉴턴법이다. 이차 함수라면 한 걸음에 정확히 최솟값에 간다 — 최급강하가 골짜기 벽을
오갈 때 뉴턴은 골짜기의 모양(H)을 알고 바닥으로 곧장 간다. 해 근처에서 2차 수렴. 그러나
H가 양의 정부호가 아닌 곳(안장점, 오목한 곳)에서는 그 방향이 오르막일 수 있고, H를
만들고 푸는 비용이 n2과 n3이다.
준뉴턴법(BFGS)은 H를 계산하지 않고, 걸음마다 관측된 기울기의 변화 ∇fk+1−∇fk로
H−1의 근사를 갱신해 간다 — 2절의 할선법을 벡터로 올린 것이다. 1계 도함수만으로
초선형 수렴을 얻고, 변수가 수천 개인 곡선 맞춤·모델 보정의 표준이다. 8절의 레벤버그–마쿼트는
최소제곱에 특화된 같은 부류로, H≈JTJ로 놓은 것이 다르다.
변수가 수백만 개(신경망, 픽셀 단위의 마스크 최적화)면 H−1 근사조차 못 들고 있으므로
최급강하로 돌아간다 — 다만 선 탐색 대신 고정 걸음(학습률)과 운동량 항으로 지그재그를 누르고,
기울기를 데이터 일부로만 추정한다(확률적 경사 하강). 걸음 폭이 6절의 ω·10절의 h와
같은 역할이라 너무 크면 발산하고 너무 작으면 느리다.
g(x)=0을 만족하면서 f를 최소화하는 문제는 1.6의 라그랑주 승수(1.6.7구속 조건이 있는 변분과 라그랑주 승수)로
∇f=λ∇g를 풀거나, 구속을 벌칙 항 μg2으로 목적 함수에 더해 무구속
문제로 바꾼다. 부등식 구속(g≤0)이면 승수의 부호 조건이 붙는다(KKT 조건).
f와 구속이 전부 선형이면 선형 계획법(Kreyszig 22.2)이다. 등고선이 평행한 직선이고
가능 영역이 다각형(다면체)이므로, 최솟값은 언제나 꼭짓점에 있다 — 안쪽에서는 기울기
방향으로 더 갈 수 있고, 변 위에서도 한쪽 꼭짓점으로 가면 더 좋아지기 때문이다. 심플렉스법은
꼭짓점에서 이웃 꼭짓점으로 목적 함수가 줄어드는 쪽으로만 옮겨 가는 방법이고, 웨이퍼 배정·
장비 스케줄링 같은 생산 계획이 이것으로 풀린다.
이 절의 방법은 전부 내리막으로만 간다. 그래서 도착하는 곳은 시작점에서 가장 가까운
골짜기이지 가장 깊은 골짜기가 아니다. 목적 함수가 볼록(등고선이 한 겹의 타원처럼 생김)이면
골짜기가 하나라 문제없다 — 8절의 선형 최소제곱, 13절의 에너지가 그렇다. 비선형 모델 맞춤,
공정 최적화, 역 리소그래피는 볼록하지 않고 골짜기가 여럿이다.
처방은 세 종류다. 여러 시작점에서 출발해 가장 좋은 것을 취하거나(다중 시작), 오르막도
확률적으로 허용해 얕은 골짜기를 빠져나오거나(모의 담금질 — 온도를 서서히 낮추는 열처리의
비유가 이름이다), 목적 함수 자체를 몇 번의 평가로 대리 모델로 만들어 그 위에서 탐색한다
(베이즈 최적화 — 시뮬레이션 한 번이 몇 시간인 TCAD 보정에서 쓴다). 어느 쪽이든 찾은
최솟값이 전역이라는 보장은 없다는 것이 이 절의 마지막 경고다.