1120 Нет, это не беспокоит. Эта матрица, вероятно, просто не работает с этой конкретной реализацией алгоритма собственного вектора. Эффективное и стабильное вычисление общего собственного вектора нетривиально , в конце концов.
Библиотека Matrix
адаптирована из JAMA, матричного пакета Java , в котором говорится, что она выполняет численные вычисления , а не символьные вычисления :
Не охвачено. JAMA ни в коем случае не является полной средой линейной алгебры ... она сосредоточена на принципе математической функциональности, необходимой для выполнения числовой линейной алгебры
Взгляд на Исходный код для Matrix::EigenvalueDecomposition
, я обнаружил, что он называет использование QR-алгоритма . Я не до конца понимаю тонкости математики, но думаю, я мог бы понять , почему это вычисление не удается. Механизм вычисления работает следующим образом:
На k-м шаге (начиная с k = 0) мы вычисляем QR-разложение A k = Q k R k ... При определенных условиях [4] sup> матрицы A k сходятся к треугольной матрице, форме Шура группы A. Собственные значения треугольной матрицы перечислены на диагонали, и проблема собственных значений решена.
В «псевдо» Ruby это концептуально означает:
working_matrix = orig_matrix.dup
all_q_matrices = []
loop do
q, r = working_matrix.qr_decomposition
all_q_matrices << q
next_matrix = r * q
break if difference_between(working_matrix, next_matrix) < accuracy_threshold
end
eigenvalues = working_matrix.diagonal_values
Для собственных векторов оно продолжается:
при сходимости, AQ = QΛ, где Λ - это диагональная матрица собственных значений, к которым сходится A, и где Q - это совокупность всех ортогональных преобразований подобия, необходимых для того, чтобы туда попасть. Таким образом, столбцы Q являются собственными векторами.
В «псевдо» Ruby, продолжение:
eigenvectors = all_q_matrices.inject(:*).columns
Мы можем видеть, что итерация численных вычислений производится для вычисления приближенного Собственные значения, и в качестве побочного эффекта, набор приближенных Q
матриц собраны. Затем эти аппроксимированные Q
матрицы составляются вместе для формирования собственных векторов.
Составление аппроксимаций - это то, что, вероятно, вызвало крайне неточные результаты. Пример катастрофической отмены в Math StackExchange показывает простое квадратичное вычисление с относительной погрешностью 400% . Вы могли бы представить, как алгоритм итеративной матрицы с повторяющимися арифметическими операциями может работать намного хуже.
Зерно соли
Опять же, у меня нет глубокого понимания ни математики алгоритма, ни его реализации, поэтому я не знаю точно , какие части вычисления вызвали вашу конкретную ошибку 85110032990182200%, но я надеюсь, что теперь вы можете понять, как это могло произойти.
Хорошо, я решил это навсегда.
Я использовал Artifactory для создания файла settings.xml для меня, и по умолчанию он указывал мне на репозиторий "libs-Releases".
Вместо этого я хочу, чтобы мой репозиторий «релизы» указывал на гораздо более крупный виртуальный репозиторий «удаленные репозитории».
Все, что для этого потребовалось, - это простое изменение параметров функции «Создать настройки».
Похоже, что это заблокированный порт, так как я использую свой собственный артефактный репозиторий. Конечно, порт, который он использует, выглядит совершенно недокументированным, но WireShark показывает его как 58754. Звучит случайно, надеюсь, это не так!