각 함수의 matrix가 definte, semidefinite, indefinite에 따른 시각화

 

Summary


어떤 메트릭스 M이 Positive definite이라고하면, 흔히 PDM(Positive Definite Matrix)이라고 한다. 이러한 matrix은 아래의 조건을 만족하는 경우를 의미한다. 흔히 이 경우를 "M > 0"와 같이 수학적인 표기도 한다(행렬 A의 원소가 모두 0보다 크다는 의미가 아니다). PDM은 어떠한 함수를 메트릭스 M으로 표현했을때, 함수가 극소점을 갖는다는 것을 의미한다.

조건은 다음과 같다. 메트릭스 M이 1) 실수를 원소로하고, 2) 대칭형인 매트릭스(Symmetric matrix)이며, 3) 실수로 이뤄진 벡터 z에 대해서도 $z^{T}Mz$연산을 하더라도 양수가 나오는 메트릭스를 의미함. 

 

 

Reference:

http://mlwiki.org/index.php/Positive-Definite_Matrices

반응형

 

AR model(자기회귀모델)과 같이 $x_{t}$가 $x_{t-1}$에 영향을 받을 때(=$x_{t}$가 $x_{t-1}$입력값으로 할 때), 간혹 이런 모델은 폭주하거나, 안정적인 값을 지니게 된다. 이 폭주와 안정에 대한 정의는 다음과 같다.

 

1) 폭주: 어떤 초깃값 x(0)에서 시작해도, x(t)가 유한의 범위에 머무른다. 즉, t가 아무리커져도 모델f(t)의 상(image)가 유한하다는 것이다(=무한대로 안간다)

2) 안정: 어느 c점에서 안정이란 'c의 매우 가까운 곳에서 시작하면 언제까지나 그 점 가까이에 머무른다"

일반적으로 쓰는 수학용어는 아니고, 책 "프로그래머를 위한 선형대수"에 나오는 용어인데 쉽게 설명되어 참조한다.

https://book.naver.com/bookdb/book_detail.nhn?bid=11761716 

 

프로그래머를 위한 선형대수

행렬식을 계산할 수는 있지만, 행렬식의 의미는 모른다? 손으로 계산하든 컴퓨터로 계산하든 식의 의미를 이해하지 못하면 무슨 소용이 있을까요? 선형대수를 푸는 방법이 아니라 ‘왜 이런 결

book.naver.com

 

 

예제)

1차원의 경우: $x(t)=7x(t-1)$.  이 식은 x(t)가 x(t-1)과 7x만큼 회귀하므로, 이를 다시 대입해보면... $x(t)=7^{t}x())$이다. 따라서, t가 무한히 커질경우에 x(t)도 무한히 커져서 발산한다.

 

대각행렬의 경우: $x(t)=\begin{bmatrix}
5 &  0& 0\\ 
0 &  -3& 0\\ 
0 &  0& 0.8
\end{bmatrix} x(t-1) = x(t)=\begin{bmatrix}
5^{t} &  0& 0\\ 
0 &  -3^{t}& 0\\ 
0 &  0& 0.8^{t}
\end{bmatrix} x(0)

$

이 행렬의 경우는 다음과 같이 다시, 일반화해서 쓰면 발산함을 알 수 있다. 특정 $x_{1},x_{2},x_{3}$중 하나라도 발산하면 해당 모델은 발산한다.

즉, 일반화 해서 얘기하면, $x(t)=\begin{bmatrix}
a^{t} &  & \\ 
 &  & \\ 
 &  &a_{n}^{t} 
\end{bmatrix}x(0)$가 에서 원소가 하나라도 1보다 크면 발산한다고 할 수 있다.

 

변수변환


이를 행열로 연산하면 다음과 같다. 주어진 식은 $x(t)=Ax(t-1)$과 같을 때, 이를 행렬로만 조작해보자. 예시를 위해 다음과 같은 행열이 주어졌다고 가정해본다.

 

예시, 행렬 x(t-)=Ax(t-1)

 

우선, $y(t)=Cx(t), C=\begin{bmatrix}
1 & 1\\ 
1 & -1
\end{bmatrix}$으로 두고,각 x(t)와 y(t)은 종벡터라고 생각하자.

그러면, 위의연산과 동일하게 작업하면, 아래의 y의 대한 행렬식으로 변환할 수 있다. 

여기서, Y(t)을 x(t)에 대해서 정리하면 다음과 같다.

핵심은 1) C행렬을 이용하여 y=Cx을 통해서 y에 대한 식으로 바꾼다. 2) y(t)=y(t-1)꼴로 만든다음에, y=Cx을 이용하여 x에대해서 다시 전개한다.

$y(t)=Cx(t-1)$ 을 다음과 같이 $x(t-1)=C^{-1}y(t)$라고 써볼 수 있다. $x(t)=Py(t)$라고 임의의 P을 C의 역행열이라고하자. 그러면, $P^{-1}x(t)=y(t)$이 된다. 

 

$y(t)=P^{-1}x(t)=P^{-1}(Ax(t-1)=P^{-1}Ax(t-1)=P^{-1}APy(t-1)$

 

즉, $x(t)=Ax(t-1)$라는 수식이 $y(t)=P^{-1}APy(t-1)$으로 변경된다.  이때 $P^{-1}AP=K$라고하고, K가 대각행열이면, 간단하게 $y(t)=K^{t}y(0)$으로 수식이 바뀐다. 

 

간단하게, x에 대해서도 변경해보면 $x(t)=Py(t)$이므로, 위의 식에 대입해 계산해보면, $x(t)=PKP^{-1}x(0)$으로도 바뀐다. 이를 대각화라고 한다.

 

 

고윳값과 고유벡터


고유분해는 행렬 $A$의 고유기저(자체 기저)에 대해 A를 표현하는 기저변환 연산이다. 가령 행렬의 고유분해는 다음의 세 행렬을 곱한것이다.

예를들어 A행열을 77번 곱해야하는 연산이 있으면 직접 For loop으로 여러번 계산할 것이 아니라, $PL^{77}P$을 구하면 된다는 것이, 이 고유분해의 이점이다. 가령, 임의의 행렬 A가 주어지면, 아래와 같이 연산할 수 있다. 아래의 행렬에서 _lambda만 77번구하면 된다. 

import numpy as np

A = np.array([[5, 1], [3, 3]])
eig_val, eig_vec = np.linalg.eig(A)  

_lambda = np.identity(2)
for i in range(2):
    _lambda[i,i] = eig_val[i]

eig_vec @ _lambda*77 @ np.linalg.inv(eig_vec)  # A77 = QLQ

위의 사례와 같이, 일단 A을 고유기저로 표현하면 A의 거드벶곱을 계산할 때, 고유값의 거듭제곱을 계산하면 된다는 것이 핵심이다. 이렇게 계산하는게, 행열을 직접 77번 계산하는것보다 훨씬 간단하다.

x: 고유벡터, lambda: 고유값

위의 고유벡터와 고유값의 의미는 다음과 같다. matrix A는 어느 좌표평면에서의 변환(늘리거나 줄이거나)하는 사상이라고 했다. A을 통해 매핑된 벡터가 있다고 하자. Ax의 의미는 x을 A방향으로 늘리거나 줄이거나하는 시도이다. 그런데, 늘리거나 줄이거나한 것이 원래 x방향대로는 그대로있고, lambda만큼의 상수배한거에불과하다는 뜻이다. 바꿔말하면, 고유벡터는 A가 가지고있는 변환과 같은 방향을 가진 벡터이고, 길이는 lambda만큼 늘리는 작업에 불과한것이다. 그래서, A는 x방향으로 매핑하는 작업을 lambda만큼 늘리는 작업이라고 쉽게 기하학적으로 설명할 수 있다. 

수학적 표현 기하학적 표현
행렬 A의 연산 위또는 옆으로 늘림
행렬 A의 고유벡터 A로 변환하는 작업과 같은 방향
행렬 A의 고유값 늘리는 작업을 할경우에 몇배로 늘리겠는가?

고유벡터 기하학적 의미는 'A을 곱해도, 신축만 되고,방향은 변하지 않는다'

고유값 의미는 신축율(몇 배가 늘어나는가)을 의미한다.

 

정의는 다음과 같다.

  • A: 정방 행열이어야함.
  • eig(A): A의 고윳값의 나열이다. 가령 $\lambda_{1}, ..., \lambda_{n}$. 일부 고유값은 중복될 수 있다.
  • $\Lambda$: 대각선상에 A의 고유값이 있는 형태
  • Q: 열이 A의 고유벡터인행열. 
  • $A=Q\Lambda Q^{-1}$: 행렬 A의 고유분해
  • $\Lambda =Q^{-1}AQ$: 행렬 A의 대각화

import numpy as np

A = np.array([[5, 1], [3, 3]])

eig_val, eig_vec = np.linalg.eig(A)
eig_val  # 6, 2

# This means that the eigenvector corresponding to λ=6 is:[0.70710678 0.70710678]
print(eig_val[0], eig_vec[:, 0])  
A @ eig_vec[:, 0] == eig_val[0] * eig_vec[:, 0]  # True, True

 

 

 

상삼각행렬이나, 하삼각행렬에서 대각성분이 고윳값임. 이는 $Ap=\lambda p$을 구하려고할때, 후대치(back substitute)로 계산하다보니, 고윳값1,2,3에 해당하는 세번쨰 고유값은 무조건8($8p_{3}=\lambda p_{3}$, $p_{3}=0$일 경우에는 두번째 고윳값이 성립이안됨. $3p_{2}=2p_{2}$)일거고, 두번째 고유값도 따라서 3이며, 첫번쨰 고유값도 여김없이 5에 해당된다.  

예제 1) 대각행열만 있는 경우는 바로 5,3,8이 고유값

A = np.array([[5, 0, 0], [0, 3, 0], [0, 0, 8]])
print(A)
print(np.linalg.eigvals(A))

[[5 0 0]
 [0 3 0]
 [0 0 8]]

[5. 3. 8.]

예제 2) 상삼각행열이 있는 경우에도 대각행열이 바로 고유값

A = np.array([[3, -1, 1],
              [0, 2, 1],
              [0, 0, 3]])

np.linalg.eigvals(A)  # array([3., 2., 3.])

예제 3) 고유값이 중복인경우. 고유값이 중복인경우는 중복된 고유값만큼 , 중복된 값에 상응하는 고유벡터는 선형독립어야한다.

A = np.array([[3, -1, 1],
              [0, 2, 1],
              [0, 0, 3]])

eigvals = np.linalg.eigvals(A)  # array([3., 2., 3.])


eig_vec = array([[1.        , 0.70710678, 0.        ],
                 [0.        , 0.70710678, 0.70710678],
                 [0.        , 0.        , 0.70710678]]))

=> 어느 고유값이라도 중복수와 같은 개수의 선형독립인 고유벡터가 있으면, 합계 n개의 선형독립인 고유벡터가 있는 것이고, 그것을 나열하기만하면 정방행열 P는 정칙이 됨. 그러면 대각화가 가능

예제 4) 중복고유값 + 고유벡터가 독립이 아닌경우

A = np.array([[3, -1, 1],
              [0, 2, 0],
              [0, 0, 3]])  # 상삼각행열이므로, 고유값이 3, 2, 3으로 정해져있다.

eig_vals, eig_vecs = np.linalg.eig(A)
eig_vals  #[3, 2, 3]
### array([3., 2., 3.])

eig_vecs 

# 1번열과 3번열이 독립이 아님. -> QAQ^-1 형식으로 대각화가 불가능함
### array([[ 1.00000000e+00,  7.07106781e-01, -1.00000000e+00]
###       [ 0.00000000e+00,  7.07106781e-01,  0.00000000e+00],
###       [ 0.00000000e+00,  0.00000000e+00,  6.66133815e-16]])  #0.6e-16: 사실상 0임

 

A와 같은 크기의 정칙행렬 S에 대해서 $S^{-1}p$는 $S^{-1}AS$의 고유벡터.

=> $(S^{-1}AS)(S^{-1}p)=\lambda (S^{-1}p)$ 의 식에서 S의 역행열의 연산만 추가된 경우이다.

 

$\lambda x_{1}, ..., \lambda x_{n}$가 A의 고유값이고, $p_{1},...p_{n}$이 고유벡터일때, 만약, 고유값 $\lambda x_{1}, ..., \lambda x_{n}$가 다 다르면, A는 선형독립이다.

 

 

 

Note

1. 실수로 이루어진 행열A라도, 고유값과 고유벡터는 복소수 인경우가 있음.

import matplotlib.pyplot as plt

A = np.array([[0, -1], [1,0]])
x = np.array([0.5, 0.5])

ax = plt.axes() 
plt.arrow(0, 0, *x, head_width=0.05, head_length=0.1, fc='k', ec='k')   # 원래벡터
plt.xlim(-1,1)
plt.ylim(-1,1)

plt.arrow(0, 0, *x@A, head_width=0.05, head_length=0.1, fc='r', ec='r')  # A를 매핑한 벡터
plt.show()

검은색벡터를 시계방향으로 회전시키는 A가 있다. 이 회전변환에 대해서 무조건 변하지 않는 벡터가 있을까? 실수영역에서는 없다.

np.linalg.eig(A)

# 복소수 형태의 고유벡터가 있다.
# (array([0.+1.j, 0.-1.j]),
# array([[0.70710678+0.j        , 0.70710678-0.j        ],
#        [0.        -0.70710678j, 0.        +0.70710678j]]))

 

d

반응형

대부분의 행렬A는 행렬을 일단 L(하삼각행렬 + 대각행렬은 1)과 U(상삼각행렬)로 분해가 된다. 분해를 왜하냐고 묻는다면, 일단 분해하고나면, A의 특성을 구하는데, 여러모로 행렬연산이 편해진다. 예를 들어, LU을 분해하고나면 det(LU)=det(L)det(U)로 바로 계산할수도있고, 일차방정식, 역행렬도 구할 수 있다.

 

L(하삼각행렬): 다음의 꼴과 같이 하삼각행렬만 0이 아닌 값이 있고, 대각행렬은 모두 0이어야 한다. 유사하게 U(상삼각행렬)은 위의 삼각행렬을 제외하고 모두 0이어야한다. 다만 L의 대각행렬이 1이기 때문에, 상삼각행렬은 1일 필요는 없다. 대각행열까지를 포함한다. Python의 Numpy은 Tri+(l, u)을 통해 이를 구현하고있다. np.tril은 하삼각행렬을 만들어주는 함수이고, np.triu은 상삼각행렬을 만들어준다. 

import numpy as np

# 하삼각행렬
L = np.tril([[1,2,3],
            [4,5,6],
            [7,8,9]], k=-1)
I = np.identity(L.shape[0])
L = L + I

print(L)

[[1. 0. 0.]
 [4. 1. 0.]
 [7. 8. 1.]]
# 상삼각행렬
U = np.triu([[1,2,3],
            [4,5,6],
            [7,8,9]], k=0)
print(U)

[[1 2 3]
 [0 5 6]
 [0 0 9]]

 

LU 분해는 numpy로 직접구하거나 scipy에 지원하는 lu 분해를 이용한다. scipy은 p matrix을 주는데, 행렬을 순서를 변경하기위한 행렬이다. LU분해를 할 때, L의 대각행렬이 아무리 연산하려고해도 0이어서, 다음 하삼각행렬을 구할 수 없을때, 피봇팅(pivotting)해주게되는데, scipy.linalg.lu 은 이 피봇팅한것을 원복할 때 쓰는 P을 가지고있다. 따라서, $A=PLU$으로 연산할 수 있고, 내부적으로 연산한 L, U을 반환해주기도 한다 (permute_l=True: Perform the multiplication P*L). 보통은 이 P을 치환행렬(Pivoting 을 위한 행렬)이라고한다.

 

# scipy을 이용하는 방법

from scipy.linalg import lu as lu_decompose

mat = np.array([[1,2,3],
                [2,6,4],
                [8,9,1]])

L, U = lu_decompose(mat, permute_l=True)  # p matrix을 안받으려면 True로 설정
def lu_decompose(mat):
    rows, columns = mat.shape
    s = min(rows, columns)  # to determine s: (row by s) @ (s by colunns) 
    
    for k in range(s):
        x = 1 / mat[k,k]
        for i in range(k+1, rows):
            mat[i,k] = mat[i,k] * x
        for i in range(k+1, rows):
            for j in range(k+1, columns):
                mat[i,j] = mat[i,j] - mat[i,k] * mat[k,j]
            
    L = np.tril(mat, k=-1) + np.identity(rows)
    U = np.triu(mat, k=0)
    return L, U


mat = np.array([[1,2,3],
                [2,6,4],
                [8,9,1]])
L, U = lu_decompose(mat)

 

 

LU분해 사용법


1. det(LU)=det(L)det(U)이다.

det_A = np.linalg.det(mat)
detLU = np.linalg.det(L) * np.linalg.det(U)

print(det_A, detLU)
# -59.999999999999986 -59.999999999999986

 

2. 일차방정식을 LU로 풀 수 있다.

$Ax=y$ 이었으므로, $LUx=y$라고 쓸 수있다. 따라서, $x$에 $u$을 곱하고, $L$을 다시 곱하면, y가 된다 라는 말이다. 반대로, x을 찾기위해서는 y가 되는 Lz을 구하고, z가 되는 Ux의 x을 구하면된다.

 

$Ax=b$의 식을 구하는 것을 보면, x은 해를 구하는 방법이다. 한편, $Ax=I$으로 $b$을 $I$으로 바꾸면, A을 역행렬을 구하는 작업이다.

 

우선A의 LU을 구했다고치자. 다음의 전개가 가능하다.

 

$LUx=I$

 

$Ly=I, where Ux=y$

 

따라서, $Ly=I$을 먼저 구한 다음에 순차적으로 x까지구하면된다. 문제는 이러한 방법이 왜 편리하냐를 의미하는 것인데, 이는 전방대치(forward substitute)와 후방대치(backward substitute)을 쓸 수 있어서 그렇다. 아래와 같이 전방치(forward substitution)방법으로 구하는 방법은 하삼각행렬만 숫자가 0이 아니고, 나머지는 0이기에, 직관적으로 x1은 5/3임을 알 수 있다. 이를 구했기에, 2행..4행까지 바로 다 구할 수 있다. 그렇기에 편리하다는 의미이다.

 

Reference: https://www.essaytaste.com/solved-write-python-code-perform-forward-substitution-opposed-back-substitution-algorithm-solve-q37161323/

 

 

 

반응형

역문제 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가 무조건 존재하는가"

반응형

백터표기

1. 벡터는 기본적으로 종벡터(세로로 길게쓴 벡터)를 사용한다.

이유: 벡터는 주로 행렬과의 연산과 함께 쓰는데, 어순을 지키기 위함이다. 예를 들어, 행렬의 곱 $A\textbf{x}$을 어순을 바꿔쓰면, $\textbf{x}A$으로 부자연스럽기 때문이다.

2. 벡터는 주로 $\textbf{x, v, e}$와 같이 두꺼운 글씨로 표기한다.

이유: 벡터와 숫자를 확실히 구분하려고 한다. 기본이지만 이를 익혀두는 것이 좋다.

3. 숫자의 나열로서의 벡터는 $x$, 공간의미를 강조하고자할 때는 $\vec{x}$로 표기한다.

4. 좌표는 '기저'에 기인하지만, 극좌표의 경우도 있을 수 있다.

5. 아핀공간이란? 선형 공간과 달리, 공간에서의 원점이 없는 공간

6. 기저의 조건

 - 어떤 벡터 $\vec{v}$라도  $\vec{v} = x_{1}\vec{e_{1}}+...+x_{n}\vec{e_{n}}$로 표현할 수 있다.

 - 위와 같이 표현하는 방법으로 딱 한가지로만 표현할 수 있다.

7. 차원

 = 기저벡터의 개수 = 좌표의 성분의 수 

 

 

행렬: 수를 직사각 형태로 나타낸 것

1. 행렬의 표기: 알파벳 대문자로 표기하며, 두꺼운 글씨가아닌 단순한 대문자로 쓰는 것이 일반적.

2. 행렬의 곱

 - 행렬과 벡터의 곱은 벡터

 - 행렬의 열의 수(컬럼 수)가 차원수, 행 수(로우 수, 높이)가 출력의 차원수

 - 행렬의 A을 곱한다는 것 = 선형 사상이라고 할 수 있음

 - 행렬끼리의 곱 = 사상의 합성

 - 영행렬$O$은 모든것을 영점으로 되돌리는 사상

 - 행렬의 거듭제곱 = 사상의 반복: $AA=A^{2}$과 같이 $A$가 공간에서의 사상이라고하면 2번 반복하는 의미가있다.

 - 행렬의 0제곱: $A^{0}=I$  I은 단위행렬을 의미

3. 단위행렬: 정방행렬에서 대각행렬만 1이고 모두 0인 행렬 $\begin{bmatrix}
 1 & 0 & 0\\ 
 0 & 1 & 0\\ 
 0 & 0 & 1
\end{bmatrix}$

4. 대각행렬: 정방행렬이지만, 대각행렬만 0이 아니고 모두 0인경우 $\begin{bmatrix}
 3 & 0 & 0\\ 
 0 & 1 & 0\\ 
 0 & 0 & 5
\end{bmatrix}$

5. 역행렬= 역사상. 정의: 정방행렬$A$에 대해 그 역사상에 대응하는 행렬을 A의 역행렬이라고 함. 기로호는 $A^{-1}$으로 쓰고, 어떠한 $x$을 가져와도 $Ax=y$ 또는 $A^{-1}y=x$이다. 그리고, 이 역행렬은 있을 수도 없을 수도 있음.

6. 행렬의 곱셈 트릭

$y=A\textbf{x}+b$ 을 행렬의 곱으로만 표시할 수 있을까? 정답은 Y이다. +b와 같이 상수항의 덧셈이 있을 땐, $\tilde{y} = \tilde{A}\tilde{x}$ 으로 표기하고, $\tilde{A}=A+o^{T}$, $\tilde{x}=x+1$ 으로 표기하면 한번에 처리할 수 있다.

7. 행렬식: determinant. 표기법: $det A, |A|$

8. 행렬식의 성질

 - det(I) = 1, 

 - det(AB) = det(A) x det(B)

 - $det A = \frac{1}{detA}$

 - 어느열이든 두 열이 완전히 같은 경우는 det A = 0. 예) $\begin{bmatrix}
 2 &  2& 4 \\ 
 7 &  7& 5 \\ 
 3 &  3& 2
\end{bmatrix}$

반응형

+ Recent posts