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

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

[수치해석 따라잡기] CGM을 Excel VBA로 구현하고, 수렴 그래프까지 그려보자

불꽃엔지니어 2025. 6. 2. 23:10

[수치해석 따라잡기] CGM을 Excel VBA로 구현하고, 수렴 그래프까지 그려보자!


서문

이전 글에서 우리는 CGM(Conjugate Gradient Method)의 이론과 반복 알고리즘을 살펴봤다.
이번에는 그 알고리즘을 실제로 Excel VBA로 구현하고,
Residual(잔차)의 감소 과정까지 시각적으로 확인해보자.
직접 수치로 확인하고, 눈으로 수렴을 보는 이 경험은 구조해석에서도 매우 유용하다.


1. 입력 데이터 구성하기

먼저 입력 시트를 아래와 같이 구성하자.

내용
A1행렬 크기 N
A2~계수행렬 A(i,j) 요소
다음줄우변 벡터 B(i)
마지막줄수렴오차 TOL, 최대반복횟수 max_iter 등

→ Sheet 이름: Input


2. VBA 구현 코드 (CGM 알고리즘)


Sub CGM()

    Dim A() As Double, B() As Double, X() As Double
    Dim R() As Double, D() As Double, T() As Double
    Dim i As Integer, j As Integer, k As Integer
    Dim N As Integer, max_iter As Integer
    Dim tol As Double
    Dim alpha As Double, beta As Double, lambda As Double, residual As Double

    ' Step 1: 입력값 읽기
    ' (불꽃님 Excel 구조에 맞춰 조정 예정)

    ' Step 2: 초기값 설정
    For i = 1 To N
        X(i) = 0
        R(i) = B(i)
        D(i) = R(i)
    Next i

    ' Step 3: 반복 시작
    For k = 1 To max_iter
        ' TI = A * D
        ' lambda = (DᵗR) / (DᵗAD)
        ' X = X + lambda * D
        ' R = R - lambda * TI
        ' alpha = RᵗR / (이전 RᵗR)
        ' D = R + alpha * D

        ' 결과 기록 및 수렴 검사
        If lambda < tol And residual < tol Then Exit For
    Next k

End Sub

✅ 위 코드는 구조만 보여주는 것이며, 실제 셀 주소에 따라 배열 및 출력 구조를 조정해야 함.


3. 결과 출력 시트 구성 (자동 기록)

내용
AIteration 번호
B~각 xi
다음열λ 값
다음열Residual norm (‖rk‖)

→ Sheet 이름: CGM_Result


4. Residual 수렴 그래프 만들기

Residual Norm 계산 공식:

‖rₖ‖ = sqrt(rₖᵗ · rₖ)

이 값들을 CGM_Result 시트에 기록한 후,
Excel에서 반복 횟수 vs 잔차 그래프를 만들자.
✔ Y축은 Log Scale(로그 스케일) 로 설정하면 수렴속도가 더 잘 드러난다.


5. 전체 시트 구성 제안

시트명설명
Input초기 조건 및 계수 행렬 입력
CGM_Result반복값 자동 저장
Graph (선택)그래프 전용 시트로 따로 분리해도 좋음

마무리하며

이번 포스팅을 통해 우리는 CGM 알고리즘을 Excel VBA로 구현하고,
잔차 감소를 그래프로 시각화하는 데까지 해봤다.
구조해석이나 FEM 실무에서 반복수렴 해법을 사용할 때,
이와 같은 직접 구현과 시각화는 알고리즘 신뢰도를 높이는 데 큰 도움이 된다.


다음 포스팅 예고

  • CASE2 (6x6) 예제로 CGM과 LU 분해 결과 비교
  • 구조 FEM 모델에 CGM 응용하기
  • Sparse Matrix를 활용한 고속 수치해석 소개

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

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