2012-09-21 48 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