DS가 되기 위한 여정 👩‍💻

AI/Linear Algebra, Math

[elice 머신러닝] 랭크를 활용한 선형 방정식

Tashapark 2025. 5. 4. 16:38
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
반응형