서문
"무겁고 복잡한 구조계산, 가벼운 알고리즘으로 풀 수 없을까?"
LU 분해, Gauss 소거법도 좋지만, 대칭행렬을 다룰 땐 이 친구가 진짜다.
Conjugate Gradient Method (CGM).
한 줄로 말하자면, "해답에 다가가는 가장 똑똑한 방향을 찾아가는 방법"이다.
1. 이론의 정수: Conjugate Gradient란?
CGM은 다음의 목적함수를 최소화하는 반복 알고리즘이다:
Φ(x) = (1/2)·xT·A·x − bT·x
여기서 A는 대칭행렬(symmetric matrix)이고, x는 구하고자 하는 해, b는 주어진 벡터다.
🔁 반복식은 다음과 같다:
- xk+1 = xk + λk·dk
- rk+1 = b − A·xk+1
- λk = (dkT·rk) / (dkT·A·dk)
- αk+1 = (rk+1T·rk+1) / (rkT·rk)
- dk+1 = rk+1 + αk+1·dk
요약: 해 x를 직접 구하지 않고, 방향벡터 d를 반복적으로 갱신하며 점진적으로 해에 가까워진다.
2. 예전 FORTRAN 프로그램을 만나다
학교 시절 자료에서 꺼낸 오래된 Fortran 소스.
CALL CGM(A,N,NP,B,X,R,D,TI,TOL)
이 프로그램은 iter.out
이라는 파일에 모든 반복값을 출력해줬고, 지금 봐도 수치해석 교육자료로 완벽하다.
- 초기조건: x = 0, r = b, d = r
- 반복: λ, r, d 갱신 → x 수렴 확인
- 수렴 기준: λ < tol 또는 ‖r‖ < tol
3. LU 분해와 비교해보니?
🎯 CASE1. 4x4 행렬
A = [
4 1 1 2
1 3 0 1
1 0 2 1
2 1 1 4
]
b = [8, 0, 1, 6]ᵀ
LU 분해와 CGM 결과가 소수점까지 일치.
4. Residual 수렴 그래프
각 반복마다의 잔차 벡터 rk 값이 얼마나 빠르게 줄어드는지를 그래프로 나타냄.
반복수는 많아도 계산량은 적기 때문에 FEM에서도 유리하다.
5. Excel VBA로 구현해보자
Fortran 코드를 VBA로 바꾸면 다음과 같은 흐름이 된다:
Sub CGM()
x = 0
r = b
d = r
For i = 1 To max_iter
T = A * d
lambda = (dᵗ * r) / (dᵗ * A * d)
x = x + lambda * d
r = r - lambda * T
alpha = (rᵗr_new) / (rᵗr_old)
d = r + alpha * d
If Converged Then Exit For
Next i
End Sub
Excel로 구성하면 반복값도 테이블로 출력되고 수렴그래프도 바로 그릴 수 있어서 시각적 학습에 최적이다.
마무리하며
CGM은 구조해석에서 반복계산의 ‘경량화 솔루션’이다.
특히 대형 FEM 시스템을 다룰 때, 무거운 Direct Solver 대신
빠르고 메모리 효율 좋은 선택이 될 수 있다.
'4. 구조연구실 > 4.1 수치해석 따라잡기' 카테고리의 다른 글
[수치해석 따라잡기] CGM을 Excel VBA로 구현하고, 수렴 그래프까지 그려보자 (0) | 2025.06.02 |
---|