Дельта-квадратный процесс Айткенса - Aitkens delta-squared process
В числовой анализ, Дельта-квадрат процесс Эйткена или же Экстраполяция Эйткена это серийное ускорение метод, используемый для ускорения скорость конвергенции последовательности. Он назван в честь Александр Айткен, который ввел этот метод в 1926 г.[1] Его ранняя форма была известна Секи Коува (конец 17 века) и был найден для выпрямления круга, то есть вычисления π. Это наиболее полезно для ускорения сходимости линейно сходящейся последовательности.
Определение
Учитывая последовательность , с этой последовательностью ассоциируется новая последовательность
который может, с улучшенным числовая стабильность, также можно записать как
или эквивалентно как
куда
и
за
Очевидно, некорректно определено, если содержит нулевой элемент или, что то же самое, если последовательность первые отличия имеет повторяющийся термин.
С теоретической точки зрения, если это имеет место только для конечного числа индексов, можно легко согласиться рассмотреть последовательность ограничено индексами с достаточно большим . С практической точки зрения, как правило, учитываются только несколько первых членов последовательности, которые обычно обеспечивают необходимую точность. Более того, при численном вычислении последовательности нужно позаботиться о том, чтобы остановить вычисление, когда ошибки округления в знаменателе становятся слишком большими, и операция Δ² может отменить слишком много значащие цифры. (Для численного расчета лучше использовать скорее, чем .)
Характеристики
Дельта-квадратный процесс Эйткена - это метод ускорение схождения, и частный случай нелинейного преобразование последовательности.
буду сходятся линейно к если существует число μ ∈ (0, 1) такое, что
Метод Эйткена ускорит последовательность если
не является линейным оператором, но выпадает постоянный член, а именно: , если является константой. Это видно из выражения с точки зрения конечная разница оператор .
Хотя новый процесс, как правило, не сходится квадратично, можно показать, что для фиксированная точка процесс, то есть для повторяющаяся функция последовательность для какой-то функции , сходящаяся к неподвижной точке, сходимость квадратичная. В этом случае метод известен как Метод Стеффенсена.
Опытным путем А-операция устраняет «самую важную ошибку». В этом можно убедиться, рассмотрев последовательность вида , куда :Последовательность затем дойдет до предела, например уходит в ноль.
Геометрически график экспоненциальной функции это удовлетворяет , и имеет горизонтальную асимптоту при (если ).
Можно также показать, что если идет к своему пределу со скоростью строго больше 1, не имеет лучшей скорости сходимости. (На практике редко бывает, например, квадратичная сходимость, которая означала бы более 30 или 100 правильных десятичных знаков после 5 или 7 итераций (начиная с 1 правильной цифры); обычно в этом случае ускорение не требуется.)
На практике, сходится к пределу намного быстрее, чем делает, как показано в приведенном ниже примере расчетов. Обычно гораздо дешевле рассчитать (включая только вычисление разностей, одно умножение и одно деление), чем для вычисления большего количества членов последовательности . Однако необходимо соблюдать осторожность, чтобы избежать ошибок из-за недостаточной точности при вычислении различия в числителе и знаменателе выражения.
Примеры расчетов
Пример 1: Значение можно аппроксимировать, приняв начальное значение для и повторяя следующее:
Начиная с
п | Икс = повторное значение | Топор |
0 | 1 | 1.4285714 |
1 | 1.5 | 1.4141414 |
2 | 1.4166667 | 1.4142136 |
3 | 1.4142157 | -- |
4 | 1.4142136 | -- |
Здесь стоит отметить, что метод Эйткена не сохраняет два шага итерации; вычисление первых трех Топор значения требовали первых пяти Икс значения. Кроме того, второе значение Ax явно уступает 4-му значению x, в основном из-за того, что процесс Эйткена предполагает линейную, а не квадратичную сходимость.[нужна цитата ].
Пример 2: Значение можно рассчитать как бесконечную сумму:
п | срок | Икс = частичная сумма | Топор |
0 | 1 | 1 | 0.79166667 |
1 | −0.33333333 | 0.66666667 | 0.78333333 |
2 | 0.2 | 0.86666667 | 0.78630952 |
3 | −0.14285714 | 0.72380952 | 0.78492063 |
4 | 0.11111111 | 0.83492063 | 0.78567821 |
5 | −9.0909091×10−2 | 0.74401154 | 0.78522034 |
6 | 7.6923077×10−2 | 0.82093462 | 0.78551795 |
7 | -6.6666667×10−2 | 0.75426795 | -- |
8 | 5.8823529×10−2 | 0.81309148 | -- |
В этом примере метод Эйткена применяется к сублинейно сходящемуся ряду, что значительно ускоряет сходимость. Это все еще сублинейно, но намного быстрее, чем исходная сходимость: первое значение Ax, для вычисления которого потребовались первые три значения x, ближе к пределу, чем восьмое значение x.
Пример псевдокода для экстраполяции Эйткена
Ниже приведен пример использования экстраполяции Эйткена, чтобы помочь найти предел последовательности. когда дано , которую мы считаем неподвижной точкой . Например, мы могли бы иметь с который имеет неподвижную точку так что (видеть Методы вычисления квадратных корней ).
Этот псевдокод также вычисляет приближение Эйткена к . Экстраполяции Эйткена будут обозначены aitkenX
. Мы должны проверить, не становится ли во время вычисления экстраполяции слишком маленьким знаменатель, что может произойти, если у нас уже есть большая точность, поскольку в противном случае может быть внесена большая ошибка. Обозначим это маленькое число через эпсилон
.
% Эти варианты зависят от решаемой проблемыx0 = 1 % Начальное значениеж(Икс) = (1/2)*(Икс + 2/Икс) % Функция, которая находит следующий элемент в последовательноститолерантность = 10^-10 % 10 желательна точностьэпсилон = 10^-16 % Не хочу делить на меньшее числомаксИтерации = 20 % Не позволяйте итерациям продолжаться бесконечноhaveWeFoundSolution = ложный % Удалось ли найти решение в пределах желаемого допуска? еще нет.за я = 1 : максИтерации x1 = ж(x0) x2 = ж(x1) если (x1 ~= x0) лямбда = абсолютная величина((x2 - x1)/(x1 - x0)) % ДОПОЛНИТЕЛЬНО: вычисляет приближение | f '(fixedPoint) |, которое обозначается лямбда конец знаменатель = (x2 - x1) - (x1 - x0); если (абсолютная величина(знаменатель) < эпсилон) % Не хочу делить на слишком маленькое число Распечатать('ВНИМАНИЕ: знаменатель слишком мал') перемена; % Выйти из цикла конец aitkenX = x2 - ( (x2 - x1)^2 )/знаменатель если (абсолютная величина(aitkenX - x2) < толерантность) % Если результат в пределах допуска Распечатать("Фиксированная точка", aitkenX)) % Отобразить результат экстраполяции Эйткена haveWeFoundSolution = истинный перемена; % Готово, выходите из цикла конец x0 = aitkenX % Обновите x0, чтобы начать заново конецесли (haveWeFoundSolution == ложный) % Если бы мы не смогли найти решение в пределах желаемого допуска Распечатать(«Предупреждение: невозможно найти решение в пределах желаемого допуска», толерантность) Распечатать(«Последняя вычисленная экстраполяция была», aitkenX)конец
Смотрите также
- Скорость сходимости
- Предел последовательности
- Итерация с фиксированной точкой
- Экстраполяция Ричардсона
- Преобразование последовательности
- Трансформация хвостовика
- Метод Стеффенсена
Примечания
- ^ Александр Айткен, "О численном решении Бернулли алгебраических уравнений", Труды Королевского общества Эдинбурга (1926) 46 С. 289–305.
Рекомендации
- Уильям Х. Пресс, и другие., Числовые рецепты на C, (1987) Издательство Кембриджского университета, ISBN 0-521-43108-5 (Видеть Раздел 5.1 )
- Абрамовиц и Стегун, Справочник по математическим функциям, раздел 3.9.7
- Кендалл Э. Аткинсон, Введение в численный анализ(1989) John Wiley & Sons, Inc, ISBN 0-471-62489-6