2012-09-21 6 views
0

주어진 행렬의 고유 벡터 행렬을 보았습니다. 역으로 변환하려고 시도했을 때 eigenvector_matrix_inv()에 오류가 있습니다.Ruby Matrix :: Eigenvalue 분해 오류

require 'matrix' 

m = Matrix[ [0.5703125, 1.8369140625, 0.0, 0.0], 
      [-0.6875, -0.4609375, 0.0, 0.0], 
      [0.0, 0.0, -2.1796875, 8.7119140625], 
      [0.0, 0.0, -0.6875, 2.2890625] ] 

meigen = m.eigen.eigenvector_matrix 
meiveni = m.eigen.eigenvector_matrix_inv 
# .../matrix.rb:930:in `block in inverse_from': Not Regular Matrix (ExceptionForMatrix::ErrNotRegular) 

Mathematica 확인할대로, 단수 안 :

mruby = {{0.5703125, 1.8369140625, 0.0, 0.0}, {-0.6875, -0.4609375, 
0.0, 0.0}, {0.0, 0.0, -2.1796875, 8.7119140625}, {0.0, 
0.0, -0.6875, 2.2890625}}; 
Inverse[Eigenvectors[mruby]] 

내가 뭘 잘못

{{0.586146 - 0.302685 I, 0.586146 + 0.302685 I, 0. + 0. I, 
0. + 0. I}, {0. - 1.07831 I, 0. + 1.07831 I, 0. + 0. I, 
0. + 0. I}, {0. + 0. I, 0. + 0. I, 0.519354 + 1.16217 I, 
0.519354 - 1.16217 I}, {0. + 0. I, 0. + 0. I, 0. - 4.53135 I, 
0. + 4.53135 I}} 

를주는?

루비에서 특별한 것을 특별히 신경 써야합니까?

답변

0

고유 값 문제를 수행 할 때 행렬을 반전하지 않습니다. 많은 알고리즘이 있지만 반전은 그 중 하나가 아닙니다.

행렬이 약간 이상합니다. 두 개의 양수 요소와 두 개의 음수 대각선 요소가 있습니다. 복잡한 엔트리를 갖는 고유 벡터 (eigenvector)는 여러분이 일반적으로 가지고있는 것과 다르다는 것을 나타냅니다. 실제 고유 벡터를 갖는 실제 고유 값.

매트릭스가 잘못되었거나 잘못된 알고리즘을 선택했습니다. 헤 시안 행렬이 가지고있는 알고리즘인지 확인하고 적절한 알고리즘을 살펴보십시오.

+0

나는 복잡한 공액 고유 값을 원한다. 문제는 아니다. 문제는 Ruby가 왜 불평합니까? –

+0

Ruby가 커버 아래에 사용하는 알고리즘을 확인하십시오. 이런 종류의 매트릭스에는 적합하지 않을 수 있습니다. – duffymo