11 численные методы решения дифференциальных уравнений явный метод эйлера

11 численные методы решения дифференциальных уравнений явный метод эйлера

Nickolay.info. Обучение. Лекции по численным методам. Численное решение обыкновенных дифференциальных уравнений

5. Численное решение обыкновенных дифференциальных уравнений

Многие задачи науки и техники сводятся к решению обыкновенных дифференциальных уравнений (ОДУ). ОДУ называются такие уравнения, которые содержат одну или несколько производных от искомой функции. В общем виде ОДУ можно записать следующим образом:

, где x – независимая переменная, — i-ая производная от искомой функции. n — порядок уравнения. Общее решение ОДУ n–го порядка содержит n произвольных постоянных , т.е. общее решение имеет вид .

Для выделения единственного решения необходимо задать n дополнительных условий. В зависимости от способа задания дополнительных условий существуют два различных типа задач: задача Коши и краевая задача. Если дополнительные условия задаются в одной точке, то такая задача называется задачей Коши. Дополнительные условия в задаче Коши называются начальными условиями. Если же дополнительные условия задаются в более чем одной точке, т.е. при различных значениях независимой переменной, то такая задача называется краевой. Сами дополнительные условия называются краевыми или граничными.

Ясно, что при n=1 можно говорить только о задачи Коши.

Примеры постановки задачи Коши:

Примеры краевых задач:

Решить такие задачи аналитически удается лишь для некоторых специальных типов уравнений.

Численные методы решения задачи Коши для ОДУ первого порядка

Постановка задачи. Найти решение ОДУ первого порядка

на отрезке при условии

При нахождении приближенного решения будем считать, что вычисления проводятся с расчетным шагом , расчетными узлами служат точки промежутка [x0, xn].

Целью является построение таблицы

т.е. ищутся приближенные значения y в узлах сетки.

Интегрируя уравнение на отрезке , получим

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

,

то получим явную формулу Эйлера:

, .

Зная , находим , затем т.д.

Геометрическая интерпретация метода Эйлера:

Пользуясь тем, что в точке x0 известно решение y(x0) = y0 и значение его производной , можно записать уравнение касательной к графику искомой функции в точке : . При достаточно малом шаге h ордината этой касательной, полученная подстановкой в правую часть значения , должна мало отличаться от ординаты y(x1) решения y(x) задачи Коши. Следовательно, точка пересечения касательной с прямой x = x1 может быть приближенно принята за новую начальную точку. Через эту точку снова проведем прямую , которая приближенно отражает поведение касательной к в точке . Подставляя сюда (т.е. пересечение с прямой x = x2), получим приближенное значение y(x) в точке x2: и т.д. В итоге для i–й точки получим формулу Эйлера.

Явный метод Эйлера имеет первый порядок точности или аппроксимации.

Если использовать формулу правых прямоугольников: , то придем к методу

, .

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

Неявный метод Эйлера имеет первый порядок точности или аппроксимации.

Модифицированный метод Эйлера: в данном методе вычисление состоит из двух этапов:

Данная схема называется еще методом предиктор – корректор (предсказывающее – исправляющее). На первом этапе приближенное значение предсказывается с невысокой точностью (h), а на втором этапе это предсказание исправляется, так что результирующее значение имеет второй порядок точности.

Методы Рунге – Кутта: идея построения явных методов Рунге–Кутты p–го порядка заключается в получении приближений к значениям y(xi+1) по формуле вида

,

.

Здесь an, bnj, pn, – некоторые фиксированные числа (параметры).

При построения методов Рунге–Кутты параметры функции (an, bnj, pn) подбирают таким образом, чтобы получить нужный порядок аппроксимации.

Схема Рунге – Кутта четвертого порядка точности:

Пример. Решить задачу Коши:

.

Рассмотреть три метода: явный метод Эйлера, модифицированный метод Эйлера, метод Рунге – Кутта.

Точное решение:

Расчетные формулы по явному методу Эйлера для данного примера:

Расчетные формулы модифицированного метода Эйлера:

РЕШЕНИЕ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

При решении научных и инженерно-технических задач часто бывает необходимо математически описать какую-либо динамическую систему. Лучше всего это делать в виде дифференциальных уравнений (ДУ) или системы дифференциальных уравнений. Наиболее часто они такая задача возникает при решении проблем, связанных с моделированием кинетики химических реакций и различных явлений переноса (тепла, массы, импульса) – теплообмена, перемешивания, сушки, адсорбции, при описании движения макро- и микрочастиц.

Обыкновенным дифференциальным уравнением (ОДУ) n-го порядка называется следующее уравнение, которое содержит одну или несколько производных от искомой функции y(x):

, здесь y (n) обозначает производную порядка n некоторой функции y(x), x – это независимая переменная.

В ряде случаев дифференциальное уравнение можно преобразовать к виду, в котором старшая производная выражена в явном виде. Такая форма записи называется уравнением, разрешенным относительно старшей производной (при этом в правой части уравнения старшая производная отсутствует):

(6.1)

Именно такая форма записи принята в качестве стандартной при рассмотрении численных методов решения ОДУ.

Линейным дифференциальным уравнением называется уравнение, линейное относительно функции y(x) и всех ее производных.

Например, ниже приведены линейные ОДУ первого и второго порядков

Решением обыкновенного дифференциального уравнения называется такая функция y(x), которая при любых х удовлетворяет этому уравнению в определенном конечном или бесконечном интервале. Процесс решения дифференциального уравнения называют интегрированием дифференциального уравнения.

Общее решение ОДУ n -го порядка содержит n произвольных констант C1 , C2 , …, Cn

Это очевидно следует из того, что неопределенный интеграл равен первообразной подынтегрального выражения плюс константа интегрирования

Так как для решения ДУ n -го порядка необходимо провести n интегрирований, то в общем решении появляется n констант интегрирования.

Частное решение ОДУ получается из общего, если константам интегрирования придать некоторые значения, определив некоторые дополнительные условия, количество которых позволяет вычислить все неопределенные константы интегрирования.

Точное (аналитическое) решение (общее или частное) дифференциального уравнения подразумевает получение искомого решения (функции y(x)) в виде выражения от элементарных функций. Это возможно далеко не всегда даже для уравнений первого порядка.

Численное решение ДУ (частное) заключается в вычислении функции y(x) и ее производных в некоторых заданных точках , лежащих на определенном отрезке. То есть, фактически, решение ДУ n -го порядка вида получается в виде следующей таблицы чисел (столбец значений старшей производной вычисляется подстановкой значений в уравнение):

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

Множество значений абсцисс в которых определяется значение функции, называют сеткой, на которой определена функция y(x) . Сами координаты при этом называют узлами сетки. Чаще всего, для удобства, используются равномерные сетки, в которых разница между соседними узлами постоянна и называется шагом сетки или шагом интегрирования дифференциального уравнения

или , i = 1, …, N

Для определения частного решения необходимо задать дополнительные условия, которые позволят вычислить константы интегрирования. Причем таких условий должно быть ровно n . Для уравнений первого порядка – одно, для второго — 2 и т.д. В зависимости от способа их задания при решении дифференциальных уравнений существуют три типа задач:

· Задача Коши (начальная задача): Необходимо найти такое частное решение дифференциального уравнения, которое удовлетворяет определенным начальными условиям, заданным в одной точке:

то есть, задано определенное значение независимой переменной (х0) , и значение функции и всех ее производных вплоть до порядка (n-1) в этой точке. Эта точка (х0) называется начальной. Например, если решается ДУ 1-го порядка, то начальные условия выражаются в виде пары чисел (x0, y0)

Такого рода задача встречается при решении ОДУ, которые описывают, например, кинетику химических реакций. В этом случае известны концентрации веществ в начальный момент времени (t = 0) , и необходимо найти концентрации веществ через некоторый промежуток времени (t) . В качестве примера можно так же привести задачу о теплопереносе или массопереносе (диффузии), уравнение движения материальной точки под действием сил и т.д.

· Краевая задача. В этом случае известны значения функции и (или) ее производных в более чем одной точке, например, в начальный и конечный момент времени, и необходимо найти частное решение дифференциального уравнения между этими точками. Сами дополнительные условия в этом случае называются краевыми (граничными) условиями. Естественно, что краевая задача может решаться для ОДУ не ниже 2-го порядка. Ниже приведен пример ОДУ второго порядка с граничными условиями (заданы значения функции в двух различных точках):

· Задача Штурма-Лиувиля (задача на собственные значения). Задачи этого типа похожи на краевую задачу. При их решении необходимо найти, при каких значениях какого-либо параметра решение ДУ удовлетворяет краевым условиям (собственные значения) и функции, которые являются решением ДУ при каждом значении параметра (собственные функции). Например, многие задачи квантовой механики являются задачами на собственные значения.

Численные методы решения задачи Коши ОДУ первого порядка

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

(6.2)

Необходимо найти значения функции y в заданных точках сетки , если известны начальные значения , где есть значение функции y(x) в начальной точке x0.

Преобразуем уравнение умножением на d x

И проинтегрируем левую и правую части между i -ым и i+ 1-ым узлами сетки.

(6.3)

Мы получили выражение для построения решения в i+1 узле интегрирования через значения x и y в i -ом узле сетки. Сложность, однако, заключается в том, что интеграл в правой части есть интеграл от неявно заданной функции, нахождение которого в аналитическом виде в общем случае невозможно. Численные методы решения ОДУ различным способом аппроксимируют (приближают) значение этого интеграла для построения формул численного интегрирования ОДУ.

Из множества разработанных для решения ОДУ первого порядка методов рассмотрим методы Эйлера, Рунге-Кутта и прогноза и коррекции. Они достаточно просты и дают начальное представление о подходах к решению данной задачи в рамках численного решения задачи Коши.

Исторически первым и наиболее простым способом численного решения задачи Коши для ОДУ первого порядка является метод Эйлера. В его основе лежит аппроксимация производной отношением конечных приращений зависимой (y) и независимой (x ) переменных между узлами равномерной сетки:

где yi+1 это искомое значение функции в точке xi+1 .

Если теперь преобразовать это уравнение, и учесть равномерность сетки интегрирования, то получится итерационная формула, по которой можно вычислить yi+1 , если известно yi в точке хi :

(6.4)

Сравнивая формулу Эйлера с общим выражением, полученным ранее, видно, что для приближенного вычисления интеграла в (6.3) в методе Эйлера используется простейшая формула интегрирования — формула прямоугольников по левому краю отрезка.

Графическая интерпретация метода Эйлера также не представляет затруднений (см. рисунок ниже). Действительно, исходя из вида решаемого уравнения (6.2) следует, что значение есть значение производной функции y(x) в точке x=xi, и, таким образом, равно тангенсу угла наклона каcательной, проведенной к графику функции y(x) в точке x=xi .

Из прямоугольного треугольника на рисунке можно найти

,

откуда и получается формула Эйлера. Таким образом, суть метода Эйлера заключается в замене функции y(x) на отрезке интегрирования прямой линией, касательной к графику в точке x=xi . Если искомая функция сильно отличается от линейной на отрезке интегрирования, то погрешность вычисления будет значительной. Ошибка метода Эйлера прямо пропорциональна шагу интегрирования:

Процесс вычислений строится следующим образом. При заданных начальных условиях x0 и y0 можно вычислить

Таким образом, строится таблица значений функции y(x) с определенным шагом (h) по x на отрезке [x0, xN]. Ошибка в определении значения y(xi) при этом будет тем меньше, чем меньше выбрана длина шага h (что определяется точностью формулы интегрирования).

При больших h метод Эйлера весьма неточен. Он дает все более точное приближение при уменьшении шага интегрирования. Если отрезок [xi, xi+1] слишком велик, то каждый участок [xi, xi+1] разбивается на N отрезков интегрирования и к каждому их них применяется формула Эйлера с шагом , то есть шаг интегрирования h берется меньше шага сетки, на которой определяется решение.

Используя метод Эйлера, построить приближенное решение для следующей задачи Коши:

На сетке с шагом 0,1 в интервале [0, 1] (6.5)

Данное уравнение уже записано в стандартном виде, резрешенном относительно производной искомой функции.

Поэтому, для решаемого уравнения имеем

Примем шаг интегрирования равным шагу сетки h = 0,1. При этом для каждого узла сетки будет вычислено только одно значение ( N=1 ). Для первых четырех узлов сетки вычисления будут следующими:

Полные результаты (с точностью до пятого знака после запятой) приведены в таблице 1 в третьей колонке — h =0,1 ( N =1). Во второй колонке таблицы для сравнения приведены значения, вычисленные по аналитическому решению данного уравнения .

Во второй части таблицы приведена относительная погрешность полученных решений. Видно, что при h =0,1 погрешность весьма велика, достигая 100% для первого узла x =0,1.

Таблица 1 Решение уравнения (6.5) методом Эйлера (для колонок указан шаг интегрирования и число отрезков интегрирования N между узлами сетки)

Относительные погрешности вычисленных значений функции при различных h

xТочное
решение
0,10,050,0250,006250,00156250,00078130,0001953
1241664128512
00,0000000,0000000,0000000,0000000,0000000,0000000,0000000,000000
0,10,0048370,0000000,0025000,0036880,0045540,0047670,0048020,004829
0,20,0187310,0100000,0145060,0166520,0182170,0186030,0186670,018715
0,30,0408180,0290000,0350920,0379980,0401210,0406440,0407310,040797
0,40,0703200,0561000,0634200,0669200,0694790,0701100,0702150,070294
0,50,1065310,0904900,0987370,1026880,1055800,1062940,1064120,106501
0,60,1488120,1314410,1403600,1446420,1477790,1485540,1486830,148779
0,70,1965850,1782970,1876750,1921860,1954960,1963140,1964490,196551
0,80,2493290,2304670,2401270,2447830,2482020,2490480,2491880,249294
0,90,3065700,2874200,2972140,3019450,3054230,3062840,3064270,306534
10,3678790,3486780,3584860,3632320,3667270,3675920,3677360,367844
xh0,10,050,0250,006250,00156250,00078130,0001953
N1241664128512
0,1100,00%48,32%23,76%5,87%1,46%0,73%0,18%
0,246,61%22,55%11,10%2,74%0,68%0,34%0,09%
0,328,95%14,03%6,91%1,71%0,43%0,21%0,05%
0,420,22%9,81%4,83%1,20%0,30%0,15%0,04%
0,515,06%7,32%3,61%0,89%0,22%0,11%0,03%
0,611,67%5,68%2,80%0,69%0,17%0,09%0,02%
0,79,30%4,53%2,24%0,55%0,14%0,07%0,02%
0,87,57%3,69%1,82%0,45%0,11%0,06%0,01%
0,96,25%3,05%1,51%0,37%0,09%0,05%0,01%
15,22%2,55%1,26%0,31%0,08%0,04%0,01%

Уменьшим шаг интегрирования вдвое, h = 0.05, в этом случае для каждого узла сетки вычисление будет проводиться за два шага ( N =2). Так, для первого узла x =0,1 получим:

И так далее, до конца отрезка.

Из таблицы 1 (четвертая колонка, N =2) видно, что погрешность решения резко снизилась, примерно вдвое, хотя и осталась по-прежнему, значительной.

При шаге интегрирования h =0,025 для каждого узла сетки необходимо выполнить 4 вычисления по формуле Эйлера в промежуточных точках ( N =4).

(Для других узлов значения приведены в таблице 1, колонка N =4)

В таблице 1 приведены для сравнения вычисления для некоторых других значений N , вплоть до 512. Видно, что точность решения возрастает весьма медленно при уменьшении шага интегрирования, необходимо брать очень маленький шаг для достижения приемлемой точности (и, следовательно, много раз вычислять значение F(x,y)) . Поэтому метод Эйлера практически не используется в вычислительной практике.

Усовершенствованный метод Эйлера. Метод Гюна.

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

(6.6)

Данная формула оказывается неявной относительно yi+1 (это значение есть и в левой и в правой части выражения), то есть является уравением относительно yi+1 , решать которое можно, например, численно, применяя какой-либо итерационный метод (в таком виде его можно рассматривать как итерационную формула метода простой итерации). Однако, можно поступить иначи и приблизительно вычислить значение функции в узле i+1 с помощью обычной формулы Эйлера:

,

которое затем использовать при вычислении по (6.6).

Таким образом получается метод Гюна или метод Эйлера с пересчетом. Для каждого узла интегрирования производится следующая цепочка вычислений

(6.7)

Благодаря более точной формуле интегрирования, погрешность метода Гюна пропорциональна уже квадрату шага интегрирования.

Подход, использованный в методе Гюна, используется для построения так называемых методов прогноза и коррекции, которые будут рассмотрены позже.

Проведем вычисления для уравения (6.5) с помощью метода Гюна.

При шаге интегрирования h =0,1 в первом узле сетки x1 получим:

Что намного точнее значения, полученного методом Эйлера при том же шаге интегрирования. В таблице 2 ниже приведены сравнительные результаты вычислений при h = 0,1 методов Эйлера и Гюна.

Таблица 2 Решение уравнения методами Эйлера и Гюна

xТочноеМетод ГюнаМетод Эйлера
yотн. погрешностьyотн. погрешность
00,0000000,000000,00000
0,10,0048370,005003,36%0,00000100,00%
0,20,0187310,019031,57%0,0100046,61%
0,30,0408180,041220,98%0,0290028,95%
0,40,0703200,070800,69%0,0561020,22%
0,50,1065310,107080,51%0,0904915,06%
0,60,1488120,149400,40%0,1314411,67%
0,70,1965850,197210,32%0,178309,30%
0,80,2493290,249980,26%0,230477,57%
0,90,3065700,307230,21%0,287426,25%
10,3678790,368540,18%0,348685,22%

Отметим существенное увеличение точности вычислений метода Гюна по сравнению с методом Эйлера. Так, для узла x =0,1 относительное отклонение значения функции, определенного методом Гюна, оказывается в 30 (!) раз меньше. Такая же точность вычислений по формуле Эйлера достигается при числе отрезков интегрирования N примерно 30. Следовательно, при использовании метода Гюна при одинаковой точности вычислений понадобится примерно в 15 раз меньше времени ЭВМ, чем при использовании метода Эйлера.

Проверка устойчивости решения

Решение ОДУ в некоторой точке xi называется устойчивым, если найденное в этой точке значение функции yi мало изменяется при уменьшении шага интегрирования. Для проверки устойчивости, таким образом, надо провести два расчета значения (yi) – с шагом интегрирования h и при уменьшенной (например, двое) величине шага

В качестве критерия устойчивости можно использовать малость относительного изменения полученного решения при уменьшении шага интегрирования ( ε – наперед заданная малая величина)

Такая проверка может осуществляться и для всех решений на всем интервале значений x. Если условие не выполняется, то шаг снова делится пополам и находится новое решение и т.д. до получения устойчивого решения.

Дальнейшее улучшение точности решения ОДУ первого порядка возможно за счет увеличения точности приближенного вычисления интеграла в выражении (6.3).

Мы уже видели, какое преимущество дает переход от интегрирования по формуле прямоугольников (метод Эйлера) к использованию формулы трапеций (метод Гюна) при аппроксимации этого интеграла.

Воспользовавшись хорошо зарекомендовавшей себя формулой Симпсона, можно получить еще более точную формулу для решения задачи Коши для ОДУ первого порядка — широко используемого в вычислительной практике метода Рунге-Кутты.

В формуле Симпсона для приближенного вычисления определенного интеграла используются значения подинтегрального выражения в трех точках. В интеграле их всего две, поэтому введем дополнительную точку в середине отрезка [ xi+1 xi ]

тогда можно переписать так:

Полученное выражение является неявным, так как в правой части содержатся еще не определенные значения функции yi+h/2 и yi+1 . Чтобы воспользоваться этой формулой, надо использовать некоторое приближение для вычисления этих значений

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

Алгоритм Рунге-Кутты третьего порядка — РК3 (погрешность порядка h 3 ):

(6.8)

Алгоритм Рунге-Кутты четвертого порядка- РК4 (погрешность порядка h 4 ):

(6.9)

Алгоритмы третьего и четвертого порядков требуют на каждом шаге трех и четырех вычислений функции соответственно, но являются весьма точными.

Используя алгоритм Рунге-Кутты третьего (6.8) и четвертого (6.9) порядков решить задачу (6.5) с шагом h =0.1:

Для алгоритма третьего порядка (для узла x =0.1) вычисления таковы:

Для алгоритма четвертого порядка (для узла x =0.1) вычисления таковы:

Приведем таблицу решения с шагом интегрирования h =0,1 методов Рунге-Кутты 3-го (РК3) и четвертого (РК4) порядков на интегрвале [0,1] и их относительные отклонения от точного решения.

xРК3РК4
yотн.погр.yотн.погр.
000
0,10,004833330,08444%0,00483750,00169%
0,20,018723360,03946%0,01873090,00079%
0,30,040808190,02458%0,040818420,00049%
0,40,070307940,01721%0,070320290,00035%
0,50,106516970,01285%0,106530930,00026%
0,60,148796770,00999%0,148811930,00020%
0,70,196569610,00798%0,196585620,00016%
0,80,249312740,00651%0,249329290,00013%
0,90,306553140,00539%0,306569990,00011%
10,367862830,00451%0,367879770,00009%

Как видно, точность решения, полученного методом Рунге-Кутты четвертого порядка, намного превышает точность решения, полученного методом Гюна и методом Рунге-Кутты 3-го порядка (сравнте с данными Таблицы 2). При шаге h = 0,1 он позволил точно определить четыре значащие цифры решения, тогда как для достижения такой точности с помощью метода Эйлера необходимо взять h = 0,0001, что требует более тысячи (. ) вычислений функции F(x,y ). При шаге h = 0,05 точность решения в этом узле достигает шести значащих цифр.

Высокая точность, вместе с достаточной простотой реализации делает метод Рунге-Кутты четвертого порядка одним из весьма распространенных численных методов решения задачи Коши ОДУ и систем ОДУ первого порядка.

Рассмотренные ранее методы (Эйлера, Гюна, Рунге-Кутты) используют значение функции на одном предшествующем шаге, поэтому они относятся к так называемым одношаговым методам. Точность вычислений можно увеличить, если использовать при нахождении решения в некотором узле xi информацию о значениях функции, полученных в нескольких ( k ) предыдущих узлах сетки интегрирования (xi-1, xi-2 … xi-k ).

Если используются значения в k предыдущих узлах, то говорят о k-шаговом методе интегрирования уравнения. Одним из способов построения многошаговых методов заключается в следующем. По значениям функции, вычисленным в k предшествующих узлах, строится интерполяционный полином степени (k-1) — , который используется при интегрировании дифференциального уравнения по выражению (6.3). Интеграл при этом выражается через квадратурную формулу:

,

где λl – квадратурные коэффициенты.

Очевидно, что при k =1 в качестве частного случая получается уже известная нам формула Эйлера. Значения квадратурных коэффициентов для k от 2 до 4 приведены в таблице.

kλl
23/2-1/2
323/12-16/125/12
455/24-59/2437/24-9/24

Полученное таким образом семейство формул называется явной k -шаговой схемой Адамса (методы Адамса-Башфорта).

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

Если для построения интерполяционного полинома использовать k узлов, начиная с xi+1, то можно получить формулы интегрирования ОДУ, известные как неявные схемы Адамса (или методы Адамса-Моултона). Неявными эти формулы называются потому, что значение искомой функции в (i+1)-м узле — yi+1 — оказывается одновременно и в левой и правой частях равенства.

Квадратурные коэффициенты для неявных методов Адамса приведены в таблице ниже.

kλl
21/21/2
35/128/12-1/12
49/2419/24-5/241/24

Например, четырехшаговая неявная формула Адамса-Моултона имеет вид:

Видно, что это выражение является уравнением относительно yi+1, так как yi+1 встречается и в левой и правой его части. Однако обычно это уравнение не решается, а значение в правой части заменяется на рассчитанное по какой-либо явной формуле — например, формуле Адамса-Башфорта. Такой подход лежит в основе методов «прогноза-коррекции».

Достоинством многошаговых методов Адамса при решении ОДУ заключается в том, что в каждом узле рассчитывается только одно значение правой части ОДУ — функции F(x,y ). К недостаткам можно отнести невозможность старта многошагового метода из единственной начальной точки, так как для вычислений по k -шаговой формуле необходимо знание значения функции в k узлах. Поэтому приходится (k-1) решение в первых узлах x1, x2, …, xk-1 получать с помощью какого-либо одношагового метода, например метода Рунге-Кутты 4–го порядка.

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

Методы прогноза и коррекции

Несколько иной подход используется в многошаговых методах прогноза и коррекции. В качестве иллюстрирующего примера рассмотрим 2-х шаговый метод прогноза и коррекции.
Пусть дано ДУ для которого известно значение функции в двух соседних узлах сетки:

Сначала строится прогноз значения в (i+1) -ом узле интегрирования по какой-либо грубой формуле (при k =2 это метод Эйлера) по предудущему узлу.

Затем это значение корректируется по более точной формуле, в данном случае – по формуле трапеций (неявная формула Адамса второго порядка)

В качестве решения в узле xi+1 берется

где Ec — ошибка коррекции

Для того чтобы начать расчет методом прогноза и коррекции, необходимо знать значения функции в двух первых узлах сетки — x0 и x1. Обычно значение в узле x1 определяется каким-либо одношаговым методом (методом Рунге-Кутты или Гюна).

На каждом шаге построения решения методом прогноза и коррекции требуется вычислить всего одно значение функции, а одно берется из предыдущего узла сетки. Поэтому он весьма экономичен по затратам времени вычислений при достаточной точности.

Погрешность описываемого метода пропорциональна h 3 (d

Аналогичные схемы прогноза-коррекции могут быть получены сочетанием явных (прогноз) и неявных (коррекция) формул Адамса для различных k. Так, например, широко применяется четырехшаговый метод прогноза-коррекции, в котором в качестве прогноза используется 4-х шаговая формула Адамса-Башфорта, а для коррекции — 4-х шаговая формула Адамса-Моултона. Погрешность такого метода пропорциональна

С использованием алгоритма прогноза и коррекции второго порядка решить ДУ в точке x2 = 0,2 при h = 0,1 со следующими начальными значениями:

При h = 0,1 получаем

Аналитическое решение уравнения (с точностью до 9 знака после запятой) дает значение
y (0,2) =0,018730753. Относительная погрешность составляет 0,049%.

Решение задачи Коши для систем дифференциальных уравнений 1-го порядка

Системой M дифференциальных уравнений первого порядка в общем случае можно назвать следующую совокупность Обыкновенных дифференциальных уравнений:

,

Где есть некоторые функции независимой переменной х , причем правые части уравнений не зависят от производных yi(x) , то есть все уравнения разрешены относительно производных функций.

Начальными условиями при решения задачи Коши для такой системы будут являться значение независимой переменной и значения всех M функций при этом значении:

Все описанные ранее методы решения задачи Коши для уравнений легко обобщаются на случай решения систем ДУ первого порядка. Формулы выбранного метода применяются последовательно к каждому уравнению системы уравнений для определения значения соответствующей функции. Из первого уравнения определяется значение y 1 i , из второго – y 2 i , …, из M -го — yMi .

В качестве примера рассмотрим применение метода Рунге-Кутты 4-го порядка для решения системы двух ОДУ первого порядка.

Адаптируем формулу Рунге-Кутты 4-го порядка для данной системы уравнений. Из первого уравнения будем вычислять значения функции u(x), а из второго – функции v(x) (это функции, чьи производные стоят в левой части соотетствующих уравнений):

Аналогично для второго:

С учетом вышесказанного, для расчета коэффициентов ku0ku3 используем правую часть первого уравнения ( F 1), а для коэффициентов kv0kv3 — второго ( F2). Кроме этого, для расчета приращения функции u используем коэффициенты ku, а для расчета приращения функции v — kv. Таким образом, коэффициенты рассчитываются по следующим формулам:

Модель «хищник-жертва»

Примером задачи, сводимой к системе нелинейных дифференциальных уравнений 1-го порядка, является задача «хищник — жертва» (модель Лóтки-Вольтéрры). Данная модель довольно широко применяется при описании временной зависимости объема популяций в биологических системах, при моделировании экономических и физических процессов.
Задача формулируется следующим образом. Пусть в системе в некоторый момент времени t имеются хищники (например, волки) в количестве v ( t ) и жертвы (например, зайцы) в количестве u ( t ). Модель «хищник — жертва» утверждает, что u ( t ) и v ( t ) удовлетворяют системе ОДУ первого порядка:

Где A , B , C и D – некоторые числовые константы.
Действительно, если зайцы имеют достаточно травы для питания, то скорость роста популяции будет прямо пропорциональна их числу (первое слагаемое в первом уравнении). Второе слагаемое описывает гибель зайцев при встрече с хищниками, так как вероятность их встречи равна произведению . Второе уравнение описывает изменение популяции хищников. Скорости роста популяции способствует их хорошее питание (первое слагаемое второго уравнения пропорционально вероятности встречи хищника и жертвы — ), а избыток хищников приводит к их гибели за счет голода (второе слагаемое).

Применим метод Рунге-Кутты 4-го порядка для решения полученной системы уравнений. Сравнивая решаемую систему и систему, записанную в стандартной форме, заметим, что:

Значения функций u и v находятся по уже известным формулам:

Решение задачи Коши для дифференциальных уравнений второго и более высоких порядков

Задачу Коши для ОДУ второго порядка

,

можно свести к решению системы двух ДУ первого порядка, если ввести некоторую функцию

тогда и система примет вид

при начальных условиях

Аналогично, ОДУ порядка n сведется к системе из n дифференциальных уравнений первого порядка.

Движение тела под действием пружины
Рассмотрим некоторое материальное тело массой m , которое движется по горизонтальной поверхности (в общем случае – с трением) под действием пружины.

Сила упругого сжатия (растяжения) пружины описывается законом Гука и пропорциональна смещению тела от положения равновесия пружины ( x = 0):

k – коэффициент жесткости пружины.
Сила трения направлена всегда против движения тела и пропорциональна его скорости:

с – коэффициент трения.
Баланс сил, действующих на тело в каждый момент времени можно записать так:

С учетом того, что координата тела есть функция от времени, а скорость и ускорение – это первая и вторая производная координаты во времени, соответственно, получим:

Таким образом, изменение координаты тела от времени описывается ОДУ 2-го порядка, которое в стандартном виде записывается так:

Начальными условиями в данной задачи являются значения координаты тела и его скорости в начальный момент времени (t = 0):

Как было показано, ОДУ 2-го порядка сводится к системе двух уравнений 1-го порядка подстановкой:

Окончательно система ОДУ принимает вид:

с начальными условиями

Применим метод Рунге-Кутты 4-го порядка для решения полученной системы уравнений. Правые части уравненией имеют вид:

Из первого уравнения рассчитываем значения функции x ( t ), из второго – v ( t ).

Теперь запишем соответствующие выражения для расчета коэффициентов k x0 – k x3 и k v0 — k v3.

Решение других проблем, связанных с дифференциальными уравнениями – задачи с граничными условиями и задачи на собственные значения и функции в данном курсе не рассматриваются.

Химические задачи, сводящиеся к решению ДУ

Кинетика химических реакций

для которой k1 и k2 k3 — константы скорости реакций:

Решение системы из четырех ДУ зависит от начальных значений концентраций веществ

и от констант скоростей реакций k1, k2 и k3 .

Моделирование динамических систем: численные методы решения ОДУ

Очень кратко рассмотрев основы механики в предыдущей статье, перейдем к практике, ибо даже той краткой теории что была рассмотрена хватит с головой.

Камень бросают вертикально, без начальной скорости с высоты h = 100 м. Пренебрегая сопротивлением воздуха, определить закон движения камня, как функцию высоты камня над поверхностью Земли от времени. Ускорение свободного падения принять равным 10 м/с 2

1. Формализация задачи

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

Для этой задачи применимо допущение, согласно которому камень можно считать материальной точкой. К этой точке приложена одна единственная сила — сила тяжести, так мы используем допущение об отсутствии сопротивления воздуха.

Следующим допущением будет полагать что Земля плоская, так как высота, с которой мы бросаем камень пренебрежимо мала в сравнении с размерами планеты, а значит кривизной её поверхности можно пренебречь. Тогда сила тяжести может считаться постоянной, направленной перпендикулярно поверхности Земли и равной по модулю

где g — ускорение свободного падения у поверхности Земли. Теперь пришло время составить уравнения движения камня. Помните эти уравнения

Левая их часть нас пока не интересует, а вот в правой стоят суммы проекций сил, приложенных к точке на оси координат. Пусть оси x и y располагаются на поверхности, а ось z направлена вверх перпендикулярно ей. Сила одна единственная, её проекции на оси x и y равны нулю, а на ось z проекция отрицательна, так как сила направлена против направления оси, то есть

Масса камня, очевидно не равна нулю, значит можно спокойно поделить обе части получившихся уравнений на неё

Не буду занудствовать, доказывая что движение камня будет происходить строго вертикально, хотя это нужно сделать с формальной точки зрения. Ноль в правой части первых двух уравнений совершенно не означает невозможность движения вдоль этих осей — вспоминаем первый закон Ньютона. На этом я остановлюсь в следующей статье более подробно, а пока справедливо положим одномерность движения, выписав окончательное дифференциальное уравнение

То что у нас получилось не много не мало — математическая модель процесса происходящего в задаче. Пафосно, да?

Нет. Анализируя это уравнение мы делаем вывод, например, что масса камня не оказывает влияния на закон его движения, ведь массы в этом уравнении нет. Видите, даже не решив уравнения, мы уже формально доказали справедливость опыта с пером и кусочком свинца в вакууме, который любят показывать в школе (а некоторые повторили его на Луне).

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

А вот как решить это численно? И что это вообще такое — «численно»?

2. Численное интегрирование дифференциального уравнения первого порядка

Какой такой первый порядок? Я же говорил в прошлый раз, что уравнения движения имеют второй порядок. Всё правильно, но большинство методов решения диффур на компьютере умеют решать только уравнения первого порядка. Есть методы прямого интегрирования уравнений второго порядка (например метод Верле), но о них не сейчас.

Во-первых, это уравнение относится к такому типу, что допускает понижение порядка. Правая часть не зависит от неизвестной функции (там нет z), поэтому вспоминаем, что

проекция ускорения на ось z равна первой производной проекции скорости на ту же оcь z. Ну классно, тогда

вот вам и уравнение первого порядка. Не всегда этот номер проходит (не буду я сейчас про форму Коши!), но в данном случае всё в порядке. Будем искать не координату а скорость точки. Что дальше-то? А дальше

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

Что получается? А вот что

Мы получили приращение скорости. Отрицательное приращение. Как это так, камень, падая вниз будет разгонятся же! Да, будет. Его скорость, вектор его скорости, будет направлен вниз. А значит проекция этого вектора на ось z будет отрицательной. Всё правильно, мы получаем растущую по абсолютному значению проекцию вектора, направленного вниз. Мы знаем, начальное значение скорости — ноль, а значит

Пользуясь тем что мы можем вычислить приращение скорости, посчитаем, какова будет скорость скажем через 0.1 секунды

а ещё через 0.1 секунды

и ещё через 0.1 секунды

Хм, так мы можем продолжать довольно долго, но ограничимся промежутком времени в одну секунду

Время, сСкорость, м/с
0.00.0
0.1-1.0
0.2-2.0
0.3-3.0
0.4-4.0
0.5-5.0
0.6-6.0
0.7-7.0
0.8-8.0
0.9-9.0
1.0-10.0

То есть, воспользовавшись формулой

мы получили зависимость скорости точки от времени. А всего-то нужно взять значение скорости в текущий момент времени, и добавить к нему приращение, которое скорость получит в новый момент времени, отстоящий от текущего на секунд. Приращение времени называется здесь шагом интегрирования. А приращение мы вычисляем как значение производной искомой функции в текущий момент времени умноженное на шаг. Просто? Да просто конечно. И та формула, которую я написал, имеет название название — явный метод Эйлера для численного решения дифференциальных уравнений. Это так называемая рекуррентная формула, когда новое значение вычисляемой величины зависит от её предыдущего значения.

А что же с высотой точки над Землей? Да всё аналогично, смотрите

ведь проекция скорости есть производная от соответствующей координаты. Применим формулу метода Эйлера для этого уравнения, ведь скорость мы уже знаем

и по этой формуле добавим в нашу таблицу ещё одну колонку

Время, сСкорость, м/сВысота, м
0.00.0100.0
0.1-1.0100.0
0.2-2.099.9
0.3-3.099.7
0.4-4.099.4
0.5-5.099.0
0.6-6.098.5
0.7-7.097.9
0.8-8.097.2
0.9-9.096.4
1.0-10.095.5

Хм, ну, во-первых, заметно, что высота меняется у нас уже неравномерно, так как скорость со временем меняется. Теперь наша производная сама зависит от времени. Но уже на первом шаге, мы замечаем неладное — скорость уже есть, а вот высота по прежнему 100 метров. Как так?

Это вышло потому, что на каждом шаге мы полагаем производную (скорость) постоянной. Метод не дает информации о том, что происходит с решением между шагами. Соответственно накапливается погрешность, сравним полученное решение с точным

Время, сСкорость, м/сВысота, мТочное решение, м
0.00.0100.0100.00
0.1-1.0100.099.95
0.2-2.099.999.80
0.3-3.099.799.55
0.4-4.099.499.20
0.5-5.099.098.75
0.6-6.098.598.20
0.7-7.097.997.55
0.8-8.097.296.80
0.9-9.096.495.95
1.0-10.095.595.00

Да, наш камень как будто зависает в воздухе. Численное решение отстает от аналитического, и чем дальше мы считаем, тем выше погрешность счета. Погрешность накапливается, так как на каждом шаге мы берем всё более и более грубое приближение. Что делать?

Во первых, можно уменьшить шаг. Скажем в 10 раз, пусть секунды

Время, сСкорость, м/сВысота, мТочное решение, м
0.00.0100.0100.00
0.1-1.099.9699.95
0.2-2.099.8199.80
0.3-3.099.5799.55
0.4-4.099.2299.20
0.5-5.098.7898.75
0.6-6.098.2398.20
0.7-7.097.5997.55
0.8-8.096.8496.80
0.9-9.096.0095.95
1.0-10.095.0595.00

Уже лучше, погрешность в конце счета не превышает 0,05 метров, и это в 10 раз меньше предыдущего значения. Можно предположить, что уменьшив шаг ещё в 10 раз мы получим ещё более точное решение. Я схитрил, выводя значения только для 10 точек с шагом 0.1, на самом деле, чтобы получить такую таблицу нужны уже 100 итерации а не 10. При шаге 0.001 потребуется уже тысяча итераций, а результат будет таким

Время, сСкорость, м/сВысота, мТочное решение, м
0.00.0100.0100.00
0.1-1.099.950599.95
0.2-2.099.801099.80
0.3-3.099.551599.55
0.4-4.099.202099.20
0.5-5.098.752598.75
0.6-6.098.203098.20
0.7-7.097.553597.55
0.8-8.096.804096.80
0.9-9.095.954595.95
1.0-10.095.005095.00

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

Метод Эйлера самый простой из известных методов интегрирования дифференциальных уравнений. Из нашего простого примера видно, что погрешность метода прямо пропорциональна шагу интегрирования, и это действительно так. Такие методы называются методами 1-го порядка точности.

Точность расчетов даже на шаге 0.1 можно улучшить, если мы применим, скажем метод Рунге-Кутты 4-го порядка точности. Но это отдельная история.

Заключение

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

Представьте себе, какой мощный инструмент вы получаете в свои руки. Эта последняя статья, где мы не будем применять компьютер. Я обещал Octave. В следующий раз будет именно он.


источники:

http://physchem.chimfak.sfedu.ru/Source/NumMethods/ODE.html

http://habr.com/ru/post/349162/