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

Виды дифференциальных уравнений

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

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

Если какие-то термины окажутся для вас новыми, обратитесь к разделу «Определения и понятия теории дифференциальных уравнений». А тем временем перейдем к рассмотрению вопроса о видах дифференциальных уравнений.

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

Возможно, прежде чем приступить к решению дифференциальных уравнений, вам придется освежить в памяти такие темы как «Методы интегрирования» и «Неопределенные интегралы».

Начнем ознакомление с темой мы с видов обыкновенных дифференциальных уравнений 1 -го порядка. Эти уравнения могут быть разрешены относительно производной. Затем перейдем в ОДУ 2 -го и высших порядков. Также мы уделим внимание системам дифференциальных уравнений.

Напомним, что y ‘ = d x d y , если y является функцией аргумента x .

Дифференциальные уравнения первого порядка

Простейшие дифференциальные уравнения первого порядка вида y ‘ = f ( x )

Начнем с примеров таких уравнений.

y ‘ = 0 , y ‘ = x + e x — 1 , y ‘ = 2 x x 2 — 7 3

Оптимальным для решения дифференциальных уравнений f ( x ) · y ‘ = g ( x ) является метод деления обеих частей на f ( x ) . Решение относительно производной позволяет нам прийти к уравнению вида y ‘ = g ( x ) f ( x ) . Оно является эквивалентом исходного уравнения при f ( x ) ≠ 0 .

Приведем примеры подобных дифференциальных уравнений:

e x · y ‘ = 2 x + 1 , ( x + 2 ) · y ‘ = 1

Мы можем получить ряд дополнительных решений в тех случаях, когда существуют значения аргумента х , при которых функции f ( x ) и g ( x ) одновременно обращаются в 0 . В качестве дополнительного решения в уравнениях f ( x ) · y ‘ = g ( x ) при заданных значениях аргумента может выступать любая функция, определенная для заданного значения х .

Наличие дополнительных решений возможно для дифференциальных уравнений x · y ‘ = sin x , ( x 2 — x ) · y ‘ = ln ( 2 x 2 — 1 )

Ознакомиться с теоретической частью и примерами решения задач таких уравнений вы можете в разделе «Простейшие дифференциальные уравнения 1 -го порядка».

Дифференциальные уравнения с разделяющимися переменными вида f 1 ( y ) · g 1 ( x ) d y = f 2 ( y ) · g 2 ( x ) d x или f 1 ( y ) · g 1 ( x ) · y ‘ = f 2 ( y ) · g 2 ( x )

Поговорим теперь об уравнениях с разделенными переменными, которые имеют вид f ( y ) d y = g ( x ) d x . Как следует из названия, к данному виду дифференциальных уравнений относятся выражения, которые содержат переменные х и у , разделенные знаком равенства. Переменные находятся в разных частях уравнения, по обе стороны от знака равенства.

Решить уравнения с разделенными переменными можно путем интегрирования обеих его частей: ∫ f ( y ) d y = ∫ f ( x ) d x

К числу дифференциальных уравнений с разделенными переменными можно отнести следующие из них:

y 2 3 d y = sin x d x , e y d y = ( x + sin 2 x ) d x

Для того, чтобы прийти от ДУ с разделяющимися переменными к ДУ с разделенными переменными, необходимо разделить обе части уравнения на произведение f 2 ( y ) ⋅ g 1 ( x ) . Так мы придем к уравнению f 1 ( y ) f 2 ( y ) d y = g 2 ( x ) g 1 ( x ) d x . Преобразование можно будет считать эквивалентным в том случае, если одновременно f 2 ( y ) ≠ 0 и g 1 ( x ) ≠ 0 . Если хоть одно из условий не будет соблюдаться, мы можем потерять часть решений.

В качестве примеров дифференциальных уравнений с разделяющимися переменными можно привести следующие из них: d y d x = y · ( x 2 + e x ) , ( y 2 + a r c cos y ) · sin x · y ‘ = cos x y .

К уравнениям с разделяющимися переменными мы можем прийти от ряда дифференциальных уравнений других видов путем замены переменных. Например, мы можем подставить в исходное уравнение z = a x + b y . Это позволит нам перейти к дифференциальному уравнению с разделяющимися переменными от дифференциального уравнения вида y ‘ = f ( a x + b y ) , a , b ∈ R .

Подставив z = 2 x + 3 y в уравнение y ‘ = 1 e 2 x + 3 y получаем d z d x = 3 + 2 e z e z .

Заменив z = x y или z = y x в выражениях y ‘ = f x y или y ‘ = f y x , мы переходим к уравнениям с разделяющимися переменными.

Если произвести замену z = y x в исходном уравнении y ‘ = y x · ln y x + 1 , получаем x · d z d x = z · ln z .

В ряде случаев прежде, чем производить замену, необходимо произвести преобразования исходного уравнения.

Предположим, что в условии задачи нам дано уравнение y ‘ = y 2 — x 2 2 x y . Нам необходимо привести его к виду y ‘ = f x y или y ‘ = f y x . Для этого нам нужно разделить числитель и знаменатель правой части исходного выражения на x 2 или y 2 .

Нам дано уравнение y ‘ = f a 1 x + b 1 y + c 1 a 2 x + b 2 y + c 2 , a 1 , b 1 , c 1 , a 2 , b 2 , c 2 ∈ R .

Для того, чтобы привести исходное уравнение к виду y ‘ = f x y или y ‘ = f y x , нам необходимо ввести новые переменные u = x — x 1 v = y — y 1 , где ( x 1 ; y 1 ) является решением системы уравнений a 1 x + b 1 y + c 1 = 0 a 2 x + b 2 y + c 2 = 0

Введение новых переменных u = x — 1 v = y — 2 в исходное уравнение y ‘ = 5 x — y — 3 3 x + 2 y — 7 позволяет нам получить уравнение вида d v d u = 5 u — v 3 u + 2 v .

Теперь выполним деление числителя и знаменателя правой части уравнения на u . Также примем, что z = u v . Получаем дифференциальное уравнение с разделяющимися переменными u · d z d u = 5 — 4 z — 2 z 2 3 + 2 z .

Подробный разбор теории и алгоритмов решения задач мы привели в разделе «Дифференциальные уравнения с разделяющимися переменными».

Линейные неоднородные дифференциальные уравнения первого порядка y ‘ + P ( x ) · y = Q ( x )

Приведем примеры таких уравнений.

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

y ‘ — 2 x y 1 + x 2 = 1 + x 2 ; y ‘ — x y = — ( 1 + x ) e — x

Для решения уравнений этого вида применяется метод вариации произвольной постоянной. Также мы можем представить искомую функцию у в виде произведения y ( x ) = u ( x ) v ( x ) . Алгоритмы применения обоих методов мы привели в разделе «Линейные неоднородные дифференциальные уравнения первого порядка».

Дифференциальное уравнение Бернулли y ‘ + P ( x ) y = Q ( x ) y a

Приведем примеры подобных уравнений.

К числу дифференциальных уравнений Бернулли можно отнести:

y ‘ + x y = ( 1 + x ) e — x y 2 3 ; y ‘ + y x 2 + 1 = a r c t g x x 2 + 1 · y 2

Для решения уравнений этого вида можно применить метод подстановки z = y 1 — a , которая выполняется для того, чтобы свести исходное уравнение к линейному дифференциальному уравнению 1 -го порядка. Также применим метод представления функции у в качестве y ( x ) = u ( x ) v ( x ) .

Алгоритм применения обоих методов приведен в разделе «Дифференциальное уравнение Бернулли». Там же можно найти подробный разбор решения примеров по теме.

Уравнения в полных дифференциалах P ( x , y ) d x + Q ( x , y ) d y = 0

Если для любых значений x и y выполняется ∂ P ( x , y ) ∂ y = ∂ Q ( x , y ) ∂ x , то этого условия необходимо и достаточно, чтобы выражение P ( x , y ) d x + Q ( x , y ) d y представляло собой полный дифференциал некоторой функции U ( x , y ) = 0 , то есть, d U ( x , y ) = P ( x , y ) d x + Q ( x , y ) d y . Таким образом, задача сводится к восстановлению функции U ( x , y ) = 0 по ее полному дифференциалу.

Выражение, расположенное в левой части записи уравнения ( x 2 — y 2 ) d x — 2 x y d y = 0 представляет собой полный дифференциал функции x 3 3 — x y 2 + C = 0

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

Дифференциальные уравнения второго порядка

Линейные однородные дифференциальные уравнения второго порядка с постоянными коэффициентами y ‘ ‘ + p y ‘ + q y = 0 , p , q ∈ R

Линейное однородное дифференциальное уравнение с постоянными коэффициентами обычно решается достаточно просто. Нам необходимо найти корни характеристического уравнения k 2 + p k + q = 0 . Здесь возможны три варианта в зависимости от различных p и q :

  • действительные и различающиеся корни характеристического уравнения k 1 ≠ k 2 , k 1 , k 2 ∈ R ;
  • действительные и совпадающие k 1 = k 2 = k , k ∈ R ;
  • комплексно сопряженные k 1 = α + i · β , k 2 = α — i · β .

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

  • y = C 1 e k 1 x + C 2 e k 2 x ;
  • y = C 1 e k x + C 2 x e k x ;
  • y = e a · x · ( C 1 cos β x + C 2 sin β x ) .

Пример 13

Предположим, что у нас есть линейное однородное дифференциальное уравнение 2 -го порядка с постоянными коэффициентами y ‘ ‘ + 3 y ‘ = 0 . Найдем корни характеристического уравнения k 2 + 3 k = 0 . Это действительные и различные k 1 = — 3 и k 2 = 0 . Это значит, что общее решение исходного уравнения будет иметь вид:

y = C 1 e k 1 x + C 2 e k 2 x ⇔ y = C 1 e — 3 x + C 2 e 0 x ⇔ y = C 1 e — 3 x + C 2

Восполнить пробелы в теоретической части и посмотреть подробный разбор примеров по теме можно в статье «Линейные однородные дифференциальные уравнения 2 -го порядка с постоянными коэффициентами».

Линейные неоднородные дифференциальные уравнения второго порядка с постоянными коэффициентами y ‘ ‘ + p y ‘ + q y = f ( x ) , p , q ∈ R

Основным способом решение уравнений данного вида является нахождение суммы общего решения y 0 , которое соответствует линейному однородному дифференциальному уравнению y ‘ ‘ + p y ‘ + q y = 0 , и частного решения y

исходного уравнения. Получаем: y = y 0 + y

Способ нахождения y 0 мы рассмотрели в предыдущем пункте. Найти частное решение y

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

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

y ‘ ‘ — 2 y ‘ = ( x 2 + 1 ) e x ; y ‘ ‘ + 36 y = 24 sin ( 6 x ) — 12 cos ( 6 x ) + 36 e 6 x

Теоретические выкладки и подробный разбор примеров по теме можно найти в разделе «ЛНДУ 2 -го порядка с постоянными коэффициентами».

Линейные однородные дифференциальные уравнения (ЛОДУ) y ‘ ‘ + p ( x ) · y ‘ + q ( x ) · y = 0 и линейные неоднородные дифференциальные уравнения (ЛНДУ) второго порядка y ‘ ‘ + p ( x ) · y ‘ + q ( x ) · y = f ( x )

Линейные однородные и неоднородные дифференциальные уравнения и постоянными коэффициентами являются частными случаями дифференциальных уравнений этого вида.

На некотором отрезке [ a ; b ] общее решение линейного однородного дифференциального уравнения y ‘ ‘ + p ( x ) · y ‘ + q ( x ) · y = 0 представлено линейной комбинацией двух линейно независимых частных решений y 1 и y 2 этого уравнения, то есть, y = C 1 y 1 + C 2 y 2 .

Частные решения мы можем выбрать из систем независимых функций:

1 ) 1 , x , x 2 , . . . , x n 2 ) e k 1 x , e k 2 x , . . . , e k n x 3 ) e k 1 x , x · e k 1 x , . . . , x n 1 · e k 1 x , e k 2 x , x · e k 2 x , . . . , x n 2 · e k 2 x , . . . e k p x , x · e k p x , . . . , x n p · e k p x 4 ) 1 , c h x , s h x

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

Возьмем для примера линейное однородное дифференциальное уравнение x y ‘ ‘ — x y ‘ + y = 0 .

Общее решение линейного неоднородного дифференциального уравнения y ‘ ‘ + p ( x ) · y ‘ + q ( x ) · y = f ( x ) мы можем найти в виде суммы y = y 0 + y

, где y 0 — общее решение соответствующего ЛОДУ, а y

частное решение исходного дифференциального уравнения. Найти y 0 можно описанным выше способом. Определить y

нам поможет метод вариации произвольных постоянных.

Возьмем для примера линейное неоднородное дифференциальное уравнение x y ‘ ‘ — x y ‘ + y = x 2 + 1 .

Более подробно этот раздел освещен на странице «Линейные дифференциальные уравнения второго порядка».

Дифференциальные уравнения высших порядков

Дифференциальные уравнения, допускающие понижение порядка

Мы можем провести замену y ( k ) = p ( x ) для того, чтобы понизить порядок исходного дифференциального уравнения F ( x , y ( k ) , y ( k + 1 ) , . . . , y ( n ) ) = 0 , которое не содержит искомой функции и ее производных до k — 1 порядка.

В этом случае y ( k + 1 ) = p ‘ ( x ) , y ( k + 2 ) = p ‘ ‘ ( x ) , . . . , y ( n ) = p ( n — k ) ( x ) , и исходное дифференциальное уравнение сведется к F 1 ( x , p , p ‘ , . . . , p ( n — k ) ) = 0 . После нахождения его решения p ( x ) останется вернуться к замене y ( k ) = p ( x ) и определить неизвестную функцию y .

Дифференциальное уравнение y ‘ ‘ ‘ x ln ( x ) = y ‘ ‘ после замены y ‘ ‘ = p ( x ) станет уравнением с разделяющимися переменными y ‘ ‘ = p ( x ) , и его порядок с третьего понизится до первого.

В уравнении, которое не содержит аргумента х и имеет вид F ( y , y ‘ , y ‘ ‘ , . . . , y ( n ) ) = 0 , порядок может быть заменен на единицу следующим образом: необходимо провести замену d y d x = p ( y ) , где p ( y ( x ) ) будет сложной функцией. Применив правило дифференцирования, получаем:

d 2 y d x 2 = d p d y d y d x = d p d y p ( y ) d 3 y d x 3 = d d p d y p ( y ) d x = d 2 p d y 2 d y d x p ( y ) + d p d y d p d y d y d x = = d 2 p d y 2 p 2 ( y ) + d p d y 2 p ( y )
Полученный результаты подставляем в исходное выражение. При этом мы получим дифференциальное уравнение, порядок которого на единицу меньше, чем у исходного.

Рассмотрим решение уравнения 4 y 3 y ‘ ‘ = y 4 — 1 . Путем замены d y d x = p ( y ) приведем исходное выражение к уравнению с разделяющимися переменными 4 y 3 p d p d y = y 4 — 1 .

Более подробно решения задач по теме рассмотрены в разделе «Дифференциальные уравнения, допускающие понижение порядка».

Линейные однородные и неоднородные дифференциальные уравнения высших порядков с постоянными коэффициентами y ( n ) + f n — 1 · y ( n — 1 ) + . . . + f 1 · y ‘ + f 0 · y = 0 и y ( n ) + f n — 1 · y ( n — 1 ) + . . . + f 1 · y ‘ + f 0 · y = f ( x )

Решение уравнений данного вида предполагает выполнение следующих простых шагов:

  • находим корни характеристического уравнения k n + f n — 1 · k n — 1 + . . . + f 1 · k + f 0 = 0 ;
  • записываем общее решение ЛОДУ y 0 в стандартной форме, а общее решение ЛНДУ представляем суммой y = y 0 + y

— частное решение неоднородного дифференциального уравнения.

Нахождение корней характеристического уравнения подробно описано в разделе «Решение уравнений высших степеней». Для нахождения y

целесообразно использовать метод вариации произвольных постоянных.

Линейному неоднородному ДУ с постоянными коэффициентами y ( 4 ) + y ( 3 ) — 5 y ‘ ‘ + y ‘ — 6 y = x cos x + sin x соответствует линейное однородное ДУ y ( 4 ) + y ( 3 ) — 5 y ‘ ‘ + y ‘ — 6 y = 0 .

Более детальный разбор теории и примеров по теме вы можете найти на странице « Линейные однородные и неоднородные дифференциальные уравнения высших порядков с постоянными коэффициентами».

Линейные однородные и неоднородные дифференциальные уравнения высших порядков y ( n ) + f n — 1 ( x ) · y ( n — 1 ) + . . . + f 1 ( x ) · y ‘ + f 0 ( x ) · y = 0 и y ( n ) + f n — 1 ( x ) · y ( n — 1 ) + . . . + f 1 ( x ) · y ‘ + f 0 ( x ) · y = f ( x )

Найти решение ЛНДУ высших порядков можно благодаря сумме y = y 0 + y

, где y 0 — общее решение соответствующего ЛОДУ, а y

— частное решение неоднородного дифференциального уравнения.

y 0 представляет собой линейную комбинацию линейно независимых функций y 1 , y 2 , . . . , y n , каждая из которых является частным решением ЛОДУ, то есть, обращает равенство y ( n ) + f n — 1 ( x ) · y ( n — 1 ) + . . . + f 1 ( x ) · y ‘ + f 0 ( x ) · y = 0 в тождество. Частные решения y 1 , y 2 , . . . , y n обычно подбираются из известных систем линейно независимых функций. Подобрать их далеко не всегда просто и возможно, в этом и заключается основная проблема.

После того, как мы найдем общее решение ЛОДУ, найти частное решение соответствующего ЛНДУ можно благодаря методу вариации произвольных постоянных. Итак, y = y 0 + y

Получить более подробную информацию по теме можно в разделе «Дифференциальные уравнения высших порядков».

Системы дифференциальных уравнений вида d x d t = a 1 x + b 1 y + c 1 d y d t = a 2 x + b 2 y + c 2

Данная тема подробно разобрана на странице «Системы дифференциальных уравнений». Там же приведены примеры задач с подробных разбором.

Калькулятор Обыкновенных Дифференциальных Уравнений (ОДУ) и Систем (СОДУ)

Порядок производной указывается штрихами — y»’ или числом после одного штриха — y’5

Ввод распознает различные синонимы функций, как asin , arsin , arcsin

Знак умножения и скобки расставляются дополнительно — запись 2sinx сходна 2*sin(x)

Список математических функций и констант :

• ln(x) — натуральный логарифм

• sh(x) — гиперболический синус

• ch(x) — гиперболический косинус

• th(x) — гиперболический тангенс

• cth(x) — гиперболический котангенс

• sch(x) — гиперболический секанс

• csch(x) — гиперболический косеканс

• arsh(x) — обратный гиперболический синус

• arch(x) — обратный гиперболический косинус

• arth(x) — обратный гиперболический тангенс

• arcth(x) — обратный гиперболический котангенс

• arsch(x) — обратный гиперболический секанс

• arcsch(x) — обратный гиперболический косеканс

Численное решение математических моделей объектов заданных системами дифференциальных уравнений

Введение:

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

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

Возникает необходимость использовать численные методы, наиболее известным из которых является метод Рунге — Кутты [1]. Что касается Python, то в публикациях по численным методам, например [2,3], данных по применение Рунге — Кутты крайне мало, а по его модификации — методу Рунге-Кутта-Фельберга вообще нет.

В настоящее время, благодаря простому интерфейсу, наибольшее распространение в Python имеет функцию odeint из модуля scipy.integrate. Вторая функция ode из этого модуля реализует несколько методов, в том числе и упомянутый пятиранговый метод Рунге-Кутта-Фельберга, но, вследствие универсальности, имеет ограниченное быстродействие.

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

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

Для одного дифференциального уравнения n – го порядка, задача Коши состоит в нахождении функции, удовлетворяющей равенству:

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

Перед решением эта задача должна быть переписана в виде следующей СДУ

(1)

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

Модуль имеет две функции ode() и odeint(), предназначенные для решения систем обыкновенных дифференциальных уравнений (ОДУ) первого порядка с начальными условиями в одной точке (задача Коши). Функция ode() более универсальная, а функция odeint() (ODE integrator) имеет более простой интерфейс и хорошо решает большинство задач.

Функция odeint() имеет три обязательных аргумента и много опций. Она имеет следующий формат odeint(func, y0, t[,args=(), . ]) Аргумент func – это имя Python функции двух переменных, первой из которых является список y=[y1,y2. yn], а второй – имя независимой переменной.

Функция func должна возвращать список из n значений функций при заданном значении независимого аргумента t. Фактически функция func(y,t) реализует вычисление правых частей системы (1).

Второй аргумент y0 функции odeint() является массивом (или списком) начальных значений при t=t0.

Третий аргумент является массивом моментов времени, в которые вы хотите получить решение задачи. При этом первый элемент этого массива рассматривается как t0.

Функция odeint() возвращает массив размера len(t) x len(y0). Функция odeint() имеет много опций, управляющих ее работой. Опции rtol (относительная погрешность) и atol (абсолютная погрешность) определяют погрешность вычислений ei для каждого значения yi по формуле

Они могут быть векторами или скалярами. По умолчанию

Вторая функция модуля scipy.integrate, которая предназначена для решения дифференциальных уравнений и систем, называется ode(). Она создает объект ОДУ (тип scipy.integrate._ode.ode). Имея ссылку на такой объект, для решения дифференциальных уравнений следует использовать его методы. Аналогично функции odeint(), функция ode(func) предполагает приведение задачи к системе дифференциальных уравнений вида (1) и использовании ее функции правых частей.

Отличие только в том, что функция правых частей func(t,y) первым аргументом принимает независимую переменную, а вторым – список значений искомых функций. Например, следующая последовательность инструкций создает объект ODE, представляющий задачу Коши.

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

При численном решении задачи Коши

(2)

(3)

по известному решению в точке t =0 необходимо найти из уравнения (3) решение при других t. При численном решении задачи (2),(3) будем использовать равномерную, для простоты, сетку по переменной t с шагом т > 0.

Приближенное решение задачи (2), (3) в точке обозначим . Метод сходится в точке если при . Метод имеет р-й порядок точности, если , р > 0 при . Простейшая разностная схема для приближенного решения задачи (2),(3) есть

(4)

При имеем явный метод и в этом случае разностная схема аппроксимирует уравнение (2) с первым порядком. Симметричная схема в (4) имеет второй порядок аппроксимации. Эта схема относится к классу неявных — для определения приближенного решения на новом слое необходимо решать нелинейную задачу.

Явные схемы второго и более высокого порядка аппроксимации удобно строить, ориентируясь на метод предиктор-корректор. На этапе предиктора (предсказания) используется явная схема

(5)

а на этапе корректора (уточнения) — схема

В одношаговых методах Рунге—Кутта идеи предиктора-корректора реализуются наиболее полно. Этот метод записывается в общем виде:

(6),

Формула (6) основана на s вычислениях функции f и называется s-стадийной. Если при имеем явный метод Рунге—Кутта. Если при j>1 и то определяется неявно из уравнения:

(7)

О таком методе Рунге—Кутта говорят как о диагонально-неявном. Параметры определяют вариант метода Рунге—Кутта. Используется следующее представление метода (таблица Бутчера)

Одним из наиболее распространенных является явный метод Рунге—Кутта четвертого порядка

(8)

Метод Рунге—Кутта— Фельберга

Привожу значение расчётных коэффициентов метода

(9)

С учётом(9) общее решение имеет вид:

(10)

Это решение обеспечивает пятый порядок точности, остаётся его адаптировать к Python.

Вычислительный эксперимент по определению абсолютной погрешности численного решения нелинейного дифференциального уравнения с использованием обеих функций def odein(),def oden() модуля scipy.integrate и адаптированного к Python методов Рунге—Кутта и Рунге—Кутта— Фельберга

Адаптированные к Python методы Рунге—Кутта и Рунге—Кутта— Фельберга имеют меньшую абсолютную, чем решение с применением функции odeint, но большую, чем с использованием функции edu. Необходимо провести исследование быстродействия.

Численный эксперимент по сравнению быстродействия численного решения СДУ при использовании функции ode с атрибутом dopri5 (метод Рунге – Кутты 5 порядка) и с использованием адаптированного к Python метода Рунге—Кутта— Фельберга

Сравнительный анализ проведём на примере модельной задачи, приведенной в [2]. Чтобы не повторять источник, приведу постановку и решение модельной задачи из [2].

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

где – радиус вектор движущегося тела, – вектор скорости тела, – коэффициент сопротивления, вектор силы веса тела массы m, g – ускорение свободного падения.

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

К системе следует добавить начальные условия: (h начальная высота), . Положим . Тогда соответствующая система ОДУ 1 – го порядка примет вид:

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

Flight time = 1.2316 Distance = 5.9829 Height =1.8542
Flight time = 1.1016 Distance = 4.3830 Height =1.5088
Flight time = 1.0197 Distance = 3.5265 Height =1.2912
Flight time = 0.9068 Distance = 2.5842 Height =1.0240
Время на модельную задачу: 0.454787

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

def increment(f, t, y, tau
k1=tau*f(t,y)
k2=tau*f(t+(1/4)*tau,y+(1/4)*k1)
k3 =tau *f(t+(3/8)*tau,y+(3/32)*k1+(9/32)*k2)
k4=tau*f(t+(12/13)*tau,y+(1932/2197)*k1-(7200/2197)*k2+(7296/2197)*k3)
k5=tau*f(t+tau,y+(439/216)*k1-8*k2+(3680/513)*k3 -(845/4104)*k4)
k6=tau*f(t+(1/2)*tau,y-(8/27)*k1+2*k2-(3544/2565)*k3 +(1859/4104)*k4-(11/40)*k5)
return (16/135)*k1+(6656/12825)*k3+(28561/56430)*k4-(9/50)*k5+(2/55)*k6

Функция increment(f, t, y, tau) обеспечивает пятый порядок численного метода решения. Остальные особенности программы можно посмотреть в следующем листинге:

Время на модельную задачу: 0.259927

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

Решение краевой задачи с поточно разделёнными краевыми условиями

Приведем пример некоторой конкретной краевой задачи с поточно разделенными краевыми условиями:

(11)

Для решения задачи (11) используем следующий алгоритм:

1. Решаем первые три неоднородные уравнения системы (11) с начальными условиями

Введем обозначение для решения задачи Коши:

2. Решаем первые три однородные уравнения системы (11) с начальными условиями

Введем обозначение для решения задачи Коши:

3. Решаем первые три однородные уравнения системы (11) с начальными условиями

Введем обозначение для решения задачи Коши:

4. Общее решение краевой задачи (11) при помощи решений задач Коши записывается в виде линейной комбинации решений:

где p2, p3 — некоторые неизвестные параметры.

5. Для определения параметров p2, p3, используем краевые условия последних двух уравнений (11), то есть условия при x = b. Подставляя, получим систему линейных уравнений относительно неизвестных p2, p3:
(12)
Решая (12), получим соотношения для p2, p3.

По приведенному алгоритму с применением метода Рунге—Кутта—Фельберга получим следующую программу:

y0[0]= 0.0
y1[0]= 1.0
y2[0]= 0.7156448588231397
y3[0]= 1.324566562303714
y0[N-1]= 0.9900000000000007
y1[N-1]= 0.1747719838716767
y2[N-1]= 0.8
y3[N-1]= 0.5000000000000001
Время на модельную задачу: 0.070878

Вывод

Разработанная мною программа отличается от приведенной в [3] меньшей погрешностью, что подтверждает приведенный в начале статьи сравнительный анализ функции odeint с реализованным на Python метода Рунге—Кутта—Фельберга.

3. Н.М. Полякова, Е.В. Ширяева Python 3. Создание графического интерфейса пользователя (на примере решения методом пристрелки краевой задачи для линейных обыкновенных дифференциальных уравнений). Ростов-на-Дону 2017.


источники:

http://mathdf.com/dif/ru/

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