파이썬 numpy, scipy 패키지를 이용해 주어진 행렬에 대한 LU 분해를 구하는 코드를 작성합니다.
참고자료: 링크
다음의 3x3 행렬 를 정의하는 numpy 코드를 작성하시오.
import numpy as np
import scipy.linalg
# 행렬 코딩
## TODO
A = np.array([[3, 1, 1], [1, -2, -1], [1, 1, 1]])
print(A)
print(np.shape(A))
앞서 정의한 행렬 에 대해 LU 분해, 를 수행하는 scipy 코드를 작성하시오.
# PLU 분해
## TODO
P, L, U = scipy.linalg.lu(A)
print("P:", P)
print("L:", L)
print("U:", U)
AA = P @ L @ U
print("AA:", AA)
다음의 3-벡터 를 정의하는 numpy 코드를 작성하시오.
# 벡터 코딩
## TODO
b = np.array([4, 1, 2])
print(b)
print(np.shape(b))
행렬 에 대한 LU 분해를 이용해 를 계산하는 scipy 코드를 작성하시오.
# LU 분해
## TODO
lu, piv = scipy.linalg.lu_factor(A)
x = scipy.linalg.lu_solve((lu, piv), b)
print("x:", x)
print(np.shape(x))
앞서 LU 분해를 이용해 구한 가 선형시스템 의 해(solution)로서 알맞게 구한 것인지 검증하는 코드를 작성하시오.
방법: 의 연산결과가 와 충분히 가까운지를 검증한다. [참고자료: 링크]
## 결과 검증
# TODO
bb = A @ x
if np.allclose(b, bb):
print("Ok")
else:
print("something wrong")