2012-09-21 46 views
0

我查看了給定矩陣的特徵向量矩陣,但是當我嘗試反轉它時,我在eigenvector_matrix_inv()中有錯誤。紅寶石矩陣::特徵值分解錯誤

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}} 

我在做什麼錯?

我應該特別關心Ruby中特別的東西嗎?

回答

0

當您執行特徵值問題時,您不會反轉矩陣。有很多算法,但倒置並不是其中之一。

你的矩陣有點奇怪:你有兩個正和兩個負對角元素。我認爲具有複雜條目的特徵向量表明它不是你通常所具有的:具有真正特徵向量的真實特徵值。

您的矩陣不正確或您選擇了錯誤的算法。看看是否有一個Hessian矩陣,並查看適當的算法。

+0

我想要複共軛特徵值,這不是問題。問題是:爲什麼Ruby會抱怨? –

+0

檢查Ruby在封面下使用的算法。它可能不適合這種矩陣。 – duffymo