Цитата |
---|
вроде симплекс- метода? |
Нет. В симплекс-методе тоже есть итерации, но связаны они с перебором вершин, а сами итерации лишь отвечают принципу постепенного поиска решения (в данном случае связанного с простым перебором). Метод же прогноза и коррекции - это целый принцип построения семейств методов вычислительной математики (computer science), которыми решаются уравнения и системы уравнений, в том числе дифференциальные. У вас, видимо, компьютерная специальность от технического ВУЗа, поэтому вы знакомы только с симплекс-методом, а программисты от мехматов и физфаков имеют очень хорошую подготовку по данному разделу computer science.
В случае дифференциальных уравнений прогноз и коррекция позволяют перейти от одношаговых методов (типа Рунге-Кутты четвертого порядка) интегрирования дифференциальных уравнений к многошаговым (типа метода Адамса), где для выполнения следующей итерации предварительно оценивается величина ошибки, которая в дальнейшем используется для более точного вычисления следующего шага интегрирования.
А основано это все еще на идеях Ньютона, который придумал итеративный способ решения обыкновенных уравнений (он так и называется - метод Ньютона). Принцип состоит в следующем. Пусть, например, у нас есть уравнение cos(x) = x. Аналитически его решить нельзя. Поэтому, вместо этого мы определяем функцию y = cos(x) - x и ищем решение уравнения y(x) = 0.
Для этого, на первом этапе мы строим грубое приближение, "угадывая" конечный результат. Допустим, мы спрогнозировали в качестве нулевого (начального) приближения ответ x0 = 1/2. На этом этап прогнозирования заканчивается, начинается этап коррекции.
На данном этапе мы вычисляем y0 = cos(x0) - x0. Получаем результат и оцениваем его точность: значение y0 оказывается положительным и далеко не равным нулю, точность неудовлетворительна, нужна новая итерация.
Снова переходим к этапу прогноза. Значение y0 у нас было положительным, значит двигаться нужно в сторону увеличения x. Шаг dx уменьшаем вдвое до 1/4, чтобы не промахнуться слишком сильно. Получаем x1 = x0 + dx = 0.75. Прогноз завершен, переходим к оцениванию и коррекции.
Считаем y1 = cos(x1) - x1. Получаем теперь уже негативное значение y1, величина ошибки все еще достаточно велика, нужно новая итерация. Прогноз.
Поскольку y(x) сменила знак и стала отрицательна, это означает, что мы перепрыгнули ноль и нужно двигаться в обратном направлении. Меняем знак dx и снова уменьшаем шаг, теперь dx = -1/8. Снова переходим к анализу и коррекции...
... Цикл повторяется, пока не будет достигнута требуемая точность.
... PROFIT!
При большом числе переменных задача легко параллелится, причем один блок все время занят прогнозированием (синтезом), а второй - коррекцией (анализом).