728x90
반응형

연립일차방정식과 가우스 소거법

  • 앞서 행렬은 연립일차방정식의 계수와 변수를 분리하여 사용하게 되면서 등장하였다고 했다.
  • 앞서 행렬의 기본적인 성질은 배웠으니, 이제 연립일차방정식과 행렬이 어떻게 연결되는지에 대해 알아보자.
  • 연립일차방정식을 통해 첨가 행렬을 만들어보고, 가우스 소거법으로 연립일차방정식을 풀이해보자.

 

 

 

 

1. 연립일차방정식(System of Linear equations)

1.1. 일차방정식(Linear equation)

  • 미지수 $x_1, x_2, x_3, ..., x_n$에 관한 일차방정식은 상수 $b$와 계수 $a_1, a_2, a_3, ..., a_n$이 실수일 때, 다음과 같은 꼴로 나타나는 방정식이다.
  • 일차방정식이므로, 미지수 $x_1, x_2, x_3, ..., x_n$의 차수는 1이다.

$$a_1x_1 + a_2x_2 + a_3x_3 + \cdots a_nx_n = b$$

 

1.2. 연립일차방정식(System of Linear equations)

  • 미지수 $x_1, x_2, x_3, ..., x_n$에 대하여 유한개의 일차방정식 모임은 아래와 같다.

$$a_{11}x_1 + a_{12}x_2 + a_{13}x_3 + \cdots a_{1n}x_n = b_1$$

$$a_{21}x_1 + a_{22}x_2 + a_{23}x_3 + \cdots a_{2n}x_n = b_2$$

$$a_{31}x_1 + a_{32}x_2 + a_{33}x_3 + \cdots a_{3n}x_n = b_3$$

$$ \vdots $$

$$a_{m1}x_1 + a_{m2}x_2 + a_{m3}x_3 + \cdots a_{mn}x_n = b_m$$

  • 실수 $b_1, b_2, b_3, ..., b_m$이 모두 0이면 이 연립방정식을 동차(Homogeneous)라 하며, 반대의 경우에는 비동차(non-Homogeneous)라 한다.
  • 미지수 $x_1, x_2, x_3, ..., x_n$에 대하여 어떤 수 $s_1, s_2, s_3, ..., s_n$을 각각 대입하여, 각 방정식이 모두 성립하면 어떤 수 $s_1, s_2, s_3, ..., s_n$을 연립일차방정식의 해(Solution)이라 한다.
  • 연립일차방정식의 해 전체 집합을 연립일차방정식의 해집합(Solution set)이라 한다.
  • 동일한 해집합을 가지는 두 연립일차방정식을 동치(Equivalent)라고 한다.
  • 연립일차방정식의 해에 대하여, 일반적으로 다음 중 하나가 성립한다.
  1. 해를 갖지 않는다.
  2. 유일한 해를 갖는다.
  3. 무수히 많은 해를 갖는다.

 

1.3. 연립일차방정식과 행렬

  • 위 연립일차방정식을 행렬로 나타내면 다음과 같다.

$$A = \begin{pmatrix}
 A_{11}& A_{12} & A_{13}  & ... & A_{1n}\\ 
 A_{21}& A_{22} & A_{23}  & ... & A_{2n}\\ 
 A_{31}& A_{32} & A_{33}  & ... & A_{3n}\\ 
 \vdots & \vdots & \vdots & \ddots & \vdots\\
 A_{m1}& A_{m2} & A_{m3}  & ... & A_{mn}\\
\end{pmatrix},\ \ \  

X = \begin{pmatrix}
x_1\\ 
x_2\\ 
x_3\\ 
\vdots \\
x_n
\end{pmatrix},\ \ \ 

B = \begin{pmatrix}
b_1\\ 
b_2\\ 
b_3\\ 
\vdots \\
b_m
\end{pmatrix}$$

$$AX = B$$

  • 우리가 지금까지 봐왔던, 행렬은 바로 $A$로 이를 계수행렬(Coefficient matrix)라 한다.

 

 

 

 

2. 첨가행렬(Augmented matrix)

  • 계수행렬 $A$와 상수항들이 모여서 만들어진 행렬$B$를 붙이면 첨가행렬(Augmented matrix)가 만들어진다.

$$(A | B) = \begin{pmatrix}
 A_{11}& A_{12} & A_{13}  & ... & A_{1n} | b_1\\ 
 A_{21}& A_{22} & A_{23}  & ... & A_{2n} | b_2\\ 
 A_{31}& A_{32} & A_{33}  & ... & A_{3n} | b_3\\ 
 \vdots & \vdots & \vdots & \ddots & \ \ \ \vdots \ \ | \ \vdots \\
 A_{m1}& A_{m2} & A_{m3}  & ... & A_{mn} | b_m\\
\end{pmatrix}$$

  • 첨가행렬은 행렬 방정식의 풀이와 역행렬 구하기에 응용된다.
  • 가우스 소거법을 사용하여 연립일차방정식을 풀이해보자.

 

 

 

 

3. 가우스 소거법(Gaussian elimination)

  • 선형대수학에서, 가우스 소거법은 연립일차방정식을 풀이하는 알고리즘으로, 풀이 과정에서 일부 미지수가 차츰 소거되어, 남은 미지수에 대한 선형 결합으로 풀이가 완성된다.
  • 가우스 소거법은 보통 행렬을 사용하며, 첨가 행렬을 그와 풀이가 더 간단한 행렬로 변환하여 풀이를 완성한다.
  • 가우스 소거법은 행렬식과 역행렬의 계산에도 응용된다.
  • 가우스 소거법은 맨 위 일차방정식부터 임의의 k를 곱해가며 아래에 있는 일차방정식들을 하나하나 맨 앞의 계수부터 0으로 만들어가는 방법으로, 최종적으로 주대각선의 모든 값이 1인 상삼각행렬을 만들게 된다.
  • 내용이 조금 길기 때문에 손으로 풀어보겠다.

  • 가우스 소거법은 위에서부터 천천히 아래로 내려가면서, 주대각성분이 1인 상삼각행렬을 만들어가면 된다.
  • $①$, 최초 첨가행렬에서 첫 번째 행 $R_1$의 첫 원소인 $A_{11}=4$는 주대각성분이므로 이를 1로 만들어주기 위해, $R_1$에 $\frac{1}{4}$를 곱해주어, $A_{11}=1$로 만들어주었다.
  • $②$, 두 번째 행 $R_2$의 첫 원소인 $A_{21}=2$을 0으로 만들어주기 위해, $R_1$의 인자들에 $-2$를 곱하여 $R_2$에 더해주었다.
  • $③$, 세 번째 행 $R_3$의 첫 원소인 $A_{31}=3$을 0으로 만들어주기 위해, $R_1$의 인자들에 $-3$을 곱하여 $R_3$에 더해주었다.
  • $④$, 두 번째 행 $R_2$의 두 번째 원소인 $A_{22}=\frac{1}{2}$은 주대각성분이므로, $1$로 만들어주기 위해, $2$를 $R_2$에 곱해주었다.
  • $⑤$, 세 번째 행 $R_3$의 두 번째 원소인 $A_{32}=-\frac{33}{4}$를 0으로 만들어주기 위해, $R_2$에 $\frac{33}{4}$를 곱하여, $R_3$에 더해주었다.
  • 이를 통해, 연립일차방정식의 해인 $x=2,\ y=-1,\ z=3$을 찾았다.

 

 

 

 행렬이 연립일차방정식에서 어떻게 나오게 되었고, 행렬을 이용해서 연립일차방정식의 해를 쉽게 찾을 수 있는 가우스 소거법에 대해 간단하게 학습해보았다.

 다음 포스트에서는 가우스 소거법에 대해 좀 더 알아보도록 하자.

728x90
반응형

'Python으로 하는 기초 수학 > 행렬' 카테고리의 다른 글

역행렬(Inverse matrix)  (0) 2021.02.26
영인자(Zero Divisor)  (0) 2021.02.25
행렬의 성질  (0) 2021.02.25
행렬(Matrix)  (0) 2021.02.25
728x90
반응형

역행렬(Inverse matrix)

  • $AA^{-1} = A^{-1}A = E$
  • 선형대수학에서 가역행렬(Invertible matrix)은 그와 곱한 결과가 단위행렬인 행렬$A^{-1}$을 갖는 행렬$A$를 말한다.
  • 이 행렬$A^{-1}$를 행렬 $A$의 역행렬이라고 한다.
  • 고등학교 행렬 문제에서는 교환법칙의 성립 유/무를 묻는 문제가 많이 나온다.
  • 수능 유형 예시)

$$A(A+B)=E \rightarrow AB = BA$$

$$put) A(A + B) = E = (A+B)A\ \rightarrow \ A^2+AB=E=A^2+BA \ \rightarrow \  AB=BA$$

 

 

 

 

1. 역행렬을 구하는 방법

  • 행렬 A가 이차 정사각 행렬일 땐 다음 방법으로 구할 수 있다.

$$A = \begin{pmatrix} a & b\\ c & d \end{pmatrix},\ \ \ A^{-1}=\frac{1}{ad-bc}\begin{pmatrix} d & -b\\ -c & a \end{pmatrix}$$

  • 위 역행렬을 구하는 방법에서 $ad-bc=0$인 경우, 분모가 0이 되므로 역행렬을 만들 수 없다.
  • 즉, $ad-bc$의 값을 통해 역행렬이 존재하는지를 확인할 수 있다.
  • $ad-bc \neq 0$: $A^{-1}$이 존재한다.
  • $ad-bc = 0$: $A^{-1}$이 존재하지 않는다.
  • Python으로 역행렬을 구해보자.
>>> mat = np.array([[2, 1, 5],[0,0,1],[-1,0,2]])
>>> inv_mat = np.linalg.inv(mat)
>>> np.dot(mat, inv_mat)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
  • 만약 역행렬이 존재하지 않는 행렬이라면, 다음과 같은 오류를 반환한다.
>>> mat = np.array([[2, 1],[2,1]])
>>> inv_mat = np.linalg.inv(mat)
---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-12-72ac304bfc31> in <module>
      1 mat = np.array([[2, 1],[2,1]])
----> 2 inv_mat = np.linalg.inv(mat)

...

---> 88     raise LinAlgError("Singular matrix")
     89 
     90 def _raise_linalgerror_nonposdef(err, flag):

LinAlgError: Singular matrix

 

 

 

 

2. 이차 정사각행렬 역행렬 공식의 증명

  • 역행렬 공식의 증명은 가우스 조던 소거법(Gauss-Jordan elimination method)로 구하는 방법과 전치행렬, 소행렬, 여인자를 이용해서 구하는 방법 두 가지가 있다.
  • 그러나 이차 정사각행렬은 비교적 공식이 간단하므로, 옳바른 증명 방법은 아니긴 하지만, 위 기법들을 사용하지 않고도 구할 수 있다.
  • 행렬 $A$와 역행렬 $A^{-1}$을 다음과 같이 정의하자.

$$A=\begin{pmatrix} a & b\\ c & d \end{pmatrix},\ \ A^{-1}=\begin{pmatrix} x & y\\ z & r \end{pmatrix}$$

$$AA^{-1}=E \rightarrow \begin{pmatrix} a & b\\ c & d \end{pmatrix}\begin{pmatrix} x & y\\ z & r \end{pmatrix} = \begin{pmatrix}1 & 0\\ 0 & 1 \end{pmatrix}$$

$$ax + bz = 1 \cdots ①$$

$$ay + br = 0 \cdots ②$$

$$cx + dz = 0 \cdots ③$$

$$cy + dr = 1 \cdots ④$$

  • 위 식을 기반으로 $(ad-bc)$가 만들어지도록 4개의 식을 유도해보자

$$①*c - ③*a = (acx+bcz-c)-(acx+adz)=0\  \rightarrow \ (bc-ad)z = c \cdots ⑤$$

$$①*d-③*b = (adx+bdz-d)-(bcx+bdz)=0\ \rightarrow \ (ad-bc)x = d \cdots ⑥$$

$$②*c-④*a=(acy+bcr)-(acy+adr-a)=0\ \rightarrow \ (bc-ad)r = -a \cdots ⑦$$

$$②*d-④*b=(ady+bdr)-(bcy+bdr-b)=0\ \rightarrow \ (ad-bc)y = -b \cdots ⑧$$

  • ⑤, ⑥, ⑦, ⑧을 볼 때, $ad-bc \neq 0$이다.
  • $ad-bc=0$인 경우, 행렬 $A$가 영행렬이기 때문에 전제가 성립하지 않는다.
  • ⑤, ⑥, ⑦, ⑧의 양변을 $ad-bc$로 나눠보자.

$$⑤ \rightarrow z = \frac{-c}{ad-bc}$$

$$⑥ \rightarrow x = \frac{d}{ad-bc}$$

$$⑦ \rightarrow r = \frac{a}{ad-bc}$$

$$⑧ \rightarrow y = \frac{-b}{ad-bc}$$

  • ⑤, ⑥, ⑦, ⑧으로부터 유도된 $x,y,z,r$를 $A^{-1}$에 대입하자.

$$A^{-1}=\frac{1}{ad-bc} \begin{pmatrix} d & -b\\ -c & a \end{pmatrix}$$

  • 이차 정사각행렬의 역행렬을 구하는 공식이 유도 되었다.

 

 

 

 

3. 역행렬의 성질

3.1. $(A^{-1})^{n} = (A^{n})^{-1}$

  • $A$의 역행렬이 존재하면, $A^n$의 역행렬도 존재한다.
  • 즉, $A^{100}$의 역행렬이 존재한다면, $A^{20}$의 역행렬도 존재한다는 소리다.

 

3.2. $(kA)^{-1} = \frac{1}{k}A^{-1}$

  • 역원의 개념이므로, 상수 k가 뒤집어진다.
  • $k=0$인 경우, 어차피 영행렬이므로, 역행렬이 존재하지 않는다.

 

3.3. $(AB)^{-1} = B^{-1}A^{-1},\ \ (APB)^{-1} = B^{-1}P^{-1}A^{-1}$

 

3.4. 차수가 같은 두 행렬 A,B 모두 역행렬이 존재한다면, AB역시 역행렬이 존재한다.

  • 역, 대우 모두가 참인 성질이다.
  • 역) A, B중 적어도 하나가 역행렬이 존재하지 않는다면, AB의 역행렬 또한 존재하지 않는다.
  • 대우) AB가 역행렬이 없으면, A, B 중 적어도 하나는 반드시 역행렬이 존재하지 않는다.
728x90
반응형

'Python으로 하는 기초 수학 > 행렬' 카테고리의 다른 글

연립일차방정식과 가우스 소거법(Gaussian elimination)  (0) 2021.02.26
영인자(Zero Divisor)  (0) 2021.02.25
행렬의 성질  (0) 2021.02.25
행렬(Matrix)  (0) 2021.02.25
728x90
반응형

영인자(Zero Divisor)

  • $A \neq O,\ B \neq O,\ AB = O$
  • $ A \neq O,\ A^2 = O$
  • 행렬 $A$와 행렬 $B$가 영행렬이 아님에도 불구하고, 행렬 $AB$를 행렬곱하였을 때, 영행렬이 나오는 경우
  • 위에서 보듯 $A$는 제곱하였을 때, 영행렬이 나왔다. 영인자의 존재로 인해 행렬에서는 방정식의 근, 지수법칙을 사용할 수 없다.
  • 고등학교 행렬 문제에서 영인자의 존재는 수많은 반례를 가지고 오므로, 요주의 대상이다.

 

 

1. 영인자의 곱 순서

$$AB = O\ \overset{F}{\rightarrow} BA = O$$

$$ AB = O\ \overset{F}{\rightarrow} BA \neq O $$

  • 영인자는 특정한 배열의 곱에서만 영행렬이 된다.
  • 물론, 예외 역시 존재하기 때문에 $AB = BA = O$이 되는 경우도 존재한다.
>>> mat1 = np.array([[0, 0],[2, -2]])
>>> mat2 = np.array([[1, 0],[1, 0]])
>>> np.dot(mat1, mat2)
array([[0, 0],
       [0, 0]])
       
>>> np.dot(mat2, mat1)
array([[0, 0],
       [0, 0]])

 

 

 

 

2. 영인자는 역행렬을 가지지 않는다.

2.1. 증명

  • 다음과 같은 정사각행렬 $A$가 있다고 하자.
  • $ A \neq O \rightarrow A^2 = O $
  • 위 조건을 만족하는 행렬 $A$는 영행렬이 아니므로, 영인자이다.
  • 정사각행렬이므로, 케일리 헤밀턴의 정리를 사용해보자
  • $ A^2 - (a+d)A + (ad - bc)E = O $
  • $A^2 = O$이고, $A \neq O,\ E \neq O$이므로, $(ad-bc)E = (a+d)A$가 성립해야한다.
  • 그러나, 단위행렬의 배수는 제곱하여 영행렬이 될 수 없으므로, 영인자인 행렬 $A$는 단위행렬의 배수가 아니다.
  • 그러므로, $(a+b)=0, (ad-bc)=0$이 성립한다.
  • $ad-bc=0$이므로, 역행렬 생성 법칙에 따라, 영인자 $A$는 역행렬을 가질 수 없다.

 

2.2. 케일리 헤밀턴 정리(Cayley–Hamilton theorem)

  • 이차 정사각행렬 $A$에 대하여 케일리 헤밀턴 정리를 사용하면, 행렬의 거듭제곱을 아주 쉽게 구할 수 있다.
  • $A \neq kE$일 때 사용 가능하다(행렬 $A$가 단위행렬의 배수가 아닐 때).

$$ A = \begin{pmatrix}
a & b\\ 
c & d
\end{pmatrix} \neq kE $$

$$ A^2 - (a+d)A + (ad - bc)E = O $$

  • 케일리 헤밀턴 정리 사용 예시

$$A = \begin{pmatrix}
1 & 2\\ 
3 & 4
\end{pmatrix}$$

$$A^2 - 5A -2E = O \rightarrow A^2 = 5A + 2E$$

 

2.3. 영인자와 역행렬 관계

  • 위에서 봤듯이 영인자인 행렬은 역행렬이 존재할 수 없다.
  • 반대로 말하자면, 역행렬이 존재하는 행렬은 영인자가 아니라는 소리다.
  • 만약 행렬 $A$와 $B$가 역행렬이 존재한다면 영인자가 아니라는 의미이므로, 다음 공식이 성립한다.

$$(AB)^2 = A^2B^2 \ \overset{T}{\rightarrow}\ AB=BA$$

$$ABAB = AABB$$

$$A^{-1}ABABB^{-1} = A^{-1}AABBB^{-1}$$

$$BA = AB$$

  • 그러나 행렬은 3차 이상에서부터는 성립하지 않는 경우가 많으므로 위 공식도 주의해야한다.

$$(AB)^3 = A^3B^3 \ \overset{F}{\rightarrow}\ AB=BA$$

$$ABABAB = AAABBB$$

$$A^{-1}ABABABB^{-1} = A^{-1}AAABBBB^{-1}$$

$$BABA = AABB$$

  • $BABA = ABAB$와 $BA = AB$는 다르다.

 

 

 

 

3. 영인자와 지수법칙

  • 영인자의 존재로 인해 행렬에서는 지수법칙을 사용하기가 어렵다.
  • 영인자의 존재로 인해 행렬은 지수에 대하여 다음과 같은 성질을 갖는다.

$$A^n(n\geq 3)\ \overset{F}{\rightarrow}\ A=O$$

$$A^n(n\geq 3)\ \overset{T}{\rightarrow}\ A^2=O$$

  • 영인자의 존재로 인해, 위 명제에서 행렬 $A=O$이라고 할 수 없다.
  • 행렬 $A$가 영인자인 경우 $A^2=O$이므로, 그 이상의 차수에서도 모두 영행렬이 나오게 된다.

 

3.1. 지수법칙이 반드시 성립불가한 것은 아니다.

  • 하나의 행렬에서는 지수법칙이 성립한다.

$$A^m*A^n = A^{m+n},\ (m, n \in N)$$

$$(A^m)^n = A^{mn}$$

  • 그러나, 하나의 행렬이 아닌 경우에는 성립하지 않는다.
  • 이는 교환법칙이 성립하지 않기 때문이다.

$$(AB)^n \neq A^nB^n$$

$$ABABABAB \neq AAAABBBB$$

 

3.2. 영인자와 지수법칙

$$(AB)^n = A^nB^n \overset{F}{\rightarrow} AB = BA$$

  • 영인자의 존재로 인해 위 명제는 성립하지 않는다.

 

3.2.1. 증명

  • $AB = O$로 영인자라고 가정해보자.
  • 영인자의 성질로 인해 $BA \neq O$일 수 있다.

$$(AB)^n = O,\ A^nB^n = AA\cdots AABB\cdots BB = O$$

  • 영인자 AB의 존재로 인해 $(AB)^n = A^nB^n$은 성립하였으나, $AB=BA$는 성립하지 않는다.

 

3.2.2. 역은 성립한다.

$$(AB)^n = A^nB^n \overset{T}{\leftarrow} AB = BA$$

  • $AB = BA$라는 말은 $AB$가 영인자인 경우라 할지라도 $AB=BA=O$이 성립하고, 교환 법칙이 성립할수도 있다는 의미이기 때문이다.
728x90
반응형

'Python으로 하는 기초 수학 > 행렬' 카테고리의 다른 글

연립일차방정식과 가우스 소거법(Gaussian elimination)  (0) 2021.02.26
역행렬(Inverse matrix)  (0) 2021.02.26
행렬의 성질  (0) 2021.02.25
행렬(Matrix)  (0) 2021.02.25
728x90
반응형

행렬의 성질

  • 전제: $M_{(m*n)},\ A \in M,\ B \in M, \ C \in M$

 

 

1. 기본 연산

1.1. 행렬의 덧셈과 뺄셈

  • $A + B \in M$, $A - B \in M$
  • 동형인 행렬끼리만 +, -가 가능하다(행렬은 덧셈 뺄셈에 대하여 닫혀 있다.)
>>> Mat1 = np.arange(0, 15).reshape((3,5))
>>> Mat2 = np.full((3,5), 3)
>>> Mat1 + Mat2
array([[ 3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17]])
       
>>> Mat1 - Mat2
array([[-3, -2, -1,  0,  1],
       [ 2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11]])

 

1.2. 행렬의 곱셈

  • $AB^T \notin M$
  • 행렬끼리 곱을 하면 행과 열의 모양이 바뀐다.
  • 행렬끼리 곱을 하려면, 앞의 행렬의 열과 뒤의 행렬의 행의 크기가 동일해야 한다.
  • 위 조건을 만족할 때, 출력된 행렬의 모양은 앞 행렬의 행($l$)과 뒤 행렬의 열($n$)의 모양인 행렬($l*n$)이 나온다.
  • $(l * m) * (m * n) = (l * n) $ 
  • 행렬은 행렬끼리의 곱에 대하여 닫혀있지 않다고 할 수 있으나, 정방 행렬 간의 곱에 대해서는 닫혀 있다고 할 수 있다.
    $m = n,\ AB \in M$
# 행렬 곱 시, 행렬의 모양이 바뀐다.
>>> Mat1 = np.arange(0, 15).reshape((3,5))
>>> Mat2 = np.full((3,5), 3)
>>> np.dot(Mat1, Mat2.T)
array([[ 30,  30,  30],
       [105, 105, 105],
       [180, 180, 180]])
       
# 정방행렬끼리의 곱을 하는 경우, 행렬 모양이 유지된다.
>>> Mat3 = np.arange(0, 9).reshape((3,3))
>>> Mat4 = np.full((3,3), 3)
>>> np.dot(Mat3, Mat4)
array([[ 9,  9,  9],
       [36, 36, 36],
       [63, 63, 63]])

 

 

 

 

2. 결합 법칙

2.1. 덧셈의 결합 법칙

  • $(A+B)+C = A+(B+C)$
  • 행렬의 덧셈과 뺄셈은 각 행렬의 형태가 동일해야 하며, 그 순서를 어떻게 하는지는 상관없다.
>>> Mat1 = np.arange(0, 15).reshape((3,5))
>>> Mat2 = np.repeat(np.array([1,2,3]), 5).reshape((3,5))
>>> Mat3 = np.array([[1,3,5,7,9],[2,4,6,8,10],[3,6,9,12,15]])
>>> (Mat1 + Mat2) + Mat3 == Mat1 + (Mat2 + Mat3)
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]])

 

2.2 곱셈의 결합 법칙

  • $A(B^TC) = (AB^T)C$
>>> Mat1 = np.arange(0, 15).reshape((3,5))
>>> Mat2 = np.array([[1,3],[2,4],[3,6],[4,8],[5,10]])
>>> Mat3 = np.array([[1,3,5,7,9,11,13],[2,4,6,8,10,12,14]])
>>> np.dot(np.dot(Mat1,Mat2),Mat3) == np.dot(Mat1,np.dot(Mat2,Mat3))
array([[ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True]])

 

 

 

 

3. 항등원(Identity Elementa)

3.1 행렬의 덧셈의 항등원

  • $ A + O = O + A = A$
  • 영행렬은 행렬의 덧셈의 항등원이다.
  • 뺄셈은 부호가 바뀌게 되므로 항등원이 없다.
>>> Mat1 = np.arange(0, 15).reshape((3,5))
>>> Mat2 = np.zeros((3,5))
>>> Mat1 + Mat2 == Mat2 + Mat1
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]])

 

3.2. 행렬의 곱셈의 항등원

  • $AE = EA = A$
  • 모든 정방 행렬 $A$에 대하여 단위행렬 $E$를 곱하면 행렬 $A$가 나온다.
>>> Mat1 = np.arange(0, 16).reshape((4,4))
>>> Mat2 = np.identity(4)
>>> np.dot(Mat1, Mat2) == Mat1
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]])
       
>>> Mat1 == np.dot(Mat1, Mat2)
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]])

 

 

 

 

4. 역원

4.1. 덧셈에 대한 역원

  • $A+(-A) = (-A) + A = O$
>>> Mat1 = np.arange(0, 12).reshape((4,3))
>>> Mat1 + (-Mat1) == (-Mat1) + Mat1
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])
       
>>> Mat1 + (-Mat1)
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

 

4.2. 곱셈에 대한 역원

  • $AA^{-1} = A^{-1}A = E$
  • 역행렬을 갖지 않는 경우도 존재하므로, 항상 성립하는 것은 아니다.
  • $AB = BA = E$인 경우 B는 A의 역행렬이다.
>>> Mat = np.array([[0, 1],[2, 3]])
>>> Inv_Mat = np.linalg.inv(Mat)
>>> np.dot(Mat, Inv_Mat)
array([[1., 0.],
       [0., 1.]])

 

4.3. 곱셈에 대한 역원에서 파생된 행렬 성질

  • $A(A+B) = E \Rightarrow AB = BA$

4.3.1. 증명

  • $A(A+B) = E$이므로, $A^{-1}$은 존재한다. $A^{-1} = (A+B)$이므로, 다음 식이 성립한다.

$$A(A + B) = (A + B)A\ \rightarrow \ A^2 + AB = A^2 + BA \ \rightarrow \ AB = BA$$

 

 

 

 

5. 교환 법칙

5.1. 행렬의 교환 법칙은 성립하지 않는다.

  • $AB \neq BA$
  • 교환법칙이 성립하지 않으므로 곱셈법칙, 지수법칙을 적용할 수 없다(항상은 아니며, 가능한 경우도 있으므로, 부분적으로 사용 가능하다).
  • 대우: 곱셈법칙이 성립한다면 $AB = BA$가 성립한다. [거짓]
  • 행렬에서는 대우 명제마저도 성립하지 않을 수 있다.

5.1.1 증명

$$(A+B)^2 = A^2 + 2AB + B^2\ \overset{T}{\rightarrow} \ AB = BA \cdots (1)$$

$$(A+B)^3 =  A^2 + 3A^2B + 3AB^2 + B^3 \ \overset{F}{\rightarrow} \ AB = BA \cdots (2)$$

  • $AB$가 영인자인 경우, $A^2 + 3AAB + 3ABB + B^3 = A^3 + B^3 =  A^2 + 3A^2B + 3AB^2 + B^3$은 성립한다.
  • $AB$는 영인자이므로, $AB=O$은 성립하나, $BA \neq O$이다.
  • 행렬에서는 영인자의 존재로 인해 2차 함수에서 성립하는 것이 3차 함수 이상에서는 성립하지 않을 수 있다.

 

5.2. 교환 법칙 관련 재밌는 공식

  • $A + B = AB$라면 $AB = BA$이다.

5.2.1. 증명

$$A + B = AB \rightarrow AB - A - B = O \rightarrow (A-E)(B-E)-E=O$$

$(A-E)(B-E)=E$이므로, $(A-E)^{-1},\ (B-E)^{-1}$이 존재한다.

$$ (A-E)(B-E)=E=(B-E)(A-E)\rightarrow BA -A-B=O $$

$$ \therefore AB = BA $$

 

 

 

728x90
반응형
728x90
반응형

 

행렬(Matrix)

 수학에서 행렬은 1개 이상의 수 또는 다항식 등을 사각형 모양으로 배열한 것이다. 가로 줄은 행(Row), 세로 줄은 열(Column)이라 부른다.

 아서 케일리와 윌리엄 로원 해밀턴이 발명했으며, 행렬식의 값에 따라 연립방정식의 해가 다르게 나오는 것을 보고, 연립 방정식의 계수와 변수를 분리하여 사용하게 되면서 행렬이 등장하게 되었다.

 

 

 

1. 행렬의 정의

  • $m * n$ 행렬은 각 행 $i \in \{1,...,m\}$ 및 열 $j \in \{1,...,n\}$의 순서쌍 $(i, j)$에 대하여, 원소 $A_{ij} \in R$을 대응시키는 함수 $A = (A_{ij})_{ij}$이다.
  • 행렬 $A$는 모든 성분을 사각형으로 배열하고 소괄호 또는 대괄호를 추가하여 다음과 같이 표기한다.

$$ A = \begin{bmatrix}
 A_{11}& A_{12} & A_{13}  & ... & A_{1n}\\ 
 A_{21}& A_{22} & A_{23}  & ... & A_{2n}\\ 
 A_{31}& A_{32} & A_{33}  & ... & A_{3n}\\ 
 \vdots & \vdots & \vdots & \ddots & \vdots\\
 A_{m1}& A_{m2} & A_{m3}  & ... & A_{mn}\\
\end{bmatrix} $$

 

$$ A = \begin{pmatrix}
 A_{11}& A_{12} & A_{13}  & ... & A_{1n}\\ 
 A_{21}& A_{22} & A_{23}  & ... & A_{2n}\\ 
 A_{31}& A_{32} & A_{33}  & ... & A_{3n}\\ 
 \vdots & \vdots & \vdots & \ddots & \vdots\\
 A_{m1}& A_{m2} & A_{m3}  & ... & A_{mn}\\
\end{pmatrix} $$

  • $A_{ij}$를 $A$의 $i$번째 행 $j$번째 열의 성분(Entry) 또는 원소(Element) 또는 계수(Coefficient)라 한다.
  • 행렬 $A$의 각 성분은 행과 열의 번째 수를 첨수로 사용해, $A_{ij},\ A_{i,j},\ a_{ij},\ a_{i,j},\ A(i,j),\ A[i,j]$ 등과 같이 표현한다.
  • 행렬은 실수에 대해 닫혀 있으며, 행렬 연산 시 실수가 나온다.
  • 행과 열의 번째수가 동일한 성분 $A_{ii}\ (i \in \{1, ..., min\{m,n\}\})$을 $A$의 대각 성분(Diagonal entry) 또는 대각 원소(Diagonal element), 대각 요소, 주대각 성분이라고 한다.

 

  • 행렬 $A$의 크기(Size)는 행과 열의 수의 순서쌍 $(m,n)$ 또는 $m*n$으로 나타낸다.
  • 만약 행과 열의 수가 같다면($m=n$) 행렬$A$를 정사각 행렬(Square matrix) 또는 정방 행렬이라 부른다.
  • 행과 열의 수가 다르다면($m \neq n$) 직사각 행렬(Rectangular matrix) 또는 장방 행렬이라 부르는데, 일반적으로 행렬은 직사각형이므로, 정방 행렬과 구분하고자 하는 경우가 아니라면 그냥 행렬이라 부른다.

 

  • 만약, $m=1$이라면 행렬 $A$를 $1*n$ 행 백터(Row vector)라고 한다.
  • 만약, $n=1$이라면 행렬 $A$를 $m*1$ 열 벡터(Column vector)라고 한다.
  • 만약, $m=1,\ n=1$인 행렬 $A$는 스칼라(Scalar)라고 한다.

$$X = \begin{bmatrix} x_1 & x_2 & x_3 & ... &x_n \end{bmatrix}$$

$$X = \begin{bmatrix}
x_1\\ 
x_2\\ 
x_3\\ 
\vdots \\
x_n
\end{bmatrix}$$

$$X = \begin{bmatrix} x_1 \end{bmatrix}$$

  • 즉, 벡터와 스칼라 역시 수학적으로는 행렬에 속한다.

 

 

 

 

2. Python과 다양한 형태의 행렬

  • Python에서는 Numpy 라이브러리를 사용해서 행렬, 벡터를 만든다.
  • Python의 Numpy라이브러리를 사용해서 다양한 형태의 행렬을 만들어보도록 하겠다.
import numpy as np

2.1. 직사각 행렬(Rectangular matrix)

>>> np.arange(0, 18).reshape((3,6))
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17]])
       
       
# 랜덤한 값으로 만들수도 있다.
>>> np.random.randint(0, 20, size=(3, 6))
array([[16,  9,  1,  6,  7, 18],
       [ 4, 15, 15, 16, 13, 16],
       [ 8,  1,  2,  8, 11,  8]])
  • 직사각형 모양의 행렬로, 장방 행렬이라고도 부르며, 가장 일반적인 행렬이다.

2.2. 정사각 행렬(Square matrix)

>>> np.arange(0, 16).reshape((4,4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
       
       
>>> np.random.randint(0, 20, size=(3, 3))
array([[ 5,  8,  7],
       [13,  9,  0],
       [ 8, 17,  8]])
  • 정사각형 모양의 행렬로, 정방 행렬이라고도 부른다.

2.3. 영행렬(Zero matrix)

>>> np.zeros((4, 5))
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
  • 모든 원소가 0인 행렬로, 행렬 곱에서 영원으로 작용하는 행렬이다.

2.4. 항등행렬(Identity matrix)

>>> np.identity(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
  • 대각 성분은 모두 1이며, 나머지 원소는 0인 행렬이다.
  • 행렬 곱셈에서 항등원으로 작용하며, 다른 행렬에 곱하면, 곱한 행렬이 그대로 나오게 된다.
  • 단위행렬이라고도 부른다.

2.5. 대각행렬(Diagonal matrix)

# 대각행렬 만들기
>>> diag_M = np.diag((4, 2, 2, 5, 1, 6))
>>> diag_M
array([[4, 0, 0, 0, 0, 0],
       [0, 2, 0, 0, 0, 0],
       [0, 0, 2, 0, 0, 0],
       [0, 0, 0, 5, 0, 0],
       [0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 6]])

# 대각성분 뽑기
>>> np.diagonal(diag_M)
array([4, 2, 2, 5, 1, 6])

# 대각성분이 1인 행렬 만들기
>>> np.eye(3, 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
       
# 장방행렬로 만들기
>>> np.eye(5, 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 0.],
       [0., 0., 0.]])
  • 대각행렬은 주대각선 원소를 제외한 모든 원소가 0인 정방행렬이다.
  • 영행렬, 단위 행렬은 대각 행렬에 포함된다.
  • 장방행렬 역시 주대각 성분을 제외한 나머지 원소가 0인 경우 대각행렬에 포함된다.

2.6. 스칼라 행렬(Scalar matrix) 

# 대각 성분이 모두 1인 대각행렬
>>> np.identity(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
       
# 대각 성분이 모두 같은 대각행렬
>>> np.diag(np.full(4, 5))
array([[5, 0, 0, 0],
       [0, 5, 0, 0],
       [0, 0, 5, 0],
       [0, 0, 0, 5]])
  • 주대각 성분이 모두 같은 원소로 된 대각행렬

2.7. 삼각행렬(Triangular matrix)

# 정방행렬
>>> Mat = np.arange(0, 36).reshape((6,6))
>>> Mat
array([[ 0,  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, 31, 32, 33, 34, 35]])
       
# 상삼각행렬
>>> np.triu(Mat, 0)
array([[ 0,  1,  2,  3,  4,  5],
       [ 0,  7,  8,  9, 10, 11],
       [ 0,  0, 14, 15, 16, 17],
       [ 0,  0,  0, 21, 22, 23],
       [ 0,  0,  0,  0, 28, 29],
       [ 0,  0,  0,  0,  0, 35]])
       
# 하삼각행렬
>>> np.tril(Mat, 0)
array([[ 0,  0,  0,  0,  0,  0],
       [ 6,  7,  0,  0,  0,  0],
       [12, 13, 14,  0,  0,  0],
       [18, 19, 20, 21,  0,  0],
       [24, 25, 26, 27, 28,  0],
       [30, 31, 32, 33, 34, 35]])
  • 정방행렬의 특수한 경우로, 주대각선을 기준으로 대각항의 위쪽이나 아래쪽 항들의 값이 모두 0인 경우를 의미한다.
  • 주대각선 성분을 기준으로 아래가 모두 0이면 상삼각행렬(Upper Triangular matrix)이다.
  • 주대각선 성분을 기준으로 위가 모두 0이면 하삼각행렬(Lower Triangular matrix)이다.

2.8. 전치행렬(Transpose Matrix)

>>> Mat = np.arange(0, 16).reshape((4,4))
>>> Mat
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
       
# 전치행렬 만들기
>>> Mat.T
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])
       
>>> np.transpose(Mat)
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])
  • 행렬 $A$의 전치행렬은 $A^T$로 표기한다.
  • 주대각 성분을 기준으로 행과 열을 대칭으로 바꾼 행렬
  • 주대각 성분을 기준으로 하므로, 주대각 성분은 변하지 않는다.
  • 정사각행렬 $A$가 $A^T=A$를 만족하면 행렬 $A$는 대칭행렬이다.
    (전치행렬인 $A^T$는 주대각 성분을 기준으로 행과 열을 대칭으로 바꾸기 때문이다.)
  • 반대로, $A^T=-A$를 만족하면 반대칭행렬(Skew symmetric matrix) 또는 교대행렬(Alternating matrix)이라 한다.

2.9. 직교행렬(Orthogonal matrix)

>>> Ort_M = np.array([[0,0,1],[1,0,0],[0,1,0]])
>>> Ort_M
array([[0, 0, 1],
       [1, 0, 0],
       [0, 1, 0]])
       
# 행렬 Ort_M과 전치행렬 Ort_M을 행렬곱하였을 때, 단위 행렬이 나오는 행렬 Ort_M
>>> np.dot(Ort_M, Ort_M.T)
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])
  • 행렬 A의 역행렬이 A의 전치행렬인 행렬 A를 직교행렬이라 한다.
  • 직교행렬과 직교행렬의 전치행렬을 행렬곱하면 단위행렬이 나온다.
  • $A^{-1} = A^T, \ A^TA = I$
728x90
반응형

+ Recent posts