Divide and Conquer

Gauss 소거법 Gauss Elimination 본문

성장캐/수치해석

Gauss 소거법 Gauss Elimination

10살 2022. 4. 25. 22:44
728x90

확장 행렬의 개념 사용, 선을 긋고 종속 벡터를 같이 써줌
가우스는 에셜런 형태로 만드는 과정이야 (주대각 아래를 다 0으로)

  1. 확장 행렬 만들어
  2. 에셜런 형태로 만드는 연산 반복

피봇
각 행의 대각선에 있는 요소들

피보팅
방정식의 순서를 바꾸는 것(행렬의 위아래 순서 등)
계산상의 문제를 해결할 뿐만 아니라 오차를 줄여주는 역할도 함
[0,1][1,0] 항등 행렬에서 만들고 싶은 피봇팅대로 변환하면 된다 이게 피봇팅 매트릭스

부분 피보팅 paritial pivoting
→ 주대각이 가장 크도록 하는 피봇팅
방정식의 각 행에서 피보팅을 하게 될 열을 모두 살펴보아서 가장 큰 계수가 있는 행이 피보팅 계수가 되도록 순서를 바꾸는 방식

주대각으로 나눠주기 때문에 주대각의 숫자가 큰 게 좋다
작은 값이 커지면 오차가 커진다(주대각이 큰 게 좋다)

numpy.linalg.solve(a, b)
import numpy as np
from numpy.linalg import solve

a = np.array([[1, 3, -5], [2, -9, 4], [3, 1, 2]])
b = np.array([2, 5, -3])
x = solve(a, b)
print( 'x = ', x)

# AX=B 일 때, X=A(역행렬)B 임을 확인
ainv = np.linalg.inv(a) 
x = ainv.dot(b)
print("x =",x)

# 위의 근이 올바른지 체크
np.allclose(np.dot(a, x), b)
반응형

'성장캐 > 수치해석' 카테고리의 다른 글

LU 분해 LU decomposition  (0) 2022.06.21
수치미분 numerical differentiation  (0) 2022.06.20
선형 연립방정식의 해법  (0) 2022.04.25
할선법 Secant Method  (0) 2022.04.25
뉴튼랩슨 Newton-Raphson  (0) 2022.04.25
Comments