[수치해석 따라잡기] 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. 결과 출력 시트 구성 (자동 기록)
열 | 내용 |
---|---|
A | Iteration 번호 |
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를 활용한 고속 수치해석 소개
'4. 구조연구실 > 4.1 수치해석 따라잡기' 카테고리의 다른 글
[수치해석 따라잡기] 구조해석의 친구, Conjugate Gradient Method (0) | 2025.06.02 |
---|