Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- matplotlib
- 텐서플로
- MySQL
- 블로그
- tensorflow
- 파이썬 시각화
- Python
- Google Analytics
- Blog
- Tistory
- Visualization
- 시각화
- Linux
- SQL
- python visualization
- 서평
- 딥러닝
- 통계학
- 매틀랩
- 독후감
- 서평단
- 한빛미디어서평단
- 한빛미디어
- Ga
- 리눅스
- Pandas
- 티스토리
- 월간결산
- 파이썬
- MATLAB
Archives
- Today
- Total
pbj0812의 코딩 일기
[수학] 가우스 조던 소거법을 통한 연립방정식 계산(python) 본문
0. 목표
- 가우스 조던 소거법을 통한 연립방정식 계산(python 사용)
- 아래식의 해 도출
y -3z = -5
2x + 3y -z = 7
4x + 5y - 2z = 10
1. 이론
- 예제 링크
2. 실습
1) library 호출
import numpy as np
import copy
2) 데이터 생성
- x, y, z 순서대로 a 행렬 생성
* .0을 붙이지 않고 정수 형태로 만들경우 뒷 부분의 나눗셈 부분에서 정수로 떨어짐
a = np.array([[0.0, 1.0, -3.0], [2.0, 3.0, -1.0], [4.0, 5.0, -2.0]])
b = np.array([[-5.0], [7.0], [10.0]])
3) 확인용 함수
def check(a, b):
print(a)
print('=================')
print(b)
4) 행렬 내부 위치 바꾸는 함수
- deepcopy를 쓰지 않을 경우 얕은복사로 인하여 tmp의 값이 변화됨
def change(inp_list, inp1, inp2):
tmp = copy.deepcopy(inp_list[inp1])
inp_list[inp1] = inp_list[inp2]
inp_list[inp2] = tmp
result = inp_list
return inp_list
5) 1열 2열 위치 변경
a = change(a, 0, 1)
b = change(b, 0, 1)
check(a, b)
[[ 2. 3. -1.]
[ 0. 1. -3.]
[ 4. 5. -2.]]
=================
[[ 7.]
[-5.]
[10.]]
6) 1열 1행을 1로 만들기 위해(x 값을 1로 만들기 위해) 2씩 나눠줌
a[0] = a[0] / 2
b[0] = b[0] / 2
check(a, b)
[[ 1. 1.5 -0.5]
[ 0. 1. -3. ]
[ 4. 5. -2. ]]
=================
[[ 3.5]
[-5. ]
[10. ]]
7) 3행 = 3행 - (1행 * 4)
a[2] = a[2] - (a[0] * 4)
b[2] = b[2] - (b[0] * 4)
check(a, b)
[[ 1. 1.5 -0.5]
[ 0. 1. -3. ]
[ 0. -1. 0. ]]
=================
[[ 3.5]
[-5. ]
[-4. ]]
8) 3행 = 3행 + 1행
a[2] = a[2] + a[1]
b[2] = b[2] + b[1]
check(a, b)
[[ 1. 1.5 -0.5]
[ 0. 1. -3. ]
[ 0. 0. -3. ]]
=================
[[ 3.5]
[-5. ]
[-9. ]]
9) 3행 = 3행 / (-3)
a[2] = a[2] / (-3)
b[2] = b[2] / (-3)
check(a, b)
[[ 1. 1.5 -0.5]
[ 0. 1. -3. ]
[-0. -0. 1. ]]
=================
[[ 3.5]
[-5. ]
[ 3. ]]
10) 2행 = 2행 + (3행 * 3)
a[1] = a[1] + (a[2] * 3)
b[1] = b[1] + (b[2] * 3)
check(a, b)
[[ 1. 1.5 -0.5]
[ 0. 1. 0. ]
[-0. -0. 1. ]]
=================
[[3.5]
[4. ]
[3. ]]
11) 1행 = 1행 + (3행 * (1/2))
a[0] = a[0] + (a[2] * 1/2)
b[0] = b[0] + (b[2] * 1/2)
check(a, b)
[[ 1. 1.5 0. ]
[ 0. 1. 0. ]
[-0. -0. 1. ]]
=================
[[5.]
[4.]
[3.]]
12) 1행 = 1행 - (2행 * (3/2))
a[0] = a[0] - (a[1] * (3/2))
b[0] = b[0] - (b[1] * (3/2))
check(a, b)
[[ 1. 0. 0.]
[ 0. 1. 0.]
[-0. -0. 1.]]
=================
[[-1.]
[ 4.]
[ 3.]]
2. 결과
x = -1, y = 4, z = 3
3. 참고
'Science > 수학' 카테고리의 다른 글
[수학] python으로 최대공약수, 최소공배수 구하기(사람처럼 생각하기) (0) | 2020.09.25 |
---|---|
[수학] python을 이용한 파스칼의 삼각형 구현 (0) | 2020.09.23 |
[수학] python을 이용한 집합 연산하기 (0) | 2020.09.22 |
[수학] 최단 연결법 계산을 통한 덴드로그램 그리기 (0) | 2020.09.08 |
[수학] python으로 유클리드 거리 계산하기 (0) | 2020.09.07 |
Comments