Решение системы нелинейных уравнений методом эйлера

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

Введение:

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

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

Возникает необходимость использовать численные методы, наиболее известным из которых является метод Рунге — Кутты [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)

Видео:Способы решения систем нелинейных уравнений. 9 класс.Скачать

Способы решения систем нелинейных уравнений. 9 класс.

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

Решение системы нелинейных уравнений методом эйлера

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

Решение системы нелинейных уравнений методом эйлера(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.

Решение системы нелинейных уравнений методом эйлера

Системой дифференциальных уравнений называется система вида

Решение системы нелинейных уравнений методом эйлера

где x — независимый аргумент,

yi — зависимая функция, Решение системы нелинейных уравнений методом эйлера,

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

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

Решение системы нелинейных уравнений методом эйлера

Модифицированный метод Эйлера.

Метод Рунге-Кутта четвертого порядка.

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

F(x,y,у’,y»)=0(1)
y»=f(x,y,y’).(2)

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

Численно ищется частное решение уравнения (2), которое удовлетворяет заданным начальным условиям, то есть решается задача Коши.

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

Решение системы нелинейных уравнений методом эйлера.(3)

Функция f2(x, y1, y) в систему (3) введена формально для того, чтобы методы, которые будут показаны ниже, могли быть использованы для решения произвольной системы дифференциальных уравнений первого порядка. Рассмотрим несколько численных методов решения системы (3). Расчетные зависимости для i+1 шага интегрирования имеют следующий вид. Для решения системы из n уравнений расчетные формулы приведены выше. Для решения системы из двух уравнений расчетные формулы удобно записать без двойных индексов в следующем виде:

Метод Рунге-Кутта четвертого порядка.

где h — шаг интегрирования. Начальные условия при численном интегрировании учитываются на нулевом шаге: i=0, x=x0, y1=y10, y=y0.

Видео:Видеоурок "Системы диф. уравнений. Метод Эйлера"Скачать

Видеоурок "Системы диф. уравнений. Метод Эйлера"

Контрольное задание по зачетной работе.

Колебания с одной степенью свободы

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

Задание. Численно и аналитически найти:

  1. закон движения материальной точки на пружинке х(t),
  2. закон изменения силы тока I(t) в колебательном контуре (RLC — цепи) для заданных в табл.1,2 режимов. Построить графики искомых функций.

Свободные незатухающие колебания

Затухающее колебательное движение

Предельное апериодическое движение

Вынужденное колебание без сопротивления

Вынужденное колебание без сопротивления, явление резонанса

Вынужденное колебание с линейным сопротивлением

Вынужденное колебание с линейным сопротивлением, явление резонанса

🎦 Видео

4.2 Решение систем нелинейных уравнений. МетодыСкачать

4.2 Решение систем нелинейных уравнений. Методы

Метод Эйлера. Решение систем ДУСкачать

Метод Эйлера. Решение систем ДУ

Методы решения систем нелинейных уравнений. Метод Ньютона. Численные методы. Лекция 14Скачать

Методы решения систем нелинейных уравнений. Метод Ньютона. Численные методы. Лекция 14

9 класс, 11 урок, Методы решения систем уравненийСкачать

9 класс, 11 урок, Методы решения систем уравнений

МЗЭ 2021 Лекция 11 Метод Ньютона для решения систем нелинейных уравненийСкачать

МЗЭ 2021 Лекция 11 Метод Ньютона для решения систем нелинейных уравнений

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.Скачать

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.Скачать

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.Скачать

Способы решения систем нелинейных уравнений. Практическая часть. 9 класс.

Линейное дифференциальное уравнение Коши-ЭйлераСкачать

Линейное дифференциальное уравнение Коши-Эйлера

Метод Крамера за 3 минуты. Решение системы линейных уравнений - bezbotvyСкачать

Метод Крамера за 3 минуты. Решение системы линейных уравнений - bezbotvy

Метод простых итераций пример решения нелинейных уравненийСкачать

Метод простых итераций пример решения нелинейных уравнений

Алгоритмы С#. Метод Ньютона для решения систем уравненийСкачать

Алгоритмы С#. Метод Ньютона для решения систем уравнений

Видеоурок "Системы дифференциальных уравнений"Скачать

Видеоурок "Системы дифференциальных уравнений"

Вычислительная математика. Лекция 4. Решение нелинейных уравнений и систем уравненийСкачать

Вычислительная математика. Лекция 4. Решение нелинейных уравнений и систем уравнений

Метод Ньютона (метод касательных) Пример РешенияСкачать

Метод Ньютона (метод касательных) Пример Решения
Поделиться или сохранить к себе: