역문제 vs 순문제


역문제: 역문제란 $y=ax$와 같이 $y$을 알고, 원인 $x$을 추정하는 형태의 문제를 역문제라고함.

순문제: 순문제는 역문제와 반대로 x에서 y을 예측하는 문제를 순문제라고 함.

 

정칙성과 행렬


정칙행렬(Nonsingular matrix, regular matrix): 정칙행렬은 역행렬이 존재하는 정방행렬을 말한다. 

특이행렬(Singular matrix): 정칙행렬과 반대로 역행렬이 존재하지 않는 경우를 말한다.

 

 

연립일차방정식의 해법


$y=ax$와 같이 연립방정식의 해가 있는 경우는 A을 구할 수 있다. 즉, A가 정칙행렬인 경우에는 x을 구할 수 있다는 말이다.

연립일차방정식의 풀이는 정칙행렬인 경우 1) 변수소거법, 2)가우스 요르단 소거법, 3)역행렬을 계산으로 풀 수 있다.

 

1) 변수 소거법의 핵심은 $(I|S)(\frac{x}{-1})=o$ 을 만드는 것이다. 예를 들어, $A=\begin{bmatrix}
2 &  3& 3\\ 
3 &  4& 2\\ 
-2 &  -2& 3
\end{bmatrix}$, $y=\begin{bmatrix}
9\\ 
9\\ 
2
\end{bmatrix}$ 인 경우

- Step 1) $=O$꼴로 만든다.  \begin{bmatrix}
2 &  3&  3& 9\\ 
3 &  4&  2& 9\\ 
-2 &  -2&  3& 2 
\end{bmatrix} \begin{bmatrix}
x_{1}\\ 
x_{2}\\ 
x_{3}\\ 
-1
\end{bmatrix}=\begin{bmatrix}
0\\ 
0\\ 
0
\end{bmatrix}

- Step 2) A을 단위 행렬 로 만든다. 아래와 같이 대각행렬이 I인 행렬을 만든다.

=> 요약하면 $( I | S) (\frac{x}{-1})=o$의 꼴로만드는 것이 골자이다. (S은 상수들, |은 행렬의 이어붙이기)

다음은 numpy을 이용한 변수소거법의 예시이다.

import numpy as np

A = np.array([[2,3,3],[3,4,2],[-2,-2,3]], dtype=np.float32) # (3,3)
y = np.array([[9,9,2]], dtype=np.float32).T  # 열벡터 (3,1)
x = np.array([0,0,0], dtype=np.float32)

Ay = np.concatenate([A, y], axis=1)
print(Ay)
[[ 2.  3.  3.  9.]
 [ 3.  4.  2.  9.]
 [-2. -2.  3.  2.]]
 
 
Ay[0, :] = 1/2 * Ay[0, :]
print(Ay)
[[ 1.   1.5  1.5  4.5]
 [ 3.   4.   2.   9. ]
 [-2.  -2.   3.   2. ]]
 

Ay[1, :] = Ay[1, :] + -3 *Ay[0, :]
print(Ay)
[[ 1.   1.5  1.5  4.5]
 [ 0.  -0.5 -2.5 -4.5]
 [-2.  -2.   3.   2. ]]
 
Ay[1, :] = -2*Ay[1, :]
print(Ay)   # 행에 (-2배)
[[ 1.   1.5  1.5  4.5]
 [-0.   1.   5.   9. ]
 [-2.  -2.   3.   2. ]]
 
# 3행의 첫원소도 0으로 바꿔줌
Ay[2, :] = Ay[2, :] +2*Ay[0, :]
print(Ay)
[[ 1.   1.5  1.5  4.5]
 [-0.   1.   5.   9. ]
 [ 0.   1.   6.  11. ]]
 
# 3행의 두번째 원소도 0으로 바꿔줌
Ay[2, :] = Ay[2, :] - Ay[1, :]
print(Ay)
[[ 1.   1.5  1.5  4.5]
 [-0.   1.   5.   9. ]
 [ 0.   0.   1.   2. ]]
 
# 2행의 마지막원소 [5]을 [0]으로
Ay[1, :] = Ay[1, :] - 5*Ay[2, :]
print(Ay)
[[ 1.   1.5  1.5  4.5]
 [-0.   1.   0.  -1. ]
 [ 0.   0.   1.   2. ]]
 
# 1행의 1원소 [1] 제외하고 모두 [0]으로
Ay[0, :] = Ay[0,:] - 1.5 * Ay[1, :] - 1.5*Ay[2,:]
print(Ay)
[[ 1.  0.  0.  3.]
 [-0.  1.  0. -1.]
 [ 0.  0.  1.  2.]]
 
x = Ay[:, -1]
print(x)

[ 3. -1.  2.]
print(A@x)
[9. 9. 2.]

 

피보팅(Pivoting):  A의 꼴을 I로 만드는 가우스-요르단 소거법으로 연립방정식을 풀 때, 각 행의 앞의 원소가 0이어서 1만들수 없는 경우. $\begin{bmatrix}
0 & 1 & 6 & 11\\ 
3 & 2 & 5 & 7\\ 
5 & 2 & 1 & 2
\end{bmatrix} \rightarrow \begin{bmatrix}
3 & 2 & 5 & 7\\ 
0 & 1 & 6 & 11\\ 
5 & 2 & 1 & 2
\end{bmatrix}$

핵(Kernel): 주어진 A에 의해 $Ax=o$으로 이동해오는것과 같은 x의 집합을 A의 kernel이라고함. 표기: $Ker A$

상(Image): 주어진 A에 대해 x을 여러모로 움직인 경우에 A로 옮기는 y=Ax의 집합을 A의 상. 원래공간은 A을 이용해 옮긴 영역을 말함. 표기 $Im A$

 

특이행렬.


연립방정식에서 주어진 단서가 일치하는 경우. 예를 들어, 찾고자하는 x는 4개의 원소이고, 알고있는 y, A의 원소도 4개(4x4)이다. 그런데, 사실A의 단서인 열들이 겉보기에는 단서가 4개이지만, 사실 1개는 중복이어서 실질적으로 3개인 것을 의미한다.

이러한 단서의 실질적인 갯수를 랭크(rank) 라고한다.

A = np.array([[2,3,3],[3,4,2],[-2,-2,3]], dtype=np.float32) # (3,3)
rank_A = np.linalg.matrix_rank(A)
print(rank_A)

# 3

일대일 사상: "같은 결과 y결과가 나오는 원인 x가 유일한가 ?"

위로의 사상: "어떤 결과 y가 나와도, 그 원인 x가 무조건 존재하는가"

반응형

+ Recent posts