MATLAB 고유값 및 고유 벡터

Ammar Ali 2021년11월29일
MATLAB 고유값 및 고유 벡터

이 튜토리얼에서는 MATLAB에서 eig() 함수를 사용하여 주어진 행렬의 고유값과 고유 벡터를 찾는 방법에 대해 설명합니다.

MATLAB의 eig() 함수를 사용하여 고유값 및 고유 벡터 찾기

Matlab은 주어진 행렬의 고유값과 고유 벡터를 찾기 위한 내장 함수 eig()를 제공합니다. 행렬은 정방 행렬이어야 합니다. 그렇지 않으면 Matlab에 오류가 표시됩니다. 구문: E = eig(mat)는 행렬 mat의 고유값을 포함하는 열 벡터를 반환합니다. 예를 들어, 임의의 행렬을 만들고 eig() 함수를 사용하여 고유값을 찾습니다. 아래 코드를 참조하십시오.

mat = [1 3; 4 2]
E = eig(mat)

출력:

mat =

     1     3
     4     2


E =

    -2
     5

구문: [EV, DV] = eig(mat)는 열이 지정된 행렬 매트의 고유값에 대한 오른쪽 고유 벡터 및 대각 행렬 DV인 행렬 EV를 반환합니다. 예를 들어 위의 행렬의 고유값과 고유벡터를 구해보자. 아래 코드를 참조하십시오.

mat = [1 3; 4 2]
[EV,DV] = eig(mat)

출력:

mat =

     1     3
     4     2


EV =

   -0.7071   -0.6000
    0.7071   -0.8000


DV =

    -2     0
     0     5

mat x EV - EV x DV = 0 관계를 사용하여 결과를 확인할 수도 있습니다. 방정식의 왼쪽 결과는 0에 가깝지만 정확히 0이 아니라 eig()가 다음을 사용하여 분해를 수행합니다. 부동 소수점 계산. 보시다시피 변수 DV는 대각선 항목에서 정렬된 고유값을 포함합니다. 그러나 많은 경우 정렬되지 않습니다. 이러한 값을 정렬하려면 diag() 함수를 사용하여 대각선 항목을 추출하고 sort() 함수를 사용하여 값을 정렬할 수 있습니다. 예를 들어 magic() 함수를 사용하여 다른 행렬을 만들고 정렬된 값을 찾습니다. 아래 코드를 참조하십시오.

mat = magic(3)
[EV,DV] = eig(mat)
[SV, indi] = sort(diag(DV))

출력:

mat =

     8     1     6
     3     5     7
     4     9     2


EV =

   -0.5774   -0.8131   -0.3416
   -0.5774    0.4714   -0.4714
   -0.5774    0.3416    0.8131


DV =

   15.0000         0         0
         0    4.8990         0
         0         0   -4.8990


SV =

   -4.8990
    4.8990
   15.0000


indi =

     3
     2
     1

행렬 DV 내의 고유값은 정렬되지 않았지만 값을 정렬한 diag()sort() 함수는 이제 변수 SV에 저장됩니다. sort() 함수는 고유값의 인덱스도 반환했습니다. 인덱스를 사용하여 정렬된 고유값을 행렬 DV에 다시 넣을 수 있습니다. 이제 인덱스와 SV 벡터를 사용하여 정렬된 DV 및 EV 행렬을 찾을 수 있습니다. 아래 코드를 참조하십시오.

mat = magic(3);
[EV,DV] = eig(mat);
[SV, indi] = sort(diag(DV));
DVs = DV(indi,indi)
SVs = EV(:,indi)

출력:

DVs =

   -4.8990         0         0
         0    4.8990         0
         0         0   15.0000


SVs =

   -0.3416   -0.8131   -0.5774
   -0.4714    0.4714   -0.5774
    0.8131    0.3416   -0.5774

이제 대각 행렬 DV에는 정렬된 고유값이 포함됩니다. 위의 관계를 사용하여 mat x SVs - SVs x DVs = 0 결과도 확인할 수 있습니다. 구문: [EV, DV, WV] = eig(mat)는 오른쪽 고유벡터 EV, 고유값 DV 및 왼쪽 고유벡터 WV를 반환합니다. 예를 들어 위의 행렬 매트의 오른쪽 고유벡터, 고유값, 왼쪽 고유벡터를 찾아보자. 아래 코드를 참조하십시오.

mat = magic(3)
[EV,DV,WV] = eig(mat)

출력:

EV =

   -0.5774   -0.8131   -0.3416
   -0.5774    0.4714   -0.4714
   -0.5774    0.3416    0.8131


DV =

   15.0000         0         0
         0    4.8990         0
         0         0   -4.8990


WV =

   -0.5774   -0.7416   -0.0749
   -0.5774    0.6667   -0.6667
   -0.5774    0.0749    0.7416

eig() 함수를 사용하여 두 행렬의 일반 고유값과 오른쪽 고유벡터를 찾을 수도 있습니다. 구문: [EV,DV] = eig(mat1, mat2)는 쌍(mat1, mat2)의 일반 고유값과 오른쪽 고유 벡터를 반환합니다. 예를 들어, 두 개의 행렬을 만들고 eig() 함수를 사용하여 일반화된 고유값과 오른쪽 고유 벡터를 찾습니다. 아래 코드를 참조하십시오.

mat1 = magic(2)
mat2 = [1 2; 2 1]
[EV,DV] = eig(mat1,mat2)

출력:

mat1 =

     1     3
     4     2


mat2 =

     1     2
     2     1


EV =

    1.0000   -0.5000
   -1.0000    1.0000


DV =

    2.0000         0
         0    1.6667

mat1 x EV - mat2 x EV x DV = 0 관계를 사용하여 결과를 확인할 수 있습니다. 방정식의 왼쪽은 0에 가까울 것입니다.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

관련 문장 - MATLAB Vector