인공지능수학 3주차

wi_label·2021년 11월 28일
1

Graduate school

목록 보기
5/17

과제 목표

파이썬 numpy, scipy 패키지를 이용해 주어진 행렬에 대한 LU 분해를 구하는 코드를 작성합니다.

참고자료: 링크

행렬 AA 정의

다음의 3x3 행렬 AA를 정의하는 numpy 코드를 작성하시오.

A=[311121111]A = \left[ \begin{array}{rrr} 3 & 1 & 1 \\ 1 & -2 & -1 \\ 1 & 1 & 1 \end{array} \right]
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))

행렬 AA의 LU 분해 계산

앞서 정의한 행렬 AA에 대해 LU 분해, A=PLUA = PLU를 수행하는 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-벡터 b\mathbf{b}를 정의하는 numpy 코드를 작성하시오.

b=[412]\mathbf{b} = \left[ \begin{array}{rrr} 4 \\ 1 \\ 2 \end{array} \right]
# 벡터 코딩

## TODO
b = np.array([4, 1, 2])

print(b)
print(np.shape(b))

LU-분해를 이용해 선형시스템 Ax=bA \mathbf{x} = \mathbf{b} 풀기

행렬 AA에 대한 LU 분해를 이용해 Ax=bA\mathbf{x} = \mathbf{b}를 계산하는 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 분해를 이용해 구한 x\mathbf{x}가 선형시스템 Ax=bA\mathbf{x} = \mathbf{b}의 해(solution)로서 알맞게 구한 것인지 검증하는 코드를 작성하시오.

방법: AxA\mathbf{x}의 연산결과가 b\mathbf{b}와 충분히 가까운지를 검증한다. [참고자료: 링크]

## 결과 검증

# TODO
bb = A @ x

if np.allclose(b, bb):
  print("Ok")
else:
  print("something wrong")
profile
옥은 부서질 지언정 흰 빛을 잃지 않고, 대나무는 불에 탈 지언정 그 곧음을 잃으려 하지 않는다.

0개의 댓글