Смекни!
smekni.com

Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 3-го порядка (стр. 2 из 5)

Схема не разрешена в явном виде, поэтому требуется итерационная процедура:


, (2.15)

где s=1,2,… – номер итерации. Обычно схема сходится за 3-4 итерации.

Так как формула трапеций имеет третий порядок точности, то погрешность апроксимации – второй.

Схемы с дробным шагом

Схема предиктор-корректор (Рунге-Кутта) 2-го порядка

Используя в (2.5) формулу средних, получим:

,(2.16)

где

– решение системы на середине интервала [xk, xk+1] . Уравнение явно разрешено относительно
, однако в правой части присутствует неизвестное значение
. Поэтому сначала расчитывают
(предиктор):

. (2.17)

Затем расчитывают

(корректор) по формуле (2.16). Схема имеет первый порядок погрешности.

– Схема Рунге-Кутта 4-го порядка

Используя в (2.5) формулу Симпсона, получим:

(2.18)

Наиболее часто рассчитывают неявное по

уравнение по следующей схеме:

Сначала рассчитывают предиктор вида:

(2.19)

затем корректор по формуле:

(2.20)

Поскольку формула Симпсона имеет пятый порядок погрешности, то точность ε(h) – четвёртого порядка.

Многошаговые схемы

Многошаговые методы решения задачи Коши характеризуются тем, что решение в текущем узле зависит от данных не в одном предыдущем или последующем узле сетки, как это имеет место в одношаговых методах, а зависит от данных в нескольких соседних узлах.

Идея методов Адамса заключается в том, чтобы для повышения точности использовать вычисленные уже на предыдущих шагах значения

Если заменим в (2.5) подинтегральное выражение интерполяционным многочленом Ньютона, построенного по узлам

, то после интегрирования на интервале
получим явную экстраполяционную схему Адамса. Если заменим в (2.5) подинтегральное выражение на многочлен Ньютона, построенного по узлам
, то получим неявную интерполяционную схему Адамса.

– Явная экстраполяционная схема Адамса 2-го порядка

(2.21)

Схема двухшаговая, поэтому необходимо для расчётов найти по схеме Рунге-Кутта 2-го порядка

, после чего
,
, … вычисляют по формуле (2.21)

– Явная экстраполяционная схема Адамса 3-го порядка

(2.22)

Схема двухшаговая, поэтому необходимо сперва найти

и
по схеме предиктор-корректор 4-го порядка, после чего
,
, … вычисляют по формуле (2.22).

3. Описание используемого метода

Для решения системы дифференциальных уравнений выбрана неявная схема Адамса 3-го порядка, как одна из наиболее точных конечноразностных схем для решения задачи Коши. Чтобы прийти к неявной схеме Адамса, заменим подинтегральное выражение в уравнении:

(3.1)

интерполяционным многочленом Ньютона 2-го порядка, вида:

(3.2)

После интегрирования полученного выражения на интервале

, приходим к уравнению неявной схемы Адамса 3-го порядка:

. (3.3)

Данная схема не разрешена явно относительно

, поэтому сначала необходимо вычислить
любым подходящим методом, например методом Рунге-Кутта четвёртого порядка. Затем для нахождения
требуется использовать метод простой итерации:

, (3.4)

где s=1,2,3,… – номер итерации. Условие выхода из цикла итерационной процедуры:

, (3.5)

где ε – заданная погрешность.

Начальное приближение задаётся формулой для явной экстраполяционной схемы Адамса 2-го порядка:

. (3.6)

Схема устойчива, сходится быстро. Чаще всего достаточно одной итерации. Порядок погрешности ε(h) неявной схемы Адамса третьего порядка равен четырём.


4. Описание блок-схемы алгоритма

При разработке программы были построены блок-схемы алгоритма программы, упрощающие процесс проектирования и облегчающие понимание исходного кода готовой программы (см. Приложение 1).

Блок-схема алгоритма условно разбита на 11 блоков.

Главная функция программы (блоки 1,2,5) отвечает за обработку события создания формы, взаимодействие со стандартным компонентом TСhart, а также за реализацию решения системы дифференциальных уравнений неявной схемой Адамса 3-го порядка. Блок-схема алгоритма решения задачи Коши разбита условно на 35 блоков:

1-й блок отвечает за ручной ввод интервала [a,b], на котором ищется решение системы; количества шагов сетки nx; шаг вывода результатов на экран np; строк u1 и v1, соответствующих уравнениям системы; значения искомых функций в начале заданного интервала; допустимая погрешность e.

Во втором блоке происходит вычисление шага h и установка текущего узла на x=a. Блок 3 – функция преобразования исходных записей уравнений системы в равносильные им строки с постфиксной формой записью математических операций (см. далее «алгоритм обратной польской записи»). В качестве аргументов функции выступают введённые ранее строки u1 и v1.

Блоки 4-15 – расчет первых 2-х точек заданной сетки методом Рунге-Кутта 4-го порядка. В данных блоках и далее используется пользовательская функция FPR, рассчитывающая значения вводимых пользователем уравнений в узлах заданной сетки. В качестве аргументов функции выступают: уже преобразованные в обратную польскую запись строки, задающие уравнения системы; текущее значение x; значения искомых функций на предыдущем шаге (условно обозначаем

).

В блоках 16-34 в цикле (16) рассчитываются значения искомых решений в узлах 2-nx заданной сетки неявной схемой Адамса 3-го порядка. Цикл 21-29 осуществляет итерационную процедуру неявной схемы. Условие выхода из этого цикла – выполнение неравенства de<e, где de – наибольший из модулей

, e – заданная точность. Поскольку на экран выводятся значения искомых функций не во всех узлах, а только в узлах с номером, кратным шагу вывода nx, вводимым с клавиатуры, то блоки 33-34 осуществляют выбор этих узлов.

Преобразование в обратную польскую запись происходит по следующим правилам:

Рассматриваем поочередно каждый символ:

1. Если этот символ - число (или переменная), то просто помещаем его в выходную строку.

2. Если символ - знак операции (+, -, *, / ,^), то проверяем приоритет данной операции. Операция возведения в степень имеет наивысший приоритет (равен 4). Операции сложения и вычитания имеют меньший приоритет (равен 2). Наименьший приоритет (равен 1) имеет открывающая скобка.

Получив один из этих символов, мы должны проверить стек:

а) Если стек все еще пуст, или находящиеся в нем символы (а находится в нем могут только знаки операций и открывающая скобка) имеют меньший приоритет, чем приоритет текущего символа, то помещаем текущий символ в стек.

б) Если символ, находящийся на вершине стека имеет приоритет, больший или равный приоритету текущего символа, то извлекаем символы из стека в выходную строку до тех пор, пока выполняется это условие; затем переходим к пункту а).

3. Если текущий символ - открывающая скобка, то помещаем ее в стек.

4. Если текущий символ - закрывающая скобка, то извлекаем символы из стека в выходную строку до тех пор, пока не встретим в стеке открывающую скобку (т.е. символ с приоритетом, равным 1), которую следует просто уничтожить. Закрывающая скобка также уничтожается.