Mathematics/Linear algebra

LU분해 쉽게 하기

jwjwvison 2022. 3. 3. 13:10

 행렬을 가우스 행렬의 형태로 바꿀 때 곱하는 수를 기억해야 한다. 이때, 행렬 A의 주 대각 원소를 1로 바꾸기 위해 곱하는 수의 역수는 행렬 L의 주 대각 원소가 된다. 그리고 행렬 A의 주 대각 원소 아래에 위치한 원소를 0으로 만들기 위해 필요한 배수의 음수를 행렬 L의 위치에 놓는다.

 

 

 1. 먼저 1행 1열의 원소를 1로 만들기 위해 1행에 1/2를 곱한다. 이를 계산하면 다음과 같다.

 이는 주대각 원소를 1로 바꾸기 위한 연산이였으므로 앞서 곱한 수 1/2의 역수인 2가 행렬의 1행 1열 원소가 된다.

 

 2. 3행 1열 원소를 0으로 만들기 위해 3행에 1행을 더한다. 이때, 1행에 따로 곱하는 수는 없으므로 배수는 1에 해당한다.

 3행 1열의 원소는 주 대각 원소가 아닌 주 대각 원소 아래에 위치하므로 해당 원소를 0으로 만들기 위한 배수의 음수인 -1을 행렬의 3행 1열 원소에 넣는다.

 

 3. 2행 2열 원소를 1로 만들기 위해 2행에 -1/2을 곱한다.

 4. 3행 2열 원소를 0으로 만들기 위해 2행에 -4를 곱하고 3행에 더한다.

 

5. 마지막으로 3행 3열 원소를 1로 만들기 위해 3행에 1/5를 곱해준다.

 위 행렬을 보면 기존 행렬 A를 가우스 행렬로 변형시킨 것을 알 수 있으며 위 행렬이 LU분해의 U행렬에 해당한다.

 

 scipy 실습

import numpy as np
from scipy.linalg import lu

A=np.array([[2,-2,-2],[0,-2,2],[-1,5,2]])
P,L,U=lu(A)
print(L)
'''
[[ 1.   0.   0. ]
 [-0.5  1.   0. ]
 [ 0.  -0.5  1. ]]
'''
print(U)

'''
[[ 2.  -2.  -2. ]
 [ 0.   4.   1. ]
 [ 0.   0.   2.5]]
'''

'Mathematics > Linear algebra' 카테고리의 다른 글

텐서  (0) 2022.03.03
행렬의 이차식  (0) 2022.03.03
LU분해  (0) 2022.03.03
기본 행렬  (0) 2022.03.03
대각화, 고윳값 분해, 특이값 분해  (0) 2022.03.01