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를 해주세요.