기술과 감성 사이, 그 어느 다리위에서...

4. 구조연구실/4.1 수치해석 따라잡기

[수치해석 따라잡기] 구조해석의 친구, Conjugate Gradient Method

불꽃엔지니어 2025. 6. 2. 22:46

 

서문

"무겁고 복잡한 구조계산, 가벼운 알고리즘으로 풀 수 없을까?"

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 대신
빠르고 메모리 효율 좋은 선택이 될 수 있다.


시공현장 중심의 구조 검토와 기술자문 서비스를 제공합니다.

  • 각종 구조검토/시공VE제안/최적화 구조설계
  • 설계도서 적정성 검토/가설구조물(동바리, 비계) 검토
  • ✉ 이메일: info@constructostructure.com
    📱 연락처: 010-8996-1636
    📂 문의: 블로그 비밀댓글 또는 이메일로 주세요!