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 で特に注意すべきことはありますか?

4

1 に答える 1

0

固有値問題を行うときは、行列を反転しません。アルゴリズムはたくさんありますが、反転はその 1 つではありません。

あなたの行列は少し奇妙です: 2 つの正の対角要素と 2 つの負の対角要素があります。複雑なエントリを持つ固有ベクトルは、それが通常持っているものではないことを示唆していると思います: 実固有ベクトルを持つ実固有値。

マトリックスが正しくないか、間違ったアルゴリズムを選択しました。ヘッセ行列があるかどうかを確認し、適切なアルゴリズムを調べてください。

于 2012-09-21T00:39:33.113 に答える