ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 선형 시스템 파이썬으로 표현하기
    Math♾️/Linear Algebra 2023. 3. 13. 14:09

    아래와 같은 2차 선형시스템을 생각해 보자 

     

    $$A\vec{v} = \vec{b}$$

     

    ## numpy와 matplot library import (필요한 라이브러리 import)
    import numpy as np 
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    
    ## 그래프 polt시 사용할 색 지정
    mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["#377eb8","#ff7f00", "#4daf4a", 
                                                        "#e41a1c", "#984ea3", "#a65628"])

     

    $$\begin{pmatrix} 2&-1 \\ 1&1 \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix} = 
    \begin{pmatrix}1 \\5\end{pmatrix}$$

     

    $A$는 2X2 행렬이고, $\vec{v}$ 와 $\vec{b}$는 1X2 벡터이다. 

     

    행 관점에서 보기

    위의 선형시스템을 행 관점에서 분석해보면 다음과 같이 해당 시스템은 두 선형 방정식으로 구성되어 있는 것을 알 수 있다.  $$\begin{cases} 2x-y=1\\x+y=5\\ \end{cases}$$

     

    각 선형 방정식은 좌표축상에서 표현하면 직선의 형태로 나타나며 두 직선의 교점(만나는 점)을 구하면 $(2,3)$ 이다. 

     

    ## 행관점에서 보기 
    # 2x - y = 1
    # x + y = 5
    
    ## 방정식 구성하기 
    x = np.array([-5, 5]) # x축 범위는 -5 부터 5까지이며 
    # 해당 범위에서 y1과 y2는 다음과 같이 나타낸다. 
    y1 = 2*x - 1 
    y2 = 5 - x
    
    ## 직선의 방정식 그리기 
    plt.figure(figsize=(4, 4), facecolor="w") # figure 크기와 색 설정 
    plt.plot(x, y1, x, y2) # figure상에 직선의 방정식 그리기 
    
    # 교점 나타내기 
    plt.plot(2, 3, "ro", mec="r") 
    
    
    plt.title("2d row picture") # 그래프 제목
    
    ## 좌표축 이름 붙이기 
    plt.xlabel("x")   
    plt.ylabel("y", rotation=0)
    
    plt.xlim(x) # x축범위
    plt.ylim(ymin=-10) # y축 범위 
    plt.grid(True) # 눈금 나타내기

    행 관점에서 해석하면 해당 시스템은 두개의 선형 방정식으로 구성되어 있으며 

    각 선형 방정식은 같은 input을 주었을 때 다른 기울기를 가지면서 output의 방향성(+,-)가 반대인 것을 알 수 있다. 

    그리고 교차점을 가지며 해석하는 시스템이 의미하는 바에 따라 해당 교점에 대한 다양한 해석이 가능하다. 

     

     

    열 관점에서 보기

    열관점에서 위의 시스템을 보면 행렬 $A\vec{v}$는 두 열벡터의 선형결합으로 해석할 수 있다. 

     

    행관점에서는 두 선형방정식를 모두 만족 시키는 해가 교차점이며 그 값이 $(x,y)$ 이었다면 

     

    열관점에서는 행렬 $A$을 구성하는 두 열벡터 $\begin{pmatrix}2\\1\end{pmatrix} \begin{pmatrix}-1\\1\end{pmatrix}$가 선형 결합을 통하여 $\vec{b} = \begin{pmatrix}1\\5\end{pmatrix}$가 되기 위해서 필요한 스칼라배 값이 $x,y$가 되는 것이다. 

     

    $$x\begin{pmatrix}2\\1\end{pmatrix} + y\begin{pmatrix}-1\\1\end{pmatrix} = \begin{pmatrix}1\\5\end{pmatrix}$$

     

    열 관점에서의 해석을 좀 더 이해하기 쉽게 그림으로 나타내면 다음과 같다. 

     

    ## 열관점에서 보기
    # 행렬 A를 두개의 열벡터의 묶음으로 보면 
    v1 = np.array([2, 1]) ## 첫번째 열벡터 (2,1)
    v2 = np.array([-1, 1]) ## 두번째 열벡터 (-1,1)
    lc = 2*v1 + 3*v2 ## 벡터 b -> 두 열벡터의 선형결합을 통해 벡터 b를 얻기 위해서 (x,y)는 (2,3)
    
    # 각 열벡터와 열벡터의 선형 결합 결과 그리기 
    plt.clf()
    # 시점(0,0),배열 첫번째 원소-(벡터의 x축 방향 값),배열 두번째 원소-(벡터의 y축 방향 값)
    plt.arrow(0, 0, v1[0], v1[1], color="#377eb8") 
    plt.arrow(0, 0, v2[0], v2[1], color="#ff7f00")
    plt.arrow(0, 0, lc[0], lc[1], color="#e41a1c")
    
    # figure이름과 좌표축 이름 설정하기 
    plt.title("2d column picture")
    plt.text(2.1, 1.1, r"$v_1$", color="#377eb8")
    plt.text(-1.3, 1.1, r"$v_2$", color="#ff7f00")
    plt.text(1.1, 5.1, r"$2 v_1 + 3 v_2$", color="#e41a1c")
    plt.xlim((-3, 3))
    plt.ylim((-0.5, 5.5))
    plt.grid(True)

    위의 그림으로 보면 열 관점의 해석이 무엇인지 알 수 있다.

    시스템 $A$를 열벡터의 묶음으로 보고

    각 열벡터의 선형 결합을 통하여 해당 시스템에서 나타날 수 있는 결과를 표현하는 것이다. 

     

     

    행 관점보다  열 관점으로 보았을 때  공간 상에서의 벡터들의 선형 결합으로서

    선형 시스템에 대하여 좀 더 직관적으로 이해할 수 있으며 

    직관에 의한 확장적 사고를 가능하게 한다. 

    따라서 선형 시스템 해석시에는 열관점이 선호된다.  

     

     

    열 벡터 공간 시각화 

    열 벡터 관점에서 보았다시피 시스템을 열벡터의 묶음으로 보고

    해당 시스템에서 나타날 수 있는 결과들을 열 벡터들의 선형 결합으로 나타낼 수 있다. 

    따라서 열 벡터 공간은 해당 시스템에서 나타날 수 있는 결과들의 집합이라 할 수 있다. 

     

    ## 두 열벡터의 선형 결합으로 나타날 수 있는 열 공간 나타내기 
    v1 = np.array([2, 1]) # 시스템을 구성하는 열벡터 1
    v2 = np.array([-1, 1]) # 시스템을 구성하는 열벡터 2
    a = np.column_stack((v1, v2)) # 열벡터 1,2의 선형 결합으로 나타나는 열공간 a
    
    ## 열 공간 나타내는 범위  (min,max,num)
    xvals = np.linspace(-3, 3, 31)
    yvals = np.linspace(-3, 3, 31)
    # 입력이될 grid 만들기
    grid = np.column_stack([[x, y] for x in xvals for y in yvals]) 
    # 열공간과 grid 선형변환
    lc = np.dot(a, grid)
    
    # 열 벡터 선형결합으로 열공간 나타내기
    plt.clf()
    plt.plot(lc[0], lc[1], ".", color="#4daf4a", ms=2)
    plt.arrow(0, 0, v1[0], v1[1], color="#377eb8", lw=2)
    plt.arrow(0, 0, v2[0], v2[1], color="#ff7f00", lw=2)
    plt.title("Column space visualization")

     

    선형 시스템  해 구하기 

    파이썬을 이용해서 선형 시스템의 해를 다음과 같이 구할 수 있다. 

    a = np.array([[2, -1], [1, 1]]) # 시스템을 나타내는 행렬A
    b = np.array([1, 5]) # 해당 시스템에서 얻고자 하는 결과 
    sol = np.linalg.solve(a, b) # 선형시스템 해 구하기 
    print(sol) # 값 출력
    #결과 : [2. 3.]

    ★ 출처

     

     

    01. Linear systems in 2D

    Develop geometrical intuition for a 2D linear system Av=b Av = b Av=b where A A A is a 2-by-2 matrix, and v v v and b b b are 2-by-1 column vectors Setup Start a python shell and import libraries: import numpy as np import matplotlib as mpl import matplotl

    dododas.github.io


    'Math♾️ > Linear Algebra' 카테고리의 다른 글

    내 말로 풀어보는 선형 대수  (0) 2023.03.31
    2차원 선형 변환 시각화  (0) 2023.03.16
    행렬 곱 의미 생각하기  (0) 2022.04.29
    행렬의 의미 생각하기  (0) 2022.04.29

    댓글

Designed by Tistory.