3장에서 가우스 소거로 Ax=b를 한 번 풀었습니다. 그런데 공학에서는 같은 A로 수십, 수천 개의 b를 풀어야 할 때가 대부분입니다. 회로 시뮬레이터는 시간 단계마다, 구조 해석 프로그램은 하중 조건마다 새 오른쪽 변을 받습니다. 매번 처음부터 소거할까요, 역행렬을 한 번 구해 두고 곱할까요? 이 장의 답은 둘 다 아닙니다. 소거 과정 자체를 기록해 두면 그 기록이 A=LU라는 두 삼각 행렬이 되고, 새 b는 삼각 행렬 두 개로 순식간에 풉니다. 역행렬은 개념으로는 중요하지만 계산으로는 거의 쓰지 않는다는 것도 이 장에서 분명해집니다.
역행렬을 "변환을 되돌리는 변환"으로 이해하고, 2×2 공식과 (AB)−1=B−1A−1을 그림으로 설명한다.
가우스–조르당 소거를 [A∣I]에 적용해 역행렬을 손으로 구하고, 역행렬이 존재할 동치 조건을 정리한다.
소거의 승수를 모으면 하삼각 행렬 L이 된다는 것을 보이고, A=LU와 행 교환을 포함한 PA=LU를 구한다.
전진 대입과 후진 대입으로 여러 오른쪽 변을 풀고, 역행렬 방식과 연산량·정확도를 비교한다.
A=LDU와 대칭 행렬의 A=LDLT를 이해하고, 삼중대각 시스템을 O(n)에 푸는 토머스 알고리즘을 쓴다.
저항 회로의 노드 해석을 Gv=i로 세우고 LU로 풀며, 희소 행렬의 채움(fill-in)이 순서에 따라 달라짐을 본다.
이 수식이 없었다면회로 시뮬레이터 SPICE
칩 하나를 만들기 전에 설계자는 수만~수백만 개 소자의 회로를 컴퓨터로 먼저 돌려 봅니다. SPICE 계열 시뮬레이터는 키르히호프 전류 법칙을 노드마다 세워 거대한 연립방정식 Gv=i를 만들고, 비선형 소자 때문에 뉴턴 반복을 하고, 과도 해석에서는 그것을 시간 단계마다 되풀이합니다. 한 번의 시뮬레이션이 연립방정식 수십만 번을 푸는 셈입니다.
이것을 가능하게 한 것이 LU 분해, 그중에서도 0이 대부분인 행렬에 맞춘 희소 LU입니다. 행렬의 구조(어느 노드가 어느 노드와 연결되는가)는 반복 내내 같으니, 소거 순서와 채움 위치는 한 번만 정해 두고 숫자만 바꿔 다시 분해합니다. 역행렬을 구했다면 0이던 칸이 모두 채워져 메모리부터 감당할 수 없었을 것입니다.
노드 방정식 Gv = i→매 단계 새로 풀기→A = LU (희소)→삼각 대입 두 번
역행렬은 되돌리기 변환이다
보정한 사진을 원본으로 되돌릴 수 있을까
사진 편집 앱이 이미지에 회전·전단·확대를 섞은 2×2 변환 A를 적용했습니다. "실행 취소"를 누르면 원래 좌표로 돌아가야 합니다. 변환된 좌표 y=Ax에서 x를 되찾는 변환이 언제나 있을까요? 있다면 그것도 행렬일까요?
선형 변환을 되돌리는 변환도 선형입니다(A가 덧셈과 스칼라배를 보존하면 그 역도 보존합니다). 그러니 되돌리기 역시 행렬 하나로 쓸 수 있고, 그것이 역행렬(inverse matrix)입니다.
정의 4.1 (역행렬)n×n 행렬 A에 대해 BA=I이고 AB=I인 행렬 B가 있으면 A를 가역(invertible) 또는 정칙(nonsingular)이라 하고, B를 A−1로 쓴다. 그런 B가 없으면 A는 특이(singular)하다.
역행렬은 있으면 하나뿐입니다. B와 C가 모두 역행렬이면 B=BI=B(AC)=(BA)C=IC=C이기 때문입니다. 정사각 행렬에서는 한쪽만 확인해도 충분하다는 사실(BA=I이면 자동으로 AB=I)은 3절의 정리에서 나옵니다.
2×2에서는 공식이 바로 나옵니다. 직접 곱해 보면 확인할 수 있습니다.
A=[acbd]⟹A−1=ad−bc1[d−c−ba](ad−bc=0)
대각 원소는 자리를 바꾸고, 비대각 원소는 부호를 바꾼 뒤, 행렬식 ad−bc로 나눈다. 행렬식이 0이면 나눌 수 없다. 그림으로는 평면이 직선으로 납작해져 어디서 왔는지 알 수 없게 된 경우다.
그림 4-1. 역행렬은 변환을 되돌린다. 곱 AB는 오른쪽 B가 먼저 적용되므로, 되돌릴 때는 나중에 한 A부터 되돌린다. 그래서 곱의 역행렬은 순서가 뒤집힌다.
정리 4.1 (곱과 전치의 역행렬)A, B가 가역이면 AB도 가역이고 (AB)−1=B−1A−1이다. 또 (AT)−1=(A−1)T이다.
증명: (AB)(B−1A−1)=A(BB−1)A−1=AA−1=I이고 반대 순서도 같다. 전치는 AT(A−1)T=(A−1A)T=IT=I에서 나온다.
SIMULATOR
변환하고 되돌리기: A와 A⁻¹
Aî, Aĵ 끝점을 끌어 보세요
보기
A와 A⁻¹
det A = ad − bc—
det A⁻¹ = 1/det A—
상태—
해볼 것: ① 'A⁻¹A'를 누르면 변환한 F가 정확히 원래 자리로 돌아옵니다. ② '거의 특이'를 고르고 'A⁻¹ 적용'을 보세요. A가 평면을 얇게 누를수록 A⁻¹은 반대로 크게 부풀려야 합니다. 측정 잡음이 있으면 이 부풀림이 잡음을 키웁니다. ③ 두 점을 원점을 지나는 한 직선 위에 놓으면 역행렬이 사라집니다. 모델: 원점을 고정하는 2×2 선형 변환, 끈 점은 0.1 단위로 맞춰집니다.
가우스–조르당: [A | I]를 [I | A⁻¹]로
3×3 이상은 공식이 없을까
2×2 공식은 외우기 쉽지만, 3×3 공식(여인수 공식, 10장)은 항이 많고 4×4 이상은 손으로 쓸 엄두가 나지 않습니다. 소거를 이미 알고 있으니 그것으로 역행렬을 구할 수는 없을까요?
AX=I를 만족하는 X를 찾는 것은 X의 열 x1,…,xn에 대해 n개의 연립방정식 Axj=ej를 푸는 것과 같습니다. 계수 행렬이 모두 A로 같으니 오른쪽 변 n개를 한꺼번에 붙여 소거하면 됩니다. 이것이 가우스–조르당 소거(Gauss–Jordan elimination)입니다.
앞으로 소거: 피벗 아래를 0으로 만든다(3장의 가우스 소거와 같다).
뒤로 소거: 피벗 위도 0으로 만든다. 왼쪽이 대각 행렬이 된다.
피벗으로 나누기: 각 행을 피벗으로 나눠 왼쪽을 I로 만든다. 그때 오른쪽이 A−1이다.
왜 오른쪽이 A−1일까요? 각 행 연산은 왼쪽에 기본 행렬E를 곱하는 것입니다. 연산을 모두 모은 M=Ek⋯E2E1이 MA=I를 만들었다면 M=A−1이고, 같은 연산을 받은 오른쪽은 MI=M=A−1입니다.
따라서 A−1=[3−5−12]. 2×2 공식(detA=6−5=1)과 같고, AA−1=I도 곱해 보면 확인된다.
SIMULATOR
가우스–조르당 단계별 실행기
—
단계—
지금까지 곱셈·나눗셈—
결과—
해볼 것: ① 3×3 행렬을 끝까지 실행해 오른쪽 블록이 A⁻¹이 되는 것을 보세요. 마지막 단계에서 AA⁻¹ = I도 검산합니다. ② '피벗 자리가 0'은 첫 단계에서 행을 바꿉니다. ③ '특이 행렬'은 세 번째 피벗을 찾지 못하고 멈춥니다. 모델: 정확한 유리수 대신 배정밀도 실수로 계산하고 소수 셋째 자리까지 보여 줍니다. 피벗은 맨 위의 0이 아닌 원소를 씁니다.
역행렬이 있을 조건, 그리고 왜 거의 계산하지 않는가
가우스–조르당이 멈추는 경우는 딱 하나, 어떤 열에서 피벗 후보가 모두 0일 때입니다. 이 관찰 하나가 서로 달라 보이는 여러 조건을 한 줄로 묶습니다.
핵심 고리: 피벗이 n개면 가우스–조르당이 끝까지 가서 역행렬을 만든다(1⇔2). 피벗이 모자라면 자유 변수가 생겨 Ax=0에 0 아닌 해가 생긴다(2⇔3). 열의 선형 결합이 0이 되는 것이 바로 Ax=0의 0 아닌 해다(3⇔4). BA=I이면 Ax=0에서 x=BAx=0이니 3이 성립하고, 그러면 A−1이 있으므로 B=BAA−1=A−1이다(8). 그래서 정사각 행렬은 한쪽 역행렬만 확인하면 된다.
이론에서 역행렬은 이렇게 강력하지만, 수치 계산에서는 한 가지 원칙이 거의 철칙처럼 쓰입니다.
Ax=b를 풀 때 A−1을 만들지 않는다x=A−1b는 식으로는 깔끔하지만, 계산으로는 손해입니다.
연산량: n×n 역행렬을 구하는 데 곱셈·덧셈이 약 2n3회 필요합니다. LU 분해는 약 32n3회로, 세 배 적습니다. 그 뒤 b 하나를 푸는 비용은 둘 다 약 2n2으로 같습니다.
정확도: 역행렬을 거치면 반올림 오차가 한 단계 더 쌓이고, LU와 삼각 대입으로 푼 해보다 잔차 ∥Ax−b∥가 대체로 더 큽니다. 후진 안정성(16장) 보장도 약해집니다.
희소성: 희소 행렬의 역행렬은 거의 언제나 꽉 찬 행렬입니다(7절). 0이 99.9%인 백만 차원 행렬의 역행렬은 메모리에 담을 수조차 없습니다.
그래서 MATLAB의 A\b, NumPy의 numpy.linalg.solve, LAPACK의 dgesv는 모두 역행렬이 아니라 LU 분해로 풉니다. 역행렬 자체가 필요한 경우(공분산 행렬의 대각 원소처럼 A−1의 성분이 답인 경우)는 생각보다 드뭅니다.
A = LU: 소거의 기록
소거를 매번 다시 해야 할까
구조물의 강성 행렬 K는 그대로인데 하중 벡터 f만 바람·지진·적설 조건마다 바뀝니다. 가우스 소거는 K와 f를 함께 바꿔 가며 풀므로, f가 바뀌면 32n3짜리 소거를 처음부터 다시 해야 합니다. K에 대해 한 일은 어딘가에 남겨 둘 수 없을까요?
남겨 둘 것은 많지 않습니다. 소거의 각 단계는 "i행에서 k행의 ℓik배를 뺀다"였고, 이 승수(multiplier)ℓik=uik/ukk만 기억하면 A에 한 일을 b에도 언제든 똑같이 해 줄 수 있습니다. 승수를 대각선 아래에 모으면 하삼각 행렬이 됩니다.
A=LU,L=1ℓ21ℓ31⋮1ℓ321⋱⋱,U=소거가끝난위삼각행렬
L은 대각이 1인 하삼각 행렬(단위 하삼각)이고 대각 아래에 승수가 그 자리 그대로 들어간다. U의 대각 원소가 피벗이다. 승수를 부호까지 그대로 적는다는 것(빼 준 양 = 더해야 원래로 돌아오는 양)이 요점이다.
왜 승수가 "그 자리 그대로" 들어갈까요? 소거 단계 하나는 기본 행렬 Eik(단위 행렬의 (i,k) 칸에 −ℓik)를 곱하는 것이고, 모두 모으면 EA=U입니다. 그러면 A=E−1U이고 L=E−1입니다. Eik−1은 (i,k) 칸의 부호만 바꾼 것(뺀 것을 다시 더하기)이며, 역순으로 곱하면 서로 간섭하지 않아 승수들이 자기 칸에 그대로 놓입니다. 반면 E 자체에는 승수끼리 곱한 항이 섞여 들어갑니다. 그래서 E가 아니라 L=E−1을 기록하는 것이 깔끔합니다.
그림 4-2. 예제 4.2의 분해. 소거하며 쓴 승수(주황)를 같은 자리에 적으면 L, 소거가 끝난 결과가 U(피벗은 보라). 컴퓨터는 L과 U를 따로 저장하지 않고 A의 칸에 덮어쓴다. L의 대각 1은 적을 필요가 없기 때문이다.
결과: L=12−1011001, U=200130115. 검산: L의 3행 (−1,1,1)은 "U의 1행 −1배 + 2행 + 3행" =(−2,2,5)으로 A의 3행과 같다.
SIMULATOR
L이 채워지고 U가 만들어진다
—
단계—
최대 |승수|—
검산 max|PA − LU|—
해볼 것: ① 예제 4.2를 한 단계씩 실행하며 승수가 L의 어느 칸에 들어가는지 확인하세요. ② '2열 피벗 자리가 0'은 피벗팅 없이는 멈춥니다. 부분 피벗팅을 켜면 행을 바꾸고 P가 기록됩니다. ③ '아주 작은 피벗'에서 피벗팅을 끄면 승수가 10⁴까지 커지고, 켜면 모든 |승수| ≤ 1이 됩니다. 모델: 배정밀도 계산, 표시는 소수 셋째 자리. 부분 피벗팅은 각 열에서 절댓값이 가장 큰 원소를 피벗으로 고릅니다.
행 교환이 필요할 때: PA = LU
피벗 자리에 0이 오면 아래 행과 바꿔야 합니다(3장의 부분 피벗팅). 0이 아니어도 아주 작은 피벗은 거대한 승수를 낳고 반올림 오차를 키우므로, 실무에서는 매 열마다 절댓값이 가장 큰 원소를 피벗으로 올립니다. 그러면 모든 승수가 ∣ℓik∣≤1이 됩니다.
행 교환을 섞으면 A=LU가 그대로 성립하지 않습니다. 대신 바꿀 행을 미리 다 바꿔 둔 행렬 PA에 대해 교환 없는 소거를 한 것과 결과가 같습니다. P는 단위 행렬의 행 순서를 바꾼 치환 행렬(permutation matrix)입니다.
정리 4.3 (PA = LU) 모든 가역 행렬 A에 대해 치환 행렬 P, 단위 하삼각 행렬 L, 대각에 0이 없는 위삼각 행렬 U가 있어 PA=LU이다. 행 교환이 일어나면 이미 계산한 L의 승수들도 같이 바꿔 준다(행 전체가 이사를 가니, 그 행의 기록도 따라간다). P−1=PT이므로 A=PTLU로도 쓴다.
PA=LU로 Ax=b를 풀 때는 양변에 P를 곱해 LUx=Pb로 바꾸면 됩니다. Pb는 곱셈이 아니라 원소의 순서를 바꾸는 것이라 비용이 거의 없습니다. 한편 피벗팅 없이도 언제나 안전한 행렬들이 있습니다. 대각 지배 행렬(각 행에서 대각 원소의 절댓값이 나머지 절댓값의 합보다 큰 행렬)과 대칭 양의 정부호 행렬(13장)이 그렇고, 다음 절들의 열전도 행렬과 회로 행렬이 바로 이 경우입니다.
한 번 분해해 여러 번 풀기
A=LU가 있으면 Ax=b는 L(Ux)=b입니다. c=Ux로 두면 삼각 시스템 두 개로 쪼개집니다.
LU는 역행렬 방식보다 언제나 앞서고(분해가 세 배 싸고 그 뒤는 같다), 매번 소거하는 방식과는 k가 커질수록 격차가 벌어집니다. 아래에서 n과 k를 바꿔 보세요.
SIMULATOR
연산량 비교: 소거·역행렬·LU
매번 소거—
역행렬 + 곱—
LU + 대입—
LU가 빠른 배수 (매번 소거 대비)—
해볼 것: ① k = 1이면 역행렬 방식이 LU보다 약 세 배 느립니다. ② k를 n보다 크게 하면 대입 비용 2kn²이 분해 비용을 넘어서고, 역행렬과 LU의 차이는 줄지만 LU가 여전히 앞섭니다. ③ n = 10⁴, k = 100이면 매번 소거하는 방식은 LU보다 약 100배 느립니다. 모델: 곱셈·덧셈 횟수(flop)의 주요 항만 셉니다. 실제 속도는 메모리 접근과 병렬화에 크게 좌우되며, 시간은 지정한 일정 속도를 가정한 어림입니다.
예제 4.2에서는 D=diag(2,3,5), U′=1000.5100.51/31입니다. 이 분해는 피벗팅이 필요 없는 가역 행렬에서 유일합니다.
A가 대칭(A=AT)이면 더 좋은 일이 생깁니다. A=LDU′를 전치하면 AT=U′TDLT이고, 이것도 "단위 하삼각 · 대각 · 단위 위삼각" 꼴이니 유일성에 의해 U′=LT입니다.
정리 4.4 (대칭 행렬의 LDLᵀ) 행 교환 없이 소거되는 대칭 행렬은 A=LDLT로 분해된다. L만 계산하면 되므로 연산량과 저장 공간이 LU의 절반(약 31n3)이다. 피벗(D의 원소)이 모두 양수이면 A는 양의 정부호이고, D를 나눠 담아 A=(LD)(LD)T=RTR로 쓸 수 있다. 이것이 콜레스키 분해이며 13장에서 자세히 다룬다.
예제 4.4A=422253236. 승수 ℓ21=ℓ31=0.5로 1열을 지우면 남은 블록은 [4225]이고(여전히 대칭!), ℓ32=0.5로 지우면 마지막 피벗 4가 남는다. 따라서
L=10.50.5010.5001,D=diag(4,4,4),A=LDLT.
소거 도중의 남은 블록이 계속 대칭이라는 것이 LT만으로 U를 대신할 수 있는 이유다.
띠 행렬: 열전도 막대를 O(n)에 풀기
칩의 방열판을 따라 온도는 어떻게 분포할까
길이 1인 막대의 양 끝 온도를 고정하고 막대 안에서 열이 발생한다고 합시다. 정상 상태 온도 T(x)는 −kT′′(x)=q(x)를 만족합니다. 막대를 n개 내부 점으로 나누고 2계 도함수를 차분 T′′≈(Ti−1−2Ti+Ti+1)/h2으로 바꾸면 n원 연립방정식이 됩니다. 정확하게 풀려면 n을 크게 해야 하는데, n=106이면 32n3≈7×1017번의 연산이 필요할까요?
각 점의 방정식은 양옆 이웃만 포함하므로 행렬은 대각과 바로 위·아래 대각에만 원소가 있는 삼중대각 행렬(tridiagonal matrix)입니다.
h=1/(n+1). 양 끝의 고정 온도 TL, TR는 알고 있는 값이므로 오른쪽 변으로 넘어간다. 이 행렬은 대칭이고 양의 정부호라 피벗팅이 필요 없다.
소거를 해 보면 놀라운 일이 생깁니다. 1행으로 지울 것은 2행 하나뿐이고, 지운 뒤에도 0이던 칸은 0으로 남습니다. 즉 L은 대각 바로 아래 한 줄, U는 대각과 바로 위 한 줄뿐입니다. 이 사실을 이용한 소거와 대입이 토머스 알고리즘(Thomas algorithm)입니다. 행마다 상수 번의 연산(약 8회)만 하므로 전체 비용은 O(n)입니다.
정리 4.5 (띠 행렬의 LU)A의 원소가 ∣i−j∣≤w인 칸에만 있으면(반띠폭 w) 행 교환 없는 LU에서 L과 U도 같은 띠 안에만 원소를 가진다. 연산량은 약 2nw2, 저장 공간은 약 3nw이다. 삼중대각(w=1)이면 O(n)이다.
SIMULATOR
열전도 막대: 토머스 알고리즘으로 푸는 온도 분포
발열 분포
최고 온도—
토머스 연산량 ≈ 8n—
꽉 찬 LU ≈ ⅔n³—
해석해와 최대 차이 (균일 발열)—
해볼 것: ① n을 200까지 올려도 계산은 즉시 끝납니다. 꽉 찬 LU였다면 연산량이 n²/12, 약 3,300배 많고, n = 10⁶이면 그 차이가 10¹¹배에 이릅니다. ② 균일 발열에서는 해석해 T=TL+(TR−TL)x+2kqx(1−x)와 차이가 반올림 수준입니다(2차 다항식에는 중앙 차분이 정확하기 때문). ③ '가운데 칩'은 폭 0.1 구간에만 열이 나서 온도가 뾰족해집니다. 모델: 1차원 정상 열전도, 균일 열전도율, 양 끝 디리클레 조건, 2차 중앙 차분.
2차원·3차원 격자에서는 이웃이 위아래 행에도 있어서 띠가 넓어지고, 띠 안의 0이던 칸이 소거 중에 채워집니다. 이 채움(fill-in)의 양은 미지수의 순서에 따라 크게 달라집니다. 극단적인 예가 "허브" 노드 하나가 모두와 연결된 화살표 모양 행렬입니다.
SIMULATOR
희소 LU의 채움: 순서가 메모리를 정한다
A의 0 아닌 칸
L + U (주황 = 채움)
구조와 순서
A의 0 아닌 칸—
L + U의 0 아닌 칸—
채움—
해볼 것: ① '허브 먼저'는 같은 행렬인데도 첫 소거에서 모든 칸이 채워집니다. ② '허브 나중'은 허브를 마지막 번호로 옮겼을 뿐인데 채움이 0입니다. ③ 2D 격자는 띠 안이 채워집니다. 실제 희소 솔버는 최소 차수(AMD), 중첩 분할(nested dissection) 같은 재번호 매기기로 채움을 줄입니다. 모델: 숫자 상쇄를 무시한 기호적 채움(구조만 봄), 행 교환 없음.
응용: 저항 회로의 노드 해석
저항 여섯 개와 전류원 하나, 각 노드의 전압은
아래 회로에서 전류원이 1번 노드로 전류를 밀어 넣습니다. 저항 값을 바꿀 때마다 모든 노드의 전압과 각 저항의 전류를 알고 싶습니다. 고리마다 전압 방정식을 세울 수도 있지만, 컴퓨터가 체계적으로 세우기 좋은 방법은 따로 있습니다.
노드 해석(nodal analysis)은 접지(0번)를 기준으로 각 노드 전압 vi를 미지수로 두고, 노드마다 키르히호프 전류 법칙(나가는 전류의 합 = 들어오는 전원 전류)을 씁니다. 노드 i와 j 사이 컨덕턴스 g=1/R을 지나는 전류는 g(vi−vj)이므로, 방정식을 모으면
Gv=i,Gii=노드i에붙은저항∑g,Gij=−gij(i=j)
G는 컨덕턴스 행렬, i는 각 노드로 들어오는 전원 전류. 저항 하나는 G의 네 칸 (i,i),(j,j),(i,j),(j,i)에 +g,+g,−g,−g를 더한다(스탬프). 접지에 붙은 저항은 (i,i)에만 +g. 그래서 G는 대칭이고, 접지로 가는 길이 있으면 양의 정부호다.
그림 4-3. 시뮬레이터의 회로. 노드 ①–③과 접지 사이에 저항 여섯 개, ①로 들어가는 전류원 I. 노드 수가 미지수 수이고, 저항이 G에 스탬프를 찍는다.
예제 4.5 — 모든 저항이 1 kΩ, I = 3 mAg=1 mS로 두면
G=3−1−1−13−1−1−13 mS,i=300 mA.
소거: ℓ21=ℓ31=−1/3, 남은 블록 [8/3−4/3−4/38/3], ℓ32=−1/2, 마지막 피벗 2. 전진 대입 c=(3,1,1.5), 후진 대입 v3=0.75, v2=(1+34⋅0.75)/38=0.75, v1=(3+0.75+0.75)/3=1.5 V. 대칭인 회로라 ②와 ③의 전압이 같다는 것도 확인된다.
SIMULATOR
노드 해석기: 저항을 바꾸면 G와 전압이 바뀐다
G (mS), 분해 결과
v₁—
v₂—
v₃—
KCL 검산: 접지로 가는 전류 합—
해볼 것: ① 처음 상태(모두 1 kΩ, 3 mA)가 예제 4.5입니다. ② R₆을 0.1 kΩ 쪽으로 낮추면 ①과 ③이 거의 같은 전압이 되고 G의 (1,3) 칸이 커집니다. ③ R₅를 크게 하면 ③의 전류는 ②를 돌아 접지로 갑니다. 접지로 가는 전류의 합은 언제나 I와 같습니다. 모델: 슬라이더는 로그 눈금(0.1–100 kΩ), R₁ = R₃ = 1 kΩ 고정, 이상적인 선형 저항과 직류 전류원.
실제 회로 시뮬레이터는 전압원·인덕터·트랜지스터까지 다루기 위해 미지수에 일부 전류를 더한 수정 노드 해석(modified nodal analysis)을 쓰고, 그 행렬은 대칭이 아니어서 피벗팅이 있는 희소 LU로 풉니다. 하지만 "부품마다 스탬프를 찍어 행렬을 만들고 LU로 푼다"는 뼈대는 위 시뮬레이터와 같습니다.
이 도구가 쓰이는 곳
"한 번 분해해 여러 번 푼다"는 수치 계산의 기본기라, 연립방정식이 나오는 거의 모든 곳에 숨어 있습니다.