'np.linalg.solve', 'sp.sparse.linalg.spsolve', 'gmres' 방법은 모두 선형 시스템을 푸는데 사용됩니다. 선형 시스템이란, 다음과 같은 형태의 방정식들의 집합을 의미합니다.
여기서
NumPy 패키지에 포함되어 있는 np.linalg.solve 함수는, 행렬
import numpy as np
# Ax=b 형태의 선형 시스템 설정
A = np.array([[3, 2, 1], [2, 3, 1], [1, 1, 2]])
b = np.array([1, 2, 3])
# np.linalg.solve 함수 사용
x = np.linalg.solve(A, b)
print("x =", x)
SciPy 패키지에 포함되어 있는 sp.sparse.linalg.spsolve 함수는, 희소 행렬(sparse matrix)
import numpy as np
from scipy.sparse.linalg import spsolve
from scipy.sparse import csc_matrix
# Ax=b 형태의 선형 시스템 설정
A = csc_matrix([[3, 0, 1], [0, 3, 0], [1, 0, 2]])
b = np.array([1, 2, 3])
# sp.sparse.linalg.spsolve 함수 사용
x = spsolve(A, b)
print("x =", x)
GMRES(Generalized Minimal Residual)는 대칭성이 없는 선형 시스템
GMRES 방법은 iterative한 방법이기 때문에, 최적의 근사해를 찾기 위해서는 많은 반복이 필요할 수 있습니다. 따라서, gmres 함수를 사용할 때는 반복 횟수와 수렴 기준값을 적절히 조정하여 최적의 근사해를 구하는 것이 중요합니다.
import numpy as np
from scipy.sparse.linalg import gmres
from scipy.sparse import csc_matrix
# Ax=b 형태의 선형 시스템 설정
A = csc_matrix([[3, 0, 1], [0, 3, 0], [1, 0, 2]])
b = np.array([1, 2, 3])
# gmres 함수 사용
tolerance = 1e-5
max_iter = 100
x, info = gmres(A, b, tol=tolerance, maxiter=max_iter)
print("x =", x)
print("info =", info)
위 예제 코드에서 np.linalg.solve는 dense matrix(밀집 행렬)을 다루기 때문에, 예제에서는 밀집 행렬을 사용하였습니다. sp.sparse.linalg.spsolve는 sparse matrix(희소 행렬)을 다루기 때문에, 예제에서는 csc_matrix를 사용하여 행렬을 정의하였습니다. GMRES 방법은 sparse matrix에서도 잘 동작하기 때문에, 예제에서도 csc_matrix를 사용하였습니다. GMRES 방법은 수렴하도록 tolerence 값과 max_iter 값을 설정해주어야 합니다. 예제 코드에서는 tolerence 값이 1e-5이고, max_iter 값이 100으로 설정되어 있습니다.
np.linalg.solve 함수는
따라서, 선형 시스템을 푸는데 있어서는
Pandas DataFrame을 Excel 파일로 저장하는 방법 (0) | 2023.07.01 |
---|---|
`np.sqrt()` 함수와 제곱 연산자 `**` 비교 (0) | 2023.06.16 |
numpy에서 squared norm 계산하는 방법 (0) | 2023.06.15 |
두 NumPy 배열을 비교하는 방법 (0) | 2023.04.06 |
댓글 영역