Оглавление
Л 13   Л 14   Л 15   Л 16   Л 17   Л 18   Л 19

Лекция 16.
Методы прогноза и коррекции
(итерационные методы)

Изученные нами ранее методы обладали одной важной особенностью — каждому методу соответствует обычно определенный класс точности, который мы обозначали как Oi. Например, метод Эйлера обладал первым классом точности O1. Это означало, что с уменьшением шага в 10 раз (на порядок) точность результата повышается тоже в 10 раз (на один порядок). Метод Рунге-Кутты обладает 4 порядком точности — O4, при уменьшении шага в 10 раз, результат улучшается в 10 000 раз. Поскольку этот метод по сравнению с методом Эйлера использует всего в 4 раза больше вычислений, то использование его более выгодно. На сегодняшний день известны методы до 8 порядка точности (например, метод Prince Dortmund), хотя одновременно стоит иметь в виду, что написание алгоритмов для них — задача достаточно трудная. Достоинством всех этих алгоритмов является то, что объем вычислений для них заранее известен.

Если требуется достичь ЛЮБОЙ точности на шаге, то следует использовать методы прогноза и коррекции. Этот подход состоит в том, что расчет траектории, задаваемой уравнением, на каждом шаге происходит многократно. А именно, сначала происходит расчет приближенного значения функции на конце шага какой-либо простой формулой (например, методом Эйлера), далее в этой точке вычисляется производная, и расчет происходит снова из начальной точки на шаге, но с уточненным значением производной. Последняя операция — уточнения производной и значения функции на конце шага — происходит МНОГОКРАТНО НА КАЖДОМ ШАГЕ, то есть до тех пор, пока вычисленные значения (функции и производной в конце шага) не перестанут меняться или будут меняться уже незначительно, меньше чем задаваемая заранее величина ε. Только тогда можно сказать, что точность ε достигнута.

Итак, за счет итерационной процедуры на каждом отдельном шаге можно достичь любой, наперед заданной точности ε. За такое достоинство метода приходится платить: к сожалению, невозможно сказать заранее, сколько итераций потребуется для достижения на шаге заданной точности ε. Поэтому такие методы нельзя, например, использовать в системах реального времени.

Рассмотрим для примера два метода из этого класса. Как и ранее задача состоит в нахождении функции y(t) из дифференциального уравнения dy/dt = f(yxt) или множества функций из системы таких уравнений.

Метод Эйлера с итерациями

1) Предсказывающая формула вычисляет (прогнозирует) значение функции на правом конце шага: yk + 1 = yk + fk · Δt.

2) Расчитывается производная в точке k + 1 подстановкой y в исходное уравнение в k + 1 точке: fk + 1 = f(t + Δtyk + 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 + Δtyk + 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 + Δtyk + 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, иначе — конец.

[ ] Лекция 15. Метод Рунге-Кутты Лекция 17. Моделирование систем… [ ]
Л 13   Л 14   Л 15   Л 16   Л 17   Л 18   Л 19