gsl 라이브러리를 사용할 때, eigenvalue 와 eigenvector 가 약간 다르게 나오는 것 같은데, 이유가 무엇일까요?
글쓴이: ds1857 / 작성시간: 목, 2010/09/30 - 8:31오후
수학 라이브러리로 gsl (GNU Scientific Library) 을 사용하고 있습니다.
그런데 gsl 에서 제공하는 eigenvalue 와 eigenvector 계산 시스템이 어떻게 다른 지는 잘 몰라도,
얻어지는 eigenvalue 와 eigenvector 가 다른 프로그램과 좀 다르더군요.
간단한 2x2 매트릭스
1 3
4 2
를 gsl 의 gsl_eigen_symmv (gsl_matrix * A, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_symmv_workspace * w)
함수를 통해 값을 구해보면,
-2.53113
5.53113
이라는 값이 튀어나오네요.
그런데 손으로 풀어보아도 위 매트릭스의 eigenvalue 는 -2 와 5 이고, R 같은 다른 수치해석 프로그램으로 보아도 gsl 과 다른 고유값과 고유벡터를 출력하네요.
다른 분들도 gsl 로 eigensystem 계산을 경험해 보신 분이라면 비슷한 일을 겪으시지 않았을 까 생각되는데, 이유가 무엇일까요?
ThEnd.
Forums:
사용하신 프로그램을
사용하신 프로그램을 보니 symmetric matrix에 대한 것인데 풀려고하는 matrix는
non-symmetric matrix이네요.
답변 감사합니다;
답변 감사합니다; 어이없는 실수가 있었네요.
그런데 알고보니 제가 사용한 매트릭스가 covariance matrix 여서 symmetric 한 매트릭스였군요.
코드를 수정해서, 비교적 작은 규모의 매트릭스에서는 eigenValue 가 제대로 구해지는 것을 확인했는데,
제가 구하려고 하는 다음 matrix 에서는 eigenValue 값이 다르게 나오는군요;
///////
0.20105 -0.153407 0.0134276 0.0762017 -0.12282 -0.0906897 -0.173586 0.000288044 -0.0300398 0.0567967 -0.0168638 0.220321
-0.153407 0.506209 -0.0423424 -0.0190738 -0.0292476 0.0665558 0.10436 -0.00626906 0.15984 0.0342537 0.0489368 -0.289157
0.0134276 -0.0423424 0.217503 0.0473099 -0.0538332 -0.0252146 -0.0042231 0.00255592 0.110521 0.104925 -0.0201964 -0.0247339
0.0762017 -0.0190738 0.0473099 0.0520131 -0.0478463 -0.0510725 -0.0912655 0.0007523 0.0467226 0.0400822 -0.00556623 0.0934814
-0.12282 -0.0292476 -0.0538332 -0.0478463 0.183273 0.031775 0.0567599 0.00316318 -0.0139122 -0.116168 0.0045923 -0.00529419
-0.0906897 0.0665558 -0.0252146 -0.0510725 0.031775 0.0585599 0.108617 -0.00132735 -0.0218764 -0.0203219 0.00801688 -0.136141
-0.173586 0.10436 -0.0042231 -0.0912655 0.0567599 0.108617 0.210924 -0.00179386 -0.0258678 -0.0221253 0.0100305 -0.263656
0.000288044 -0.00626906 0.00255592 0.0007523 0.00316318 -0.00132735 -0.00179386 0.000183811 0.00055335 -0.00113361 -0.000684861 0.00451798
-0.0300398 0.15984 0.110521 0.0467226 -0.0139122 -0.0218764 -0.0258678 0.00055335 0.158459 0.0582221 0.00707263 -0.0424454
0.0567967 0.0342537 0.104925 0.0400822 -0.116168 -0.0203219 -0.0221253 -0.00113361 0.0582221 0.100811 -0.00644813 -0.0279562
-0.0168638 0.0489368 -0.0201964 -0.00556623 0.0045923 0.00801688 0.0100305 -0.000684861 0.00707263 -0.00644813 0.00600897 -0.0238552
0.220321 -0.289157 -0.0247339 0.0934814 -0.00529419 -0.136141 -0.263656 0.00451798 -0.0424454 -0.0279562 -0.0238552 0.401901
/////
해당 matrix 의 eigenValue 값을 구하면,
gsl 에서는
-1.76235e-019
2.18217e-018
9.60073e-018
-2.74558e-017
3.58183e-017
3.58183e-017
-4.07466e-017
-4.07466e-017
0.217017
0.306385
0.5173
1.05619
이 나오고,
R 에서는
[1] 1.056194e+00 5.172995e-01 3.063855e-01 2.170164e-01 6.275348e-07 2.623124e-07
[7] 2.134844e-07 6.044838e-09 -1.438016e-09 -2.754930e-08 -2.606714e-07 -7.047846e-07
가 나오는데, 1~4번째 항목은 같은 값이 나오는데 그 다음부터는 같은 값이 나오지 않는군요.
ThEnd.
ThEnd.
어느것이 맞을지를
어느것이 맞을지를 모르겠으니, 한가지 방법은 LAPACK 같은 것을 사용하여 check해보는 것입니다.
혹시 lapack과 틀리게 나오면 gsl 만드는 곳에 bug report를 해주세요.
댓글 달기