Экстраполяция Ричардсона

В численном анализе экстраполяция Ричардсона — это метод ускорения последовательности, используемый для улучшения скорости сходимости последовательности . оценок некоторого значения . По сути, учитывая стоимость для нескольких значений , мы можем оценить экстраполируя оценки на . Он назван в честь Льюиса Фрая Ричардсона , который представил эту технику в начале 20 века. [1] [2] хотя эта идея была уже известна Христиану Гюйгенсу при его расчете . [3] По словам Биркгофа и Роты , «его полезность для практических вычислений трудно переоценить». [4]
Практические применения экстраполяции Ричардсона включают интеграцию Ромберга , которая применяет экстраполяцию Ричардсона к правилу трапеций , и алгоритм Булирша-Стоера для решения обыкновенных дифференциальных уравнений.
Общая формула [ править ]
Обозначения [ править ]
Позволять быть приближением (точное значение), которое зависит от размера шага h (где ) с формулой ошибки вида
Обратите внимание, что при упрощении с помощью обозначения Big O следующие формулы эквивалентны:
Цель [ править ]
Экстраполяция Ричардсона – это процесс, позволяющий найти лучшее приближение изменив формулу ошибки с к Поэтому, заменив с ошибка усечения уменьшилась с к для того же размера шага . Происходит общая закономерность, при которой является более точной оценкой, чем когда . Благодаря этому процессу мы достигли лучшего приближения вычитая самый большой член ошибки, которая была . Этот процесс можно повторить, чтобы удалить больше ошибок и получить еще лучшие приближения.
Процесс [ править ]
Использование размеров шага и для некоторой константы , две формулы для являются:
( 1 ) |
( 2 ) |
Чтобы улучшить наше приближение из к удалив первый член ошибки, мы умножаем уравнение 2 на и вычтем уравнение 1, чтобы получить
Рекуррентное отношение [ править ]
Общее рекуррентное соотношение можно определить для аппроксимаций следующим образом:
Свойства [ править ]
Экстраполяцию Ричардсона можно рассматривать как преобразование линейной последовательности .
Кроме того, общую формулу можно использовать для оценки (поведение размера шага ведущего порядка при ошибке усечения ), когда ни его значение, ни известно априори . Такой метод может быть полезен для количественного определения неизвестной скорости сходимости . Учитывая приближения из трех различных размеров шага , , и , точное соотношение
Как , если и выбирается так, что , это приближенное соотношение сводится к квадратному уравнению относительно , что легко решается для с точки зрения и .
Пример экстраполяции Ричардсона
Предположим, что мы хотим аппроксимировать , и у нас есть метод это зависит от небольшого параметра таким образом, что
Определим новую функцию
Затем
Очень часто гораздо проще получить заданную точность, используя R ( h ), а не A ( h' ) с гораздо меньшим h' . Где A ( h′ ) может вызвать проблемы из-за ограниченной точности ( ошибок округления ) и/или из-за увеличения количества необходимых вычислений (см. примеры ниже).
Пример псевдокода для экстраполяции Ричардсона [ править ]
Следующий псевдокод в стиле MATLAB демонстрирует экстраполяцию Ричардсона, помогающую решить ОДУ. , методом Трапециевидным . В этом примере мы уменьшаем размер шага вдвое. каждую итерацию, и поэтому в обсуждении выше у нас было бы это . Ошибка трапециевидного метода может быть выражена в нечетных степенях, так что ошибка на нескольких шагах может быть выражена в четных степенях; это заставляет нас поднимать ко второй власти и принять полномочия в псевдокоде. Мы хотим найти значение , который имеет точное решение поскольку точное решение ОДУ есть . Этот псевдокод предполагает, что функция с именем Trapezoidal(f, tStart, tEnd, h, y0)
существует, который пытается вычислить y(tEnd)
применив метод трапеций к функции f
, с начальной точкой y0
и tStart
и размер шага h
.
Обратите внимание, что, начиная со слишком маленького начального размера шага, потенциально может возникнуть ошибка в окончательном решении. Хотя существуют методы, предназначенные для выбора наилучшего начального размера шага, один из вариантов — начать с большого размера шага, а затем позволить экстраполяции Ричардсона уменьшать размер шага на каждой итерации, пока ошибка не достигнет желаемого допуска.
tStart = 0 % Starting time
tEnd = 5 % Ending time
f = -y^2 % The derivative of y, so y' = f(t, y(t)) = -y^2
% The solution to this ODE is y = 1/(1 + t)
y0 = 1 % The initial position (i.e. y0 = y(tStart) = y(0) = 1)
tolerance = 10^-11 % 10 digit accuracy is desired
% Don't allow the iteration to continue indefinitely
maxRows = 20
% Pick an initial step size
initialH = tStart - tEnd
% Were we able to find the solution to within the desired tolerance? not yet.
haveWeFoundSolution = false
h = initialH
% Create a 2D matrix of size maxRows by maxRows to hold the Richardson extrapolates
% Note that this will be a lower triangular matrix and that at most two rows are actually
% needed at any time in the computation.
A = zeroMatrix(maxRows, maxRows)
% Compute the top left element of the matrix.
% The first row of this (lower triangular) matrix has now been filled.
A(1, 1) = Trapezoidal(f, tStart, tEnd, h, y0)
% Each row of the matrix requires one call to Trapezoidal
% This loops starts by filling the second row of the matrix,
% since the first row was computed above
for i = 1 : maxRows - 1 % Starting at i = 1, iterate at most maxRows - 1 times
% Halve the previous value of h since this is the start of a new row.
h = h/2
% Starting filling row i+1 from the left by calling
% the Trapezoidal function with this new smaller step size
A(i + 1, 1) = Trapezoidal(f, tStart, tEnd, h, y0)
% Go across this current (i+1)-th row until the diagonal is reached
for j = 1 : i
% To compute A(i + 1, j + 1), which is the next Richardson extrapolate,
% use the most recently computed value (i.e. A(i + 1, j))
% and the value from the row above it (i.e. A(i, j)).
A(i + 1, j + 1) = ((4^j).*A(i + 1, j) - A(i, j))/(4^j - 1);
end
% After leaving the above inner loop, the diagonal element of row i + 1 has been computed
% This diagonal element is the latest Richardson extrapolate to be computed.
% The difference between this extrapolate and the last extrapolate of row i is a good
% indication of the error.
if (absoluteValue(A(i + 1, i + 1) - A(i, i)) < tolerance) % If the result is within tolerance
% Display the result of the Richardson extrapolation
print("y = ", A(i + 1, i + 1))
haveWeFoundSolution = true
% Done, so leave the loop
break
end
end
% If we were not able to find a solution to within the desired tolerance
if (not haveWeFoundSolution)
print("Warning: Not able to find solution to within the desired tolerance of ", tolerance);
print("The last computed extrapolate was ", A(maxRows, maxRows))
end
См. также [ править ]
Ссылки [ править ]
- ^ Ричардсон, LF (1911). «Приближенное арифметическое решение конечными разностями физических задач, включая дифференциальные уравнения, с применением к напряжениям в каменной плотине» . Философские труды Королевского общества А. 210 (459–470): 307–357. дои : 10.1098/rsta.1911.0009 .
- ^ Ричардсон, Луизиана ; Гонт, Дж. А. (1927). «Отложенный подход к пределу» . Философские труды Королевского общества А. 226 (636–646): 299–349. дои : 10.1098/rsta.1927.0008 .
- ^ Брезински, Клод (01 ноября 2009 г.), «Некоторые пионеры методов экстраполяции» , «Рождение численного анализа » , WORLD SCIENTIFIC, стр. 1–22, doi : 10.1142/9789812836267_0001 , ISBN 978-981-283-625-0
- ^ Страница 126 из Биркгоф, Гарретт ; Джан-Карло Рота (1978). Обыкновенные дифференциальные уравнения (3-е изд.). Джон Уайли и сыновья. ISBN 0-471-07411-Х . OCLC 4379402 .
- Методы экстраполяции. Теория и практика К. Брезински и М. Редиво Залья , Северная Голландия, 1991.
- Иван Димов, Захари Златев, Иштван Фараго, Агнес Хаваси: Экстраполяция Ричардсона: практические аспекты и приложения , Walter de Gruyter GmbH & Co KG, ISBN 9783110533002 (2017).
Внешние ссылки [ править ]
- Фундаментальные методы численной экстраполяции с приложениями , mit.edu
- Ричардсон-Экстраполяция
- Экстраполяция Ричардсона на сайте Роберта Исраэля (Университет Британской Колумбии)
- Код Matlab для общей экстраполяции Ричардсона.
- Код Джулии для общей экстраполяции Ричардсона.