728x90
*elice 문제
랭크를 활용한 선형 방정식
행렬 의 랭크는 column spaces의 기저를 의미합니다. 이러한 랭크는 선형 방정식 의 해의 종류를 판별할 때 사용되기도 합니다.
이번 실습에서는 선형 방정식 를 풀어 해의 존재 여부를 판별하고 존재 한다면 그 해를 구합니다.
주어진 선형 방정식은 아래 수식을 만족합니다.
- 아래가 코드인 건데.. 솔직히 활용도나 왜 쓰는 지가 전혀 이해되지 않음.
import numpy as np
import scipy
import scipy.linalg
# A,b 초기화
A = np.array([[1, 2, 3],[2, -1, -1], [3, 1, 2]])
b = np.array([[1],[2],[3]])
# 유일한 해를 갖는지 확인
rank_A = np.linalg.matrix_rank(A)
if rank_A == max(A.shape):
print("행렬 A는 유일한 해를 가짐\n")
else:
print("행렬 A는 무한한 해를 가짐\n")
# A의 Null space 벡터를 계산
ns = scipy.linalg.null_space(A)
print("행렬 A의 null space 벡터: \n{}\n".format(ns))
# Ax=b가 무한한 해를 갖는다면 x1 이외의 해 중 하나인 x2를 계산
# A의 Null space를 사용하여 또 다른 해를 구하세요.
x1 = np.array([[1],[0],[0]])
x2 = np.array([[1], [0],[0]]) + ns
# 해가 맞는지 출력하여 확인
print("Ax1 = \n{}".format(np.dot(A,x1)))
print("Ax2 = \n{}".format(np.dot(A,x2)))
// 고유값, 고유 벡터 계산하고, 저장하기
* plot그리는 코드도 있음.
import numpy as np
from numpy import linalg as LA
import matplotlib.pyplot as plt
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# A 초기화
A = np.array([[1,2],[2,0]])
# 고유값, 고유 벡터 행렬 계산
w,v = np.linalg.eig(A)
print('eigen value: {}\n'.format(w))
print('eigen vector: \n{}\n'.format(v))
# 행렬로 묶인 2개의 고유 벡터를 나눠 저장
v1 = v[:,0]
v2 = v[:,1]
# 각 고유 벡터를 A로 선형 변환하여 저장
Av1 = np.dot(A, v1)
Av2 = np.dot(A, v2)
origin = [0], [0]
plt.quiver(*origin, [v1[0],v2[0],Av1[0],Av2[0]], [v1[1],v2[1],Av1[1],Av2[1]], color=['r','b','g','c'], angles='xy', scale_units='xy',scale=1)
plt.axis([-5,5,-5,5])
plt.grid(True)
plt.savefig("image.png")
elice_utils.send_image("image.png")
728x90
반응형
'AI > Linear Algebra, Math' 카테고리의 다른 글
[elice 머신러닝] 미분 기초, 편미분 (0) | 2025.05.04 |
---|---|
[elice 머신러닝] 선형변환과 행렬 분해 (0) | 2025.05.04 |
[Essence of linear algebra] ch3. Linear transformations and matrices (1) | 2025.05.04 |
[Essence of linear algebra] ch2. Linear combinations, span, and basis vectors (0) | 2025.05.04 |
[Essence of linear algebra] ch1. Vectors (0) | 2025.05.03 |