Я пытаюсь написать реализацию алгоритма факторизации спектральной плотности Вильсона [1] для Python. Алгоритм итеративно факторизует матричную функцию [QxQ] в ее квадратный корень (это своего рода расширение квадратного корневого искателя Ньютона-Рафсона для спектральных матриц плотности).Стратегии для отладки проблем с числовой стабильностью?
Проблема в том, что моя реализация только сходится для матриц размером 45x45 и меньше. Таким образом, после 20 итераций суммарный квадрат разницы между матрицами составляет около 2.45e-13. Однако, если я делаю ввод размера 46x46, он не сходится до 100-й или около того итерации. Для 47x47 или больше матрицы никогда не сходятся; ошибка колеблется от 100 до 1000 для примерно 100 итераций, а затем начинает расти очень быстро.
Как бы вы попытались отладить что-то вроде этого? Кажется, нет какой-либо конкретной точки, в которой она сошла с ума, и матрицы слишком велики для меня, чтобы на самом деле попытаться выполнить расчет вручную. У кого-нибудь есть советы/учебники/эвристики для поиска причудливых числовых ошибок вроде этого?
Я никогда не имел дело с чем-нибудь, как это раньше, но я надеюсь, что некоторые из вас ...
Спасибо, - Dan
[1] Г. Т. Уилсон. «Факторизация матричных спектральных плотностей». SIAM J. Appl. Math (Vol 23, No. 4, Dec. 1972)
Что вы подразумеваете под «только сходится для матриц размером 45x45?» Могут ли также матрицы с размером меньше 45x45? – badp
Нет, извините, отредактировал сообщение. Он сходится успешно для размера 45x45 и меньше – Dan