Я пишу код, который включает в себя поиск собственных векторов заданной матрицы, и был удивлен, что Ruby дает некоторые необоснованные результаты в простых случаях.
Например, следующая матрица имеет собственный вектор, связанный с собственным значением 1:
> m = Matrix[[0r, 1/2r, 1/2r, 1/3r],
[0r, 0r, 1/4r, 1/3r],
[0r, 1/4r, 0r, 1/3r],
[1r, 1/4r, 1/4r, 0r]]
Ruby находит собственные значения достаточно хорошо, но собственный вектор взрывается:
> m.eigen.eigenvalues[2]
=> 1.0000000000000009
m.eigen.eigenvectors[2]
=> Vector[5.957702309312754e+15, 5.957702309312748e+15, 5.957702309312743e+15, 5.957702309312753e+15]
Фактический собственный вектор должен быть (7, 4, 4, 9).
Разве это не тревожит? Если Ruby не справится с крошечными матрицами, то как мы можем доверять ему вообще? Или я делаю что-то неправильно?