Я пытаюсь диагонализировать некоторые плотные, плохо обусловленные матрицы. В машинной точности результаты являются неточными (возвращая отрицательные собственные значения, собственные векторы не имеют ожидаемой симметрии). Я переключился на функцию Eigensystem [] Mathematica, чтобы использовать преимущества произвольной точности, но вычисления очень медленные. Я открыт для любого количества решений. Существуют ли пакеты / алгоритмы, которые хорошо подходят для плохо обусловленных проблем? Я не эксперт по предварительному кондиционированию, поэтому я не уверен, насколько это может помочь. В противном случае все, о чем я могу думать, - это распараллеленные решатели на собственные значения произвольной точности, но я не знаком ни с чем, кроме Mathematica, MATLAB и C ++.
Чтобы дать некоторое представление о проблеме, матрицы большие, но не огромные (максимум от 4096x4096 до 32768x32768). Они действительны, симметричны, и собственные значения ограничены между 0 и 1 (исключая), причем многие собственные значения очень близки к 0 и ни один не близок к 1. Матрица по существу является оператором свертки. Мне не нужно диагоналировать все мои матрицы, но чем больше я могу пойти, тем лучше. У меня есть доступ к вычислительным кластерам со многими процессорами и возможностями распределенных вычислений.
Спасибо