Основной алгоритм Wright, Hinshaw и Bennett (алгоритм WHB) очень прост: изменение X карты таково:
dX = (B-AX)/diag(A)Хотя эта процедура сходится, она часто делает это очень медленно. Обычно существует осциллирующий член, для которого остатки изменяются приблизительно в -0.9 раза на одну итеррацию. Сходимость процедуры можно улучшить, заменив алгоритм расчета на следующий:
dX = f*(B-AX)/diag(A)где фактор скорости f подобран так, чтобы исключить осциллирующий член. На приведенном ниже графике показана скорость сходимости для исходного алгоритма WHB черным, и ускоренная версия, использующая различные f синим и зеленым. Данное моделирование охватывало период наблюдений в 181 день, причем 2 из каждых 3 часов не учитывались, с целью минимизировать количество необходимого времени, чтобы обработать упорядоченные во времени данные, что требует осуществления перемножений матриц, требуемое членом AX.
При применении данного метода по отношению к более хорошим данным картирования,
например при моделировании данных за 1 год, выигрыш в скорости для метода
сопряженных градиентов уменьшается, как показано ниже:
Метод сопряженных градиентов требует симметричных матриц, а матрица A не является симметричной, если мы не учитываем данные с опорным лучем в плоскости Галактики. Но если мы ограничим вектор X областью за пределами исключительной галактической зоны, тогда
C C с исключительной зоной структура матриц такова C C / \ / \ / \ C | A' 0 | | x | | b | C | | | | = | | C | C D | | y | | e | C \ / \ / \ / C C где A' есть симметричная, а D - диагональная матрицы. x есть часть карты, C вне исключительной зоны Галактики, а y есть исключительная зона Галактики. C
C C Прежде всего, мы решаем Ax = b методом сопряженных градиентов: C C x = b/diag(A) C r = b-Ax C g = r/diag(A) C C while ||r|| слишком велико do C rho = r*g C if first beta = 0 else beta = rho/rho' C p = g + beta*p C q = Ap C x = x+[rho/(p*q)]*p C r = r-[rho/(p*q)]*p C rho' = rho C endwhile C C Затем мы заполняем часть карты, соответствующую Галактике с помощью C y = (E-Cx)/D C
Выше приведен фрагмент вычислений с частичным использованием инструкций языка программирования фортран. Этот фрагмент оставлен без перевода, т.к. в таких обозначениях он будет более понятен тем, кто знаком с программированием. - Прим. Переводчика
Программы (Фортран):