Ruby Matrix:: Ошибка разложения по собственным значениям

Я посмотрел на матрицу собственных векторов данной матрицы, но когда я пытаюсь инвертировать ее, у меня возникает ошибка в 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?

1 ответ

Вы не инвертируете матрицу, когда решаете задачи на собственные значения. Есть много алгоритмов, но инверсия не является одним из них.

Ваша матрица немного странная: у вас есть два положительных и два отрицательных диагональных элемента. Я думаю, что собственные векторы, имеющие сложные записи, предполагают, что это не то, что вы обычно имеете: реальные собственные значения с реальными собственными векторами.

Либо ваша матрица неверна, либо вы выбрали неправильный алгоритм. Посмотрите, есть ли у вас гессенская матрица, и посмотрите на соответствующие алгоритмы.

Другие вопросы по тегам