Лекция 16.
Методы прогноза и коррекции
(итерационные методы)
Изученные нами ранее методы обладали одной важной особенностью каждому
методу соответствует обычно определенный класс точности, который мы обозначали
как
Oi.
Например, метод Эйлера обладал первым классом точности
O1.
Это означало, что с уменьшением шага в 10 раз (на порядок) точность результата
повышается тоже в 10 раз (на один порядок). Метод Рунге-Кутты обладает 4
порядком точности
O4,
при уменьшении шага в 10 раз, результат улучшается в 10 000 раз.
Поскольку этот метод по сравнению с методом Эйлера использует всего в 4 раза
больше вычислений, то использование его более выгодно. На сегодняшний день
известны методы до 8 порядка точности (например, метод Prince Dortmund), хотя
одновременно стоит иметь в виду, что написание алгоритмов для них задача
достаточно трудная. Достоинством всех этих алгоритмов является то, что объем
вычислений для них заранее известен.
Если требуется достичь ЛЮБОЙ точности на шаге, то следует
использовать методы прогноза и коррекции. Этот подход состоит в том, что расчет
траектории, задаваемой уравнением, на каждом шаге происходит многократно. А
именно, сначала происходит расчет приближенного значения функции на конце шага
какой-либо простой формулой (например, методом Эйлера), далее в этой точке
вычисляется производная, и расчет происходит снова из начальной точки на шаге,
но с уточненным значением производной. Последняя операция уточнения
производной и значения функции на конце шага происходит
МНОГОКРАТНО НА КАЖДОМ ШАГЕ, то есть до тех пор, пока вычисленные
значения (функции и производной в конце шага) не перестанут меняться или будут
меняться уже незначительно, меньше чем задаваемая заранее величина
ε.
Только тогда можно сказать, что точность
ε
достигнута.
Итак, за счет итерационной процедуры на каждом отдельном шаге можно
достичь любой, наперед заданной точности
ε.
За такое достоинство метода приходится платить: к сожалению, невозможно сказать
заранее, сколько итераций потребуется для достижения на шаге заданной точности
ε.
Поэтому такие методы нельзя, например, использовать в системах реального
времени.
Рассмотрим для примера два метода из этого класса. Как и ранее задача состоит в
нахождении функции
y(t)
из дифференциального уравнения
dy/dt = f(y, x, t)
или множества функций из системы таких уравнений.
Метод Эйлера с итерациями
1)
Предсказывающая формула
вычисляет (прогнозирует) значение функции на правом конце шага:
yk + 1 = yk + fk · Δt.
2) Расчитывается производная в точке
k + 1
подстановкой
y
в исходное уравнение в
k + 1
точке:
fk + 1 = f(t + Δt, yk + 1).
3) Уточняющая формула,
используя старое значение производной (с шага 1) и уточненное с шага 2, дает
уточненное значение
yk + 1:
yk + 1 = yk + (fk + fk + 1) · Δt/2.
Здесь же производится подсчет итераций счетчиком
i:
i := i + 1.
4) Проверка точности:
|yk + 1i-я итерация yk + 1(i + 1)-я итерация| ≤ ε.
Если условие выполнено и точность
ε
достигнута, то переходим на следующий шаг 5), иначе осуществляется переход на
шаг 2) и процесс уточнения повторяется с новыми значениями
y
и
f,
причем их старое значение берется с предыдущей итерации.
5) Подготовка к новому шагу: изменение счетчика времени
t
на величину
Δt
и изменение номера шага
k:
t := t + Δt
k := k + 1.
6) Проверка окончания расчета:
t ≤ T.
Если условие выполняется, расчет продолжается для следующей точки, переход на
1), иначе конец.
Метод Милна
1)
По предсказывающей формуле
вычисляется грубое значение
y
на правом конце интервала:
yk + 1:
yk + 1 = yk 3 + 4/3 · (2 · fk fk 1 + 2 · fk 2) · Δt.
2) Рассчитывается производная в
k + 1
точке:
fk + 1 = f(t + Δt, yk + 1).
3) Снова рассчитывается
yk + 1
по уточненной формуле,
используя уже новое значение производной в точке
k + 1:
yk + 1 = yk 1 + 1/3 · (fk + 1 + 4 · fk + fk 1) · Δt.
4) Рассчитывается производная в
k + 1
точке с учетом вновь вычисленного более точного значения
yk + 1:
fk + 1 = f(t + Δt, yk + 1).
Здесь же производится подсчет итераций счетчиком
i:
i := i + 1.
5) Проверка точности:
|yk + 1i-я итерация yk + 1(i + 1)-я итерация| ≤ ε.
Если условие выполнено, и точность
ε
достигнута, то переходим на следующий шаг 6, иначе осуществляется переход на шаг
3 и процесс уточнения повторяется с новыми значениями
y
и
f,
причем их старое значение берется с предыдущей итерации.
6) Подготовка к новому шагу: изменение счетчика времени
t,
изменение номера шага
k:
t := t + Δt
k := k + 1.
7) Проверка окончания расчета:
t ≤ T.
Если условие выполняется, то расчет продолжается для следующей точки, и
осуществляется переход на шаг 1, иначе конец.
|