여러가지공부/공업수학_선형대수학

[선형대수학] 행렬 고유값과 고유벡터란? 수식풀이, 파이썬으로 예제 검증(Eigen value, eigen vector, python)

끄적끄적아무거나 2023. 3. 30. 19:18
반응형

 

목차

     

     

     

     

     

    [선형대수학] 행렬 고유값과 고유벡터란?

    선형대수학에서, 고유값(eigenvalue)과 고유벡터(eigenvector)는 선형변환(linear transformation)에 대한 중요한 개념입니다.

    선형변환은 벡터를 다른 벡터로 변환하는 연산입니다. 예를 들어, 2차원 벡터를 회전하는 변환이나, 3차원 벡터를 축소시키는 변환 등이 있습니다. 이때 고유값과 고유벡터는 선형변환에 대한 특별한 속성을 가지고 있습니다.

    고유벡터는 선형변환을 적용해도 방향이 변하지 않는 벡터를 말합니다. 다시 말해서, 어떤 선형변환을 적용하더라도 그 벡터가 향하는 방향은 변하지 않습니다. 수식으로는 다음과 같이 표현할 수 있습니다.

    • Av = λv, 수식1


    여기서 A는 선형변환, v는 고유벡터, λ는 고유값입니다. 동일한 벡터가 나와야 하므로 A는 정사각행렬(n x n)이 되어야 합니다.

     

    선형 변환이 되어도 벡터의 방향이 반대든 동일하든 같다면 고유벡터가 존재하는 것입니다. 그래서 고유 값을 곱해서 위 수식을 만족시킬 수 있습니다. 즉, 고유벡터를 늘리거나 줄이는 선형변환을 나타냅니다. 고유값은 실수일 수도 있고, 복소수일 수도 있습니다.

    만약 고유값이 양수라면, 고유벡터는 선형변환에 의해 방향은 유지되면서 크기만 커집니다. 고유값이 음수라면, 고유벡터는 방향은 유지되면서 크기는 작아집니다. 고유값이 0이라면, 해당 고유벡터는 영벡터가 됩니다.

     

     

    • Av - λv = (A - λI)v = 0, 수식2

     

    위 식에서 벡터 v 값 앞에 행렬(T - λI)이 역행렬로 만들어질 수 없으면 v는 0을 제외하고는 고유벡터가 없게 되는 것입니다. 

     

    • det(A - λI) = 0, 수식3 

     

    위 수식을 만족해야 역행렬이 존재하게 됩니다.

     

    이제 수식3을 통해서 람다(λ)를 구하였습니다. 고유벡터는 (A - λI)v = 0 이므로 (A - λI)의 Null 공간에 존재하는 모든 벡터가 됩니다. 

     

     

     

     

     

     

     

     

    행렬 고유값과 고유벡터 예제 풀이

     

    A의 고유값과 고유 벡터를 구해보겠습니다.

     

    고유값을 구하기 위해서는 수식3을 사용합니다.

     

    (2-λ)(2-λ) - 1(1) = 0
         
    λ^2 - 4λ + 3 = 0
         
    (λ-1)(λ-3) = 0
         
    λ = 1 or λ = 3

     

     

     

    첫 번째 고유값인 λ=1일 때, 수식2에 A와 λ를 대입하여 다음과 같이 풀이할 수 있습니다.

     

     

    (가우시안 소거법으로 계산한) Rank가 1이고 2 x 2 행렬이므로 2 - 1 = 1해서 Null space 벡터 값이 0을 제외하고 하나의 기저가 존재합니다. 

     

     

    동일 방법으로 고유값 λ=3에서 고유벡터를 구하면 됩니다.

     

     

     

     

     

     

    파이썬 행렬 고유값과 고유벡터 풀이

     

    예제는 앞서 수식과 동일한 예제를 실행하겠습니다. 

     

    예제 코드>>

    import numpy as np
    
    # 2x2 행렬 생성
    A = np.array([[2, 1], [1, 2]])
    
    # 고유값과 고유벡터 계산
    eigenvalues, eigenvectors = np.linalg.eig(A)
    
    # 결과 출력
    print("고유값:", eigenvalues)
    print("고유벡터:", eigenvectors)

     

     

    결과>>

    고유값: [3. 1.]
    고유벡터: [[ 0.70710678 -0.70710678]
     [ 0.70710678  0.70710678]]

     

    고유벡터가 앞서 계산한 값과 다른 이유는 앞서 계산 값은 Null vector의 기저 벡터입니다. Null vector를 만족하는 기저 벡터가 있으면 앞에 scalar를 곱하면 다른 무수한 null vector를 만들 수 있습니다. 위 파이썬의 결과는 앞서 기저에 0.707씩 곱한 결과 입니다.

    반응형