알고리즘의 단계별 설명

Sholesky 분해 알고리즘은 주어진 양의 정부호 행렬 \mathbf{A}를 하삼각행렬 \mathbf{L}과 그의 전치행렬 \mathbf{L}^T의 곱으로 분해하는 방법이다. 수학적으로, \mathbf{A} = \mathbf{L} \mathbf{L}^T로 표현된다. 이 알고리즘을 단계별로 설명하겠다.

단계 1: 행렬 초기화

먼저 분해하고자 하는 행렬 \mathbf{A}n \times n 행렬로 정의한다. Sholesky 분해는 대칭행렬의 특성을 이용하므로 \mathbf{A}는 반드시 대칭이어야 한다.

\mathbf{A} = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{12} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{1n} & a_{2n} & \cdots & a_{nn} \end{pmatrix}

단계 2: 하삼각행렬 \mathbf{L} 초기화

하삼각행렬 \mathbf{L}의 모든 원소를 0으로 초기화한다.

\mathbf{L} = \begin{pmatrix} l_{11} & 0 & \cdots & 0 \\ l_{21} & l_{22} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ l_{n1} & l_{n2} & \cdots & l_{nn} \end{pmatrix}

단계 3: 대각선 원소 계산

대각선 원소 l_{ii}는 다음과 같이 계산된다.

l_{ii} = \sqrt{ a_{ii} - \sum_{k=1}^{i-1} l_{ik}^2 }

예를 들어, 첫 번째 대각선 원소 l_{11}는 다음과 같이 계산된다.

l_{11} = \sqrt{ a_{11} }

단계 4: 비대각선 원소 계산

대각선 아래의 원소 l_{ij} (i > j)는 다음과 같이 계산된다.

l_{ij} = \frac{1}{l_{jj}} \left( a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk} \right)

예를 들어, l_{21}는 다음과 같이 계산된다.

l_{21} = \frac{1}{l_{11}} \left( a_{21} \right)

단계 5: 과정을 반복하여 \mathbf{L} 완성

알고리즘은 i=1부터 n까지 반복해서 \mathbf{L}의 모든 원소를 계산한다. 대각선 원소와 비대각선 원소를 차례로 계산하여 \mathbf{L} 행렬을 완성한다.

이를 요약하면, 전체 알고리즘은 다음과 같은 반복 형태로 이루어진다.

for i in range(n):
    for j in range(i+1):
        if i == j:
            L[i][i] = sqrt(A[i][i] - sum(L[i][k]**2 for k in range(i)))
        else:
            L[i][j] = (A[i][j] - sum(L[i][k] * L[j][k] for k in range(j))) / L[j][j]

단계 6: \mathbf{L}의 검증

최종적으로, 분해된 하삼각행렬 \mathbf{L}을 이용해 \mathbf{L} \mathbf{L}^T를 구하고, 이를 원래의 행렬 \mathbf{A}와 비교하여 정확성을 검증할 수 있다.

\mathbf{A} \approx \mathbf{L} \mathbf{L}^T