Решить онлайн дифференциальное уравнение второго порядка: Дифференциальные уравнения. Пошаговый калькулятор

Содержание

Линейные дифференциальные уравнения 2-го порядка с постоянными коэффициентами. (Семинар 36)

Похожие презентации:

Неоднородные дифференциальные уравнения 2-го порядка с постоянными коэффициентами. (Лекция 2.11)

Дифференциальные уравнения. Линейные уравнения с постоянными коэффициентами

Линейные ДУ второго порядка с постоянными коэффициентами

Решение НЛДУ второго порядка с постоянными коэффициентами методом неопределённых коэффициентов

Решение ЛДУ 2 — го порядка с постоянными коэффициентами

Линейные однородные ДУ n-го порядка с постоянными коэффициентами

ДУ высших порядков. Решение ОЛДУ второго порядка с постоянными коэффициентами

Линейные дифференциальные уравнения n-го порядка (однородные с постоянными коэффициентами, уравнения Эйлера)

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

Метод вариации произвольных постоянных. (Лекция 2.12)

1. Презентация по Математическому Анализу Семинар 36

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

1. Однородное уравнение.
Линейное уравнение 2-го порядка с постоянными коэффициентами p и q без
правой части имеют вид
Если k1 , k 2
y’’+py’+qy=0 (1).
— корни характеристического уравнения
(k ) k 2 pk q 0
то общее решение уравнения (1) записывается в одном из следующих трех видов:
1)
y C1e k1x C 2 e k2 x , если k1 , k 2 R, k1 k 2
2)
y e k1x (C1 C 2 x) , если
x
3) y e (C1 cos x C2 sin x)
k1 k 2
, если k1 i, k 2 i, ( 0)
(2),
2. Неоднородное уравнение
Общее решение линейного неоднородного дифференциального уравнения
y’’+py’+qy=f(x) (3) можно записать в виде суммы y y 0 Y , где y 0 общее решение соответствующего уравнения (1) без правой части, определяемое
по формулам (1)-(3), и Y – частное решение данного уравнения (3).
Функция Y может быть найдена методом неопределенных коэффициентов в
следующих простейших случаях:
1. f ( x) e ax Pn ( x) , где
Pn (x) — многочлен степени n.
Если ( a bi ) 0 , то полагают
Y e ax [ S N ( x) cos bx TN ( x) sin bx]
где
S N ( x), TN ( x)
— многочлены степени N=max{n,m}.
Если же
(a bi ) 0
то полагают
Y x r e ax [ S N ( x) cos bx TN ( x) sin bx]
где
S N ( x), TN ( x) — многочлены степени
r – кратность корней
N=max{n,m},
a bi (для уравнений 2-го порядка r=1).
В общем случае для решения уравнения (3) применяется метод вариации
произвольных постоянных.
Этот
метод
применяется
для
отыскания
частного
решения
линейного
неоднородного уравнения n-го порядка как с переменными, так и с постоянными
коэффициентами, если известно общее решение соответствующего однородного
уравнения.
Метод вариации для уравнения второго порядка
следующем.
y’’+py’+qy=f(x)
заключается в
y1 , y2
Пусть известна фундаментальная система решений
.
Тогда общее решение неоднородного уравнения следует искать в виде:
y C1 ( x) y1 C2 ( x) y2
где функции C1 ( x), C2 ( x) определяются из системы уравнений
C1′ ( x) y1 C 2′ ( x) y 2 0

C1 ( x) y1′ C 2′ ( x) y 2′ f ( x)
Решение этой системы находим по формулам:
C1 ( x)
y 2 f ( x)dx
; C 2 ( x)
W ( y1 , y 2 )
y1 f ( x)dx
W ( y1 , y 2 )
в силу чего y(x) можно сразу определить по формуле:
y ( x) y1
y 2 f ( x)dx
y f ( x)dx
y2 1
W ( y1 , y 2 )
W ( y1 , y 2 )
здесь W ( y1 , y 2 )- вронскиан решений y1 , y 2
Примеры с решениями.
1. Найти общее решение уравнения
Решение.
y’’-5y’+6y=0
Составим характеристическое уравнение
k 2 5k 6 0
его корни k1 2; k 2 3
Следовательно,
e 2 x , e 3 x — частные линейно независимые решения,
а общее решение имеет вид:
y C1e 2 x C2 e 3 x
2. Решить уравнение
y’ ‘ 2 y’ 2 y x 2
Решение. Характеристическое уравнение
k 2 2k 2 0 имеет корни
k1, 2 1 i , а поэтому общее решение однородного уравнения
y e x (C1 cos x C 2 sin x)
Частное решение следует искать в виде:
y Ax 2 Bx C
(в данном случае 0, 0, i 0; так как корня 0 у характеристического
уравнения нет , то
m=n=2 и r=0, имеем:
y Ax 2 Bx C
2 y ‘ 2 Ax B
1
y’ ‘ 2 A
2
y ‘ ‘ 2 y ‘ 2 y 2 Ax 2 (2 B 4 A) x (2C 2 B 2 A) x 2
Решая систему уравнений:
2 A 1
2 B 4 A 0
2C 2 B 2 A 0
A 1/ 2
B 1
C 1 / 2
Следовательно, общее решение исходного уравнения:
y e x (C1 cos x C 2 sin x )
1
( x 1) 2
2
3. Решить уравнение y’ ‘ y xe x 2e x
Решение.
Характеристическое уравнение
k 2 1 0
имеет корни k1, 2 i
а поэтому общее решение однородного уравнения:
y C1 cos x C2 sin x
Пользуясь принципом наложения, частное решение исходного уравнения следует искать
в виде:
y y1 y 2 ( Ax B)e x Ce x
(имеем для
то
y1 : f1 ( x) xex , 1 1, 1 0; 1 1i 1; поскольку такого корня нет,
r1 0; n m 1; для y 2 : f 2 ( x) e x , 2 1, 2 0; 2 2 i 1; r2 n1 m1 0)
Итак,
x
x
1 y ( Ax B )e Ce
0 y ‘ Ae x ( Ax B )e x Ce x
1 y ‘ ‘ 2 Ae x ( Ax B )e x Ce x
y’ ‘ y 2 Axex (2 A 2B)e x Ce x xex 2e x
Решая систему уравнений:
2 A 1
2 A 2 B 0
2C 2
A 1/ 2
B 1 / 2
C 1
Следовательно, общее решение исходного уравнения:
y C1 cos x C 2 sin x
1
( x 1) e x
2
Примеры для самостоятельного решения
1. Найти общие решения уравнения:
1. y ‘ ‘ y ‘ 2 0
3. y ‘ ‘ y ‘ 0
2. y ‘ ‘ 25 y 0
4. y ‘ ‘ 4 y ‘ 4 y 0
5. y ‘ ‘ 5 y ‘ 6 y 0
2. Найти решения уравнений, удовлетворяющие заданным начальным или
краевым условиям:
1.
y ‘ ‘ 5 y ‘ 6 y 0; y (0) 1; y ‘ (0) 6
2. y’ ‘ 10 y ‘ 25 0; y (0) 0; y ‘ (0) 1
3. y’ ‘ 3 y’ 10 y 0; y( / 6) 0; y’ ( / 6) e / 6
4. y ‘ ‘ 3 y ‘ 0; y (0) 1; y ‘ (0) 2
5. y ‘ ‘ 9 y 0; y (0) 0; y ‘ ( / 4) 1
3. Решить уравнения:
1. y’ ‘ 4 y’ 3 y e 5 x ; y(0) 3; y’ (0) 9;
3. y’ ‘ 6 y’ 8 y 3x 2 2 x 1
2. y ‘ ‘ 6 y ‘ 16 y 2 sin x 3 cos x
4. y ‘ ‘ 4 y cos 2 x; y (0) 0; y ‘ ( / 4) 0
5. y’ ‘ 3 y’ 10 y xe 2 x
6. y ‘ ‘ y x cos 2 x
7. y ‘ ‘ 2 y ‘ 2 y e x sin x

English     Русский Правила

Дифференциальные уравнения определение, типы ДУ, теория, как решать ДУ первого и второго порядка, методы и примеры подробных решений, онлайн-калькулятор

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

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

Имеется достаточно большое количество типов этих равенств, рассмотрим подходы к их решению так, чтобы они были понятны даже для «чайников».

Содержание

  • Дифференциальные уравнения первого порядка
    • Простейшие ДУ первого порядка
      • Задача №1
    • ДУ с разделяющимися переменными
      • Задача №2
    • Линейные неоднородные ДУ первого порядка
      • Задача №3
    • Задача Коши для ДУ
      • Задача №4
    • Дифференциальные уравнения Бернулли
      • Задача №5
  • Дифференциальные уравнения второго порядка
    • Линейные однородные ДУ второго порядка с постоянными коэффициентами
      • Задача №6
    • Линейные неоднородные ДУ второго порядка с постоянными коэффициентами
      • Задача №7
  • Дифференциальные уравнения высших порядков

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

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

F(x,y(x),y´(x)) = 0,

здесь, F(x,y,y) – это функция, задающаяся для трех аргументов (в этом примере для х, у и у). Таково строгое математическое определение ДУ.

Для примера можно привести следующее уравнение:

xy'(x) — y(x)2 = 0

функция вида F(x,y,p) = xp — y2

Простейшие ДУ первого порядка

Общепринятый механизм нахождения решения таких выражений (чаще всего похожи на y’ = f(x)) – это интегрирование левой и правой части такого уравнения на заданном промежутке Х. 

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

∫ y’dx = ∫ f(x)dx

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

y = F(x) + N

здесь, F(x) – это первообразная от функции f(x) на заданном интервале Х, а N – случайным образом выбранная константа.

Задача №1

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

Последовательно рассмотрим решение.

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

Если же, напротив, принять, что х = 0, то выражение приобретет следующий вид, характерный для любых функций y’, удовлетворяющих данному условию:

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

Данное выражение – это решение для приведенного диффуравнения.

ДУ с разделяющимися переменными

Среди дифуров 1-го порядка можно выделить такие, где все переменные х и у можно преобразовать так, что они окажутся по разные стороны от знака равенства.  

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

Их общий вид следующий:

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

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

Задача №2

Рассмотрим обыкновенный пример. Необходимо определить все возможные решения диффуравнения y’ = y(x2 + ex)

Как решать? В первую очередь проводим разделение переменных в разные части уравнения:

Данные преобразования справедливы, если у ≠ 0.

Если рассмотреть вариант решения при нулевом показателе функции, то можно заметить ,что

Это означает, что y = 0 – одно из возможных решений задачи.

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

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

Правильными решениями, в результате преобразований, будут:

 

Кроме того, можно воспользоваться онлайн системой для нахождения ответа. Подробные объяснения даны в решебниках Филиппова и Понтрягина.

Линейные неоднородные ДУ первого порядка

Линейные неоднородные уравнения – это такие выражения, которые можно записать в формате y’ + b(x)y = f(x), при этом функции b(x) и f(x) – непрерывные.

Основной принцип при нахождении решения сводится к следующим шагам:

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

  • Затем необходимо варьировать произвольной постоянной, производя ее замену на функцию.

  • На финальном этапе функция подставляется в первоначальное уравнение, откуда, решая ДУ, получается ответ.

  • Задача №3

    Рассмотрим применение методики решения на примере. 

    Необходимо найти решение дифференциального уравнения вида 

    Решение заключается в следующем. Первоначально примем, что y = m∗n, следовательно, получается:

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

    Получаем дополнительное дифференциальное уравнение:

    Теперь необходимо принять одно из частных решений n = x2 + 1, которое соответствует равенству С2 — С1=0.

    Выполняем оставшиеся преобразования:

    Вполне очевидно, что ответом на условие задачи будет функция:

    Задача Коши для ДУ

    При рассмотрении решения практически любого диффуравнения, имеющего вид F(m,n,n’) = 0, становится очевидно, что это бесконечно большое количество решений (это следствие самого возникновения диффуравнения). 

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

    Чтобы это сделать, необходимо рассмотреть плоскость Xoy, где должна быть задана некая точка D0, имеющая координаты (x0, y0) – именно через них и должна пройти интегральная кривая, чтобы стать искомым ответом.

    Когда мы с самого начала задаем точку D0(x0, y0) – это означает, задание начального условия y(x0) = y0. Диффуравнение, для которого определено начальное условие в представленном формате, называется уравнением с заданной задачей Коши.

    Задача №4

    Рассмотрим примеры с объяснениями. Необходимо определить решения задачи Коши вида:

    Ход решения строится в три этапа. На первом этапе решаем диффуравнение y’ = xy2 стандартным методом. Его решение приводить не будем, приведем только ответ:

    Производим подстановку начального значения (х = 0, у = 1) в решение и находим значение С:

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

    Полученная функция – ответ на задачу Коши в этом примере.

    Дифференциальные уравнения Бернулли


    ДУ Бернулли обычно представлено в следующем виде:

    y’ + b(x)y = c(x)yn

    Обязательное условие, что функции b(x) и c(x) – являются непрерывными.

    Задача №5

    Рассмотрим общее решение данного типа на примере. Необходимо выполнить поиск всех возможных решений уравнения:

    Во время оценки уравнения в нем можно идентифицировать ДУ Бернулли с параметром ½. Оно легко сводится к линейному ДУ, для этого достаточно заменить выражения:

    Находим производную:

    Выполним деление по начальному уравнению Бернулли на 

    и выполним необходимые преобразования:

    Произведем замену параметра х на параметр у:

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

    Теперь производим ряд преобразований для вычисления решения диффуравнения:

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

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

    Отличить ДУ 2-го порядка от таковых 1-го порядка достаточно просто – в их составе присутствует вторая производная (y’’) и не содержится производных более высокого уровня.  

    Общий вид таких уравнений таков:

    F(m,n,n’,n») = 0  

    Линейные однородные ДУ второго порядка с постоянными коэффициентами

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

    y» + ry’ + k = 0

    При это важным условием теории является причисление r и k к действительным числам.

    Задача №6

    Рассмотрим решение однородных диффуравнений 2-го порядка с постоянными коэффициентами на примере.

    Найти решение диффуравнения 2-го порядка вида:

    Во всех таких случаях начинаем с поиска характеристического уравнения:

    Методы решения данного уравнения достаточно простые, можно воспользоваться калькулятором или быстро решить на листочке, поэтому их приводить не будем, запишем лишь корни – 1, 5. 

    Поскольку это все действительные, неодинаковые числа, то можно записать функцию-решение в следующем виде:

     

    Линейные неоднородные ДУ второго порядка с постоянными коэффициентами

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

    y» + ry’ + ky = f(x)

    Переменные r и k должны быть вещественными и постоянными числами.

    Задача №7

    Рассмотрим подробное решение. Необходимо определить все решения для уравнения y» + y = cos x.

    На первом этапе находим в составе неоднородного уравнения его однородную часть – это будет y» — y = 0. 

    Для него уже выполняем поиск характеристического уравнения – оно будет иметь вид k2 + 1 = 0.

    Корнями для данного характеристического уравнения являются k1 = -i и k2 = i. 

    Исходя из этого записываем решение для однородного уравнения:

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

    Теперь остается только подставить найденные выражения:

    Частное и общее решение для уравнения можно записать:

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

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

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

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

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

    Предыдущая

    АлгебраСкалярное произведение векторов определение, основные свойства, формулы и условия вычисления, примеры задач с решениями, онлайн-калькулятор

    Следующая

    АлгебраРегрессионный анализ определение, виды, этапы и основы метода, примеры уравнений, коэффициент регрессии, интерпретация результатов, как сделать регрессионный анализ в excel

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

    Цели обучения (ссылка на учебную программу):11. 4.1.25. Решать линейные однородные дифференциальные уравнения второго порядка вида ay′′ + by′ + cy = 0, где a, b, c – постоянные  
    Цели урока:<ul><li>решать линейные однородные дифференциальные уравнения второго порядка вида ay′′ + by′ + cy = 0, где a, b, c – постоянные; </li><li> показать, что общее решение дифференциального уравнения строится в зависимости от характера корней характеристического уравнения.&nbsp; &nbsp;</li></ul>
    Языковые цели:Предметная лексика и терминология составить характеристическое уравнение; определить корни характеристического уравнения; подставить найденные значения в формулу общего решения линейные однородные дифференциальные уравнения с постоянными коэффициентами; найти общее решение.
    Серия полезных фраз для диалога/письма: дифференцировать общее решение; находить произвольные постоянные; определить частное решение.&nbsp;&nbsp;
    Ожидаемый результат:Решают линейные однородные дифференциальные уравнения второго порядка (вида ay»+by’+cy=0, где a, b, c — постоянные)&nbsp;&nbsp;
    Критерии успеха:
    Привитие ценностей:Ценности, основанные на национальной идее «Мәңгілік ел»: уважение; сотрудничество; труд и творчество; открытость; образование в течение всей жизни.&nbsp;
    Навыки использования ИКТ:Знание, понимание, применение&nbsp;&nbsp;
    Межпредметная связь:Физика&nbsp;&nbsp;
    Предыдущие знания:Основные сведения о дифференциальных уравнениях. Дифференциальные уравнения первого порядка с разделяющими переменными. Комплексные числа.

    Ход урока

    Этапы урокаЗапланированная деятельность на урокеРесурсы

    Начало урока

    (6 минут)

    <p>I. Организационный момент: Эпиграф к уроку. Готфрид Вильгельм Лейбниц определял мир – умопостигаемый, или мир истинно сущего. Он же и ввёл определение дифференциала и дифференциального уравнения в 17 веке. С помощью метода «Толстые и тонкие вопросы» проводится проверка домашней работы. ,-6y=0&nbsp;&nbsp;

    Рефлексия

    (2 минуты)

    Прием «Круги по воде» Цель: оценить степень усвоения изученного материала Инструкция: Ключевое слово урока «УРАВНЕНИЕ» записывается в столбик. И на каждую букву учащиеся предлагают и записывают существительные или словосочетания по изученной теме.&nbsp;&nbsp;макет на доске

    Домашнее задание

    (1 минута)

    Дифференцированное. Цель: отработать полученные умения и навыки на уроке Инструкция: решить номера по учебнику, классная раблота является как облразец. 1) По учебнику № 28.3, 28.4, 28.6 стр216. 2)Заполнить таблицу №28.1&nbsp;&nbsp;Карточка, Абылкасымова А.Е., Корчевский В.Е., Жумагулова З. А. Алгеблра и начала анализа (ЕМН) 11 кл. общеобразоват.шк. – Алматы: Мектеп, 2020.– 256 с.: ил.&nbsp;&nbsp;

    Приложение:

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

    Отзывы(0)

    Начальные задачи для неоднородных дифференциальных уравнений второго порядка — Криста Кинг Математика

    Шаги для решения начальной задачи для неоднородного дифференциального уравнения второго порядка

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

    Привет! Я Криста.

    Я создаю онлайн-курсы, чтобы помочь вам в учебе по математике. Читать далее.

    Мы можем обобщить эти шаги следующим образом:

    1. Найдите дополнительное решение ???y_c(x)???.

    2. Найдите частное решение ???y_p(x)???.

    3. Сложите их вместе, чтобы найти общее решение ???y(x)=y_c(x)+y_p(x)???.

    4. Найдите производную общего решения ???y'(x)=y_c'(x)+y_p'(x)???.

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

    6. Решите систему, чтобы найти значения для ???c_1??? и ???c_2???.

    7. Вилка ???c_1??? и ???c_2??? вернуться к общему решению, чтобы решить проблему начального значения.

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

    Пройти курс

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

    🙂 9{-Икс}???

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

    Приравнивая коэффициенты слева и справа, получаем

    ???2A+B=0???

    ???2\влево(\frac12\вправо)+B=0???

    ???В=-1???

    и

    ???2A=1???

    ???A=\frac12???

    и

    ???-C=-2???

    ???С=2???

    9{-Икс}???

    Получить доступ к полному курсу «Дифференциальные уравнения»

    Learn mathКриста Кинг математика, выучить онлайн, онлайн-курс, онлайн-математика, дифференциальные уравнения, обыкновенные дифференциальные уравнения, дифференциальные уравнения второго порядка, неоднородные дифференциальные уравнения второго порядка, неоднородные дифференциальные уравнения, ДУ второго порядка, неоднородные ДУ, начальные задачи, начальные условия

    0 лайков

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

    Что говорят наши клиенты.

    ..

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

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

    Сэмюэл Ли, Калифорния

    Я впечатлен! В свои 64 иногда ненавижу перемены, но это точно к лучшему.

    Judy McDonald, TX

    Что мне нравится в этом программном обеспечении, так это простой способ объяснения, понятный каждому. И под словом «кто-нибудь» я действительно имею в виду это.

    T.F., Michigan

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

    Анжела Бакстор, Техас

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

    Чак Джонс, Лос-Анджелес


    Поисковые фразы, использованные 07 февраля 2007 г.:

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

    • ti 84 эмулятор скачать
    • Алгебра для начинающих
    • калькулятор наименьших кратных дробей
    • математика, формула для эллипса
    • листов решения уравнений с двумя переменными
    • решение алгебры Голдфорда
    • проекты дроби шестой класс
    • Калькулятор рационального порядка
    • извлечение квадратного корня из n-го корня на ti 83
    • рабочих листов задач на ввод дробей
    • алгебра калькулятор рациональное выражение
    • упростить квадратный корень из половины
    • добавление подкоренных выражений + калькулятор
    • рабочие листы по дизайну для детей
    • математика учить алгебру
    • McGraw-Hill + Коммутативное свойство + рабочий лист
    • как упростить квадратики 3-й степени и выше
    • основы квадратичного анализа и факторизации
    • бесплатный калькулятор рациональных уравнений
    • тест по математике для 8 класса
    • как рассчитать уклон с помощью ti83
    • Справка по алгебре 2 по тригонометрии
    • сложных математических уравнений
    • символический метод- математический словарь
    • упрощенная радикальная форма
    • как преобразовать дробь в десятичную с целыми числами
    • СРЕДНИЙ БЕСПЛАТНЫЙ УРОК ИЛИ ЗАДАЧИ ПО АЛГЕБРЕ
    • решение проблемы lcm
    • Калькулятор радикального решения
    • алгебраические калькуляторы, упрощающие выражения с показателями и корнями
    • творческих публикаций, рабочие листы для пиццы, среднее значение и диапазон
    • Тест функций, статистики и тригонометрии UCSMP, глава 4, форма E
    • решение уравнений полиномов третьего порядка
    • уравнение жесткого исчисления
    • координатная плоскость Powerpoints
    • Викторина по биологии Макдугал Литтел
    • научите себя программе алгебры для старших классов
    • математика для учеников холла/6 класс
    • инструмент наименьшего общего знаменателя
    • © Glencoe/McGraw-Hill Запись выражений площади в факторизованной форме/ключ ответа
    • линейные неравенства-математика PowerPoint презентации
    • найти делители javascript
    • разложение полиномов в кубе
    • вводные задачи по алгебре
    • формула Крамера Visual Basic
    • переменных и постоянных математических рабочих листов
    • апплеты умножения радикалов
    • математика для чайников
    • КАК СКЛАДЫВАТЬ, ВЫЧИТАТЬ, УМНОЖАТЬ И ДЕЛИТЬ ВОСМЕРИЧНЫЕ ЧИСЛА
    • Прентис Холл Алгебра 2 онлайн учебник
    • Рабочие листы по геометрии для 11 класса
    • Glencoe алгебра 1 рабочая тетрадь ответы
    • что происходит, когда вы подставляете квадратную формулу и получаете отрицательное число для квадратного корня?
    • glencoe алгебра 1 понятия
    • ряд Фурье для ти-84 плюс
    • пример десятичной мелочи
    • Математические листы для 4 класса Онтарио
    • Excel автоматический решатель
    • Алгебра Прентиса Холла 1 pdf
    • помощь по алгебре в колледже
    • блок 2, задание 7, рабочий лист по поиску полиномов в виде графика
    • научная нотация, план урока в PowerPoint
    • добавление формулы вычитания смешанных чисел
    • преобразование стандартной формы в вершинную форму
    • бесплатное онлайн объяснение алгебры для 7 класса
    • умножение и деление на десятичные дроби практика
    • поля направлений, линейные дифференциальные уравнения первого порядка
    • алгебра
    • решение неоднородных дифференциальных уравнений второго порядка
    • Рабочие листы по математике ks3 бесплатно
    • веб-сайт, на котором есть все решения по алгебре 1 cpm mathbook
    • Калькулятор экспрессии свободных радикалов
    • Калькулятор радикалов
    • калькулятор нахождения общего знаменателя
    • заполнение квадрата дробью
    • решение для дистанционных рабочих листов
    • стихи по математике
    • Калифорнийская алгебра для средней школы 2 учебное пособие
    • алгебра 1 книга по математике домашняя работа
    • Рунге Кутта Метод Фельберга второго порядка ода
    • предварительные ответы по алгебре для рабочей тетради prentice hall
    • как сделать суммирование на ти-89
    • упорядочить дроби от наименьшего к наибольшему
    • Целочисленные рабочие листы
    • Калькулятор уравнений факторинга
    • простые уравнения для тренировки слов
    • glencoe курс по приложениям и связям для учителей математики, тест 1 главы
    • решение уравнений от n порядка
    • как рассчитать объем для 4-классника
    • ti 83 комплексное линейное уравнение
    • решение уравнений умножением или делением
    • 6-й класс деления десятичных дробей
    • Кубический калькулятор
    • математика + мелочи
    • Рабочий лист целых чисел 7 класса
    • дробная форма: квадратное уравнение
    • многочлен решателя задач
    Предыдущий Далее

    Решатели обыкновенных дифференциальных уравнений в Python

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

    Почта организована как своего рода Розеттская стела: представлены три задачи а именно уравнение первого порядка, система двух уравнений первого порядка и уравнение второго порядка, каждое со своими начальными условиями (или условие Коши, сокращенно IVP для Initial Value Problem ) и ниже список их решений с различными используемыми библиотеками. Для каждой задачи также известно аналитическое решение, что позволяет сравнивать качество полученных численных решений.
    Розеттский камень продолжается в пост-решателях обыкновенных дифференциальных уравнений в Джулии, где он показывает решение тех же проблем в Джулии.
    .
    Для всех различных фрагментов кода, описанных в этом посте, требуется Python версии 3 и библиотеки MatPlotLib и NumPy. при этом по отдельности требуют дополнительной библиотеки (и собственных зависимостей) в соответствии с используемым решателем.
    Чтобы получить код, см. параграф Скачать полный код в конце этого поста.

    Соглашения

    В этом посте используются следующие соглашения:

    • $t$ независимая переменная
    • $x$ неизвестная функция
    • $y$ — вторая неизвестная функция в случае систем двух уравнений
    • Предполагается, что $x$ и $y$ являются функциями от $t$, поэтому $x=x(t)$ и $y=y(t)$, но использование этой компактной записи, в дополнение к большей удобочитаемости на математическом уровне упрощает «перевод» уравнения в код
    • $x’$ — первая производная от $x$ по $t$ и, конечно же, $y’$ — первая производная от $y$ по $t$
    • $x»$ — вторая производная от $x$ по $t$ и, конечно же, $y»$ — вторая производная от $y$ по $t$

    ODE первого порядка с IVP

    Пусть задана следующая задача Коши: $$ \begin{уравнение} \begin{случаи} х’+х=\sin t + 3 \cos 2t \\ х(0)=0 \end{случаи} \end{уравнение} $$ аналитическое решение которого: $$ x(t) = \frac{1}{2} \sin t − \frac{1}{2} \cos t + \frac{3}{5} \cos 2t + \frac{6}{5 } \sin 2t − \frac{1}{10}e^{-t} $$ проверяется онлайн через Wolfram Alpha.
    Реализации следующих резолюций требуют явной записи дифференциального уравнения в виде $x’=F(x,t)$ и тогда становится: $$ x’=\sin t + 3 \cos 2t — x$$

    Сципи

    Scipy использует функцию scipy.integrate.solve_ivp . численно решить обыкновенное дифференциальное уравнение первого порядка с начальным значением.
    Явная форма приведенного выше уравнения в Python с NumPy реализована следующим образом:

     лямбда t, x: np.sin(t) + 3. * np.cos(2. * t) - x 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью scipy.integrate.solve_ivp :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    из scipy.integrate импортаsolve_ivp
    ode_fn = лямбда t, x: np.sin(t) + 3. * np.cos(2. * t) - x
    an_sol = lambda t : (1. /2.) * np.sin(t) - (1./2.) * np.cos(t) + \
                        (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
                        (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=10.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    х_инит = 0.
    x_an_sol = an_sol(t_space)
    method = 'RK45' #доступные методы: 'RK45', 'RK23', 'DOP853', 'Radau', 'BDF', 'LSODA'
    num_sol =solve_ivp(ode_fn, [t_begin, t_end], [x_init], method=method, plot_output=True)
    x_num_sol = num_sol.sol(t_space).T
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, x_num_sol, ширина линии=1, метка='числовой')
    plt.title('ODE IVP 1-го порядка, решенная SciPy с помощью метода =' + метод)
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным с помощью scipy.integrate.solve_ivp .

    Вероятность TensorFlow

    TensorFlow Probability использует класс tfp. math.ode.BDF . численно решить обыкновенное дифференциальное уравнение первого порядка с начальным значением.
    Явная форма приведенного выше уравнения в Python с вероятностью TensorFlow реализуется следующим образом:

     лямбда t, x: tf.math.sin(t) + tf.constant(3.) * tf.math.cos(tf.constant(2.) * t) - x 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfp.math.ode.BDF :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    импортировать tensorflow_probability как tfp
    ode_fn = лямбда t, x: tf.math.sin(t) + tf.constant(3.) * tf.math.cos(tf.constant(2.) * t) - x
    an_sol = lambda t : (1./2.) * np.sin(t) - (1./2.) * np.cos(t) + \
                        (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
                        (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=10.
    t_nsamples=100
    t_space = np. linspace (t_begin, t_end, t_nsamples)
    t_init = tf.constant (t_begin)
    x_init = tf.constant (0.)
    x_an_sol = an_sol(t_space)
    num_sol = tfp.math.ode.BDF().solve(ode_fn, t_init, x_init,
    solution_times = tfp.math.ode.ChosenBySolver (tf.constant (t_end))
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(num_sol.times, num_sol.states, ширина линии = 1, метка = 'числовой')
    plt.title('ODE IVP 1-го порядка, решенная с помощью TensorFlow Probability with BDF')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным по tfp.math.ode.BDF

    .

    TorchDiffEq

    TorchDiffEq использует функцию torchdiffeq.odeint . численно решить обыкновенное дифференциальное уравнение первого порядка первого порядка с начальным значением.
    Явная форма приведенного выше уравнения в Python с Torch реализована следующим образом:

     лямбда t, x: torch.sin(t) + 3. * torch.cos(2. * t) - x 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью torchdiffeq.odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из torchdiffeq импортировать odeint
    ode_fn = лямбда t, x: torch.sin(t) + 3. * torch.cos(2. * t) - x
    an_sol = lambda t : (1./2.) * np.sin(t) - (1./2.) * np.cos(t) + \
                        (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
                        (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=10.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = факел.тензор ([0.])
    x_an_sol = an_sol(t_space)
    x_num_sol = odeint (ode_fn, x_init, torch.tensor (t_space))
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt. plot(t_space, x_num_sol, ширина линии=1, метка='числовой')
    plt.title('ODE IVP 1-го порядка, решенная с помощью TorchDiffEq')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным с помощью torchdiffeq.odeint .

    TensorFlowDiffEq

    TensorFlowDiffEq — это библиотека, которая воспроизводит с помощью TensorFlow то, что TorchDiffEq достигает с помощью Torch. TensorFlowDiffEq использует функцию tfdiffeq.odeint для численного решения обычных дифференциальных уравнений первого порядка с начальным значением.
    Явная форма приведенного выше уравнения в Python с Tensorflow реализована следующим образом:

     лямбда t, x: tf.math.sin(t) + 3. * tf.math.cos(2. * t) - x 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfdiffeq. odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    из tfdiffeq импортировать odeint
    ode_fn = лямбда t, x: tf.math.sin(t) + 3. * tf.math.cos(2. * t) - x
    an_sol = lambda t : (1./2.) * np.sin(t) - (1./2.) * np.cos(t) + \
                        (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
                        (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=10.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = tf.constant([0.])
    x_an_sol = an_sol(t_space)
    x_num_sol = odeint (ode_fn, x_init, tf.constant (t_space))
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, x_num_sol, ширина линии=1, метка='числовой')
    plt.title('ODE IVP 1-го порядка, решенная с помощью TensorFlowDiffEq')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным с помощью tfdiffeq. odeint .

    НейроДиффЭк

    NeuroDiffEq — это библиотека, использующая нейронную сеть, реализованную через PyTorch. численно решить дифференциальное уравнение первого порядка с начальным значением.
    Решатель NeuroDiffEq имеет ряд отличий от предыдущих решателей. Прежде всего дифференциальное уравнение необходимо представить в неявном виде: $$ \begin{уравнение} х'+х-\sin t - 3 \cos 2t = 0 \end{уравнение} $$ кроме того, функция diff(x, t, order) позволяет указать первую производную и, наконец, лямбда (или функция), представляющая уравнение, имеет перевернутые позиции $t$ и $x$. Для только что сказанного неявная форма приведенного выше уравнения в Python с Torch и NeuroDiffEq реализована следующим образом:

     лямбда x, t: diff(x, t, order=1) + x - torch.sin(t) - 3. * torch.cos(2. * t) 

    Библиотека NeuroDiffEq использует neurodiffeq. ode.solve функция аппроксимации решения уравнения; эта функция принимает на вход (опционально) нейронную сеть, алгоритм обучения и другие гиперпараметры.

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с численным решением, полученным с помощью neurodiffeq.ode.solve . в диапазоне $[0.0,2.0]$ со следующими настройками:

    • Полносвязная нейронная сеть (сокращенно FC, также известная как MLP для многослойного персептрона) с 6 слоями, 50 нейронами на слой и Tanh в качестве функции активации;
    • SGD в качестве алгоритма оптимизации со скоростью обучения, установленной на 0,001;
    • Размер пакета
    • установлен на 30, максимальное количество эпох установлено на 1000, флаг лучшей модели установлен на True.
    Примечание : Изменяя структуру сети, изменяя гиперпараметры и используя другой алгоритм, вы, конечно, получаете другое приближение. Примечание : Учитывая стохастический характер фазы обучения, ваши конкретные результаты могут отличаться. Попробуйте запустить тренировочную фазу несколько раз.
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из neurodiffeq импортировать diff
    из neurodiffeq.ode импорт решить
    из neurodiffeq.ode импортировать IVP
    из монитора импорта neurodiffeq.ode
    импортировать neurodiffeq.networks как ndenw
    ode_fn = лямбда x, t: diff(x, t, order=1) + x - torch.sin(t) - 3. * torch.cos(2. * t)
    an_sol = lambda t : (1./2.) * np.sin(t) - (1./2.) * np.cos(t) + \
                        (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
                        (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=2.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = IVP (t_0 = t_begin, x_0 = 0,0)
    x_an_sol = an_sol(t_space)
    net = ndenw.FCNN(n_hidden_layers=6, n_hidden_units=50, actv=torch.nn.Tanh)
    оптимизатор = torch.optim.SGD(net.parameters(), lr=0,001)
    num_sol, loss_sol = решить (ode_fn, x_init, t_min=t_begin, t_max=t_end,
    размер партии = 30,
    макс_эпохи=1000,
    return_best = Верно,
    сеть = сеть,
    оптимизатор = оптимизатор,
    монитор = Монитор (t_min = t_begin, t_max = t_end, check_every = 10))
    x_num_sol = num_sol (t_space, as_type = 'np')
    plt. figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, x_num_sol, ширина линии=1, метка='числовой')
    plt.title('ODE IVP 1-го порядка, решенная с помощью NeuroDiffEq')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным с помощью neurodiffeq.ode.solve .

    График монитора в конце тренировки, выполненной neurodiffeq.ode.solve .

    Система из двух ОДУ первого порядка с ИВП

    Пусть дана следующая система двух обыкновенных дифференциальных уравнений с начальными значениями: $$ \begin{уравнение} \begin{случаи} х' + х - у = 0 \\ у' - 4х + у = 0 \\ х(0)=2 \\ у(0)=0 \end{случаи} \end{уравнение} $$ аналитическое решение которого: $$ \begin{уравнение} \begin{случаи} х (т) = е ^ т + е ^ {- 3 т} \\ у (т) = 2 е ^ т - 2 е ^ {- 3 т} \end{случаи} \end{уравнение} $$ проверяется онлайн через Wolfram Alpha.
    Реализации следующих резолюций требуют явной записи дифференциальных уравнений в формах $x'=F_1(x,y,t)$ и $y'=F_2(x,y,t)$ и тогда два уравнения становятся: $$ \begin{уравнение} \begin{случаи} х' = у - х \\ у' = 4х - у \end{случаи} \end{уравнение} $$ и в матричной форме: $$\left[\begin{matrix} x' \\ y' \end{matrix} \right] = \left[\begin{matrix} -1 & 1 \\ 4 & -1 \end{matrix} \right ] \left[\begin{matrix} x \\ y \end{matrix} \right] $$

    Сципи

    Scipy использует функцию scipy.integrate.solve_ivp . численно решить систему обыкновенных дифференциальных уравнений первого порядка первого порядка с начальными значениями.
    Явная форма приведенной выше пары уравнений в Python с NumPy реализована следующим образом:

     по определению ode_sys(t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4.  * х - у
    вернуть [dx_dt, dy_dt] 

    В качестве альтернативы, система, представленная в матричной форме в Python с помощью Scipy, реализуется следующим образом:
     А = [[-1., 1.],
        [4., -1.]]
    ode_sys = лямбда t, XY : A @ XY 

    Обратите внимание, что второй аргумент представляет собой массив размера два, что соответствует количеству неизвестных функций.
    Ниже приведен пример кода Python, который сравнивает аналитическое решение системы с числовым, полученным с помощью scipy.integrate.solve_ivp :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    из scipy.integrate импортаsolve_ivp
    определение ode_sys (t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4. * х - у
    вернуть [dx_dt, dy_dt]
    an_sol_x = лямбда t: np.exp(t) + np.exp(-3. * t)
    an_sol_y = лямбда t : 2. * np.exp(t) - 2. * np.exp(-3. * t)
    т_начало=0.
    t_конец=5.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    х_инит = 2. 
    у_инит = 0.
    x_an_sol = an_sol_x(t_space)
    y_an_sol = an_sol_y(t_space)
    method = 'RK45' #доступные методы: 'RK45', 'RK23', 'DOP853', 'Radau', 'BDF', 'LSODA'
    num_sol =solve_ivp(ode_sys, [t_begin, t_end], [x_init, y_init], method=method, плотно_выход=True)
    XY_num_sol = num_sol.sol(t_space)
    x_num_sol = XY_num_sol[0].T
    y_num_sol = XY_num_sol[1].T
    plt.figure()
    plt.plot(t_space, x_an_sol, '--', linewidth=2, label='аналитический x')
    plt.plot(t_space, y_an_sol, '--', linewidth=2, label='аналитический y')
    plt.plot(t_space, x_num_sol, ширина линии=1, метка='числовой x')
    plt.plot (t_space, y_num_sol, ширина линии = 1, метка = 'числовой y')
    plt.title('Система из 2 ОДУ 1-го порядка IVP, решенная SciPy с методом =' + метод)
    plt.xlabel('т')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.
    Вот ссылка на вариант формы матрицы на GitHub.

    Сравнение аналитического решения системы с численным решением, полученным с помощью scipy. integrate.solve_ivp .

    Вероятность TensorFlow

    TensorFlow Probability использует класс tfp.math.ode.BDF . численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями.
    Явная форма приведенной выше пары уравнений в Python с вероятностью TensorFlow реализуется следующим образом:

     по определению ode_sys(t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4. * х - у
    вернуть [dx_dt, dy_dt] 

    В качестве альтернативы система, представленная в матричной форме в Python с вероятностью TensorFlow, реализуется следующим образом:
     A = tf.constant([[-1., 1.], [4., -1.]])
    ode_sys = лямбда t, XY : tf.linalg.matvec(A, XY) 

    Обратите внимание, что второй аргумент представляет собой массив размера два, что соответствует количеству неизвестных функций.
    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfp. math.ode.BDF :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    импортировать tensorflow_probability как tfp
    определение ode_sys (t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4. * х - у
    вернуть [dx_dt, dy_dt]
    an_sol_x = лямбда t: np.exp(t) + np.exp(-3. * t)
    an_sol_y = лямбда t : 2. * np.exp(t) - 2. * np.exp(-3. * t)
    т_начало=0.
    t_конец=5.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    t_init = tf.constant (t_begin)
    x_init = tf.constant(2.)
    y_init = tf.constant(0.)
    x_an_sol = an_sol_x(t_space)
    y_an_sol = an_sol_y(t_space)
    num_sol = tfp.math.ode.BDF().solve(ode_sys, t_init, [x_init, y_init],
    solution_times = tfp.math.ode.ChosenBySolver (tf.constant (t_end))
    plt.figure()
    plt.plot(t_space, x_an_sol, '--', linewidth=2, label='аналитический x')
    plt.plot(t_space, y_an_sol, '--', linewidth=2, label='аналитический y')
    plt.plot(num_sol.times, num_sol.states[0], linewidth=1, label='числовой x')
    plt. plot(num_sol.times, num_sol.states[1], linewidth=1, label='числовой y')
    plt.title('Система двух ОДУ 1-го порядка IVP, решаемая с помощью TFP с BDF')
    plt.xlabel('т')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.
    Вот ссылка на вариант формы матрицы на GitHub.

    Сравнение аналитического решения системы с численным решением, полученным по tfp.math.ode.BDF

    .

    TorchDiffEq

    TorchDiffEq использует функцию torchdiffeq.odeint . численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями.
    Явная форма приведенной выше пары уравнений в Python с Torch реализуется следующим образом:

     по определению ode_sys(t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= torch.Tensor([- x + y])
    dy_dt= torch.Tensor([4. * x - y])
    вернуть torch.cat([dx_dt, dy_dt]) 

    Альтернативно, система, представленная в матричной форме в Python с Torch, реализуется следующим образом:
     A = torch. Tensor([[-1., 1.],
                      [4., -1.]])
    ode_sys = лямбда t, XY : A @ XY 

    Обратите внимание, что второй аргумент представляет собой массив размера два, что соответствует количеству неизвестных функций.
    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью torchdiffeq.odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из torchdiffeq импортировать odeint
    определение ode_sys (t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= torch.Tensor([- x + y])
    dy_dt= torch.Tensor([4. * x - y])
    вернуть torch.cat([dx_dt, dy_dt])
    an_sol_x = лямбда t: np.exp(t) + np.exp(-3. * t)
    an_sol_y = лямбда t : 2. * np.exp(t) - 2. * np.exp(-3. * t)
    т_начало=0.
    t_конец=5.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = факел.Tensor([2.])
    y_init = факел.Тензор([0.])
    x_an_sol = an_sol_x(t_space)
    y_an_sol = an_sol_y(t_space)
    num_sol = odeint(ode_sys, torch. cat([x_init, y_init]), torch.Tensor(t_space)).numpy()
    plt.figure()
    plt.plot(t_space, x_an_sol, '--', linewidth=2, label='аналитический x')
    plt.plot(t_space, y_an_sol, '--', linewidth=2, label='аналитический y')
    plt.plot(t_space, num_sol[:,0], linewidth=1, label='числовой x')
    plt.plot(t_space, num_sol[:,1], linewidth=1, label='числовой y')
    plt.title('Система двух ОДУ 1-го порядка IVP, решенная с помощью TorchDiffEq')
    plt.xlabel('т')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.
    Вот ссылка на вариант формы матрицы на GitHub.

    Сравнение аналитического решения системы с численным решением, полученным с помощью torchdiffeq.odeint .

    TensorFlowDiffEq

    TensorFlowDiffEq использует функцию tfdiffeq.odeint численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями.
    Явная форма приведенной выше пары уравнений в Python с TensorFlow реализуется следующим образом:

     по определению ode_sys(t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4.  * х - у
    вернуть tf.stack([dx_dt, dy_dt]) 

    В качестве альтернативы система, представленная в матричной форме в Python с TensorFlow, реализуется следующим образом:
     A = tf.constant([[-1., 1.],
                     [4., -1.]],
                     dtype=tf.float64)
    ode_sys = лямбда t, XY : A @ XY 

    Обратите внимание, что второй аргумент представляет собой массив размера два, что соответствует количеству неизвестных функций.
    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfdiffeq.odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    из tfdiffeq импортировать odeint
    определение ode_sys (t, XY):
    х=ХУ[0]
    у=ХУ[1]
    dx_dt= - х + у
    dy_dt= 4. * х - у
    вернуть tf.stack([dx_dt, dy_dt])
    an_sol_x = лямбда t: np.exp(t) + np.exp(-3. * t)
    an_sol_y = лямбда t : 2. * np.exp(t) - 2. * np.exp(-3.  * t)
    т_начало=0.
    t_конец=5.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = tf.constant([2.])
    y_init = tf.constant([0.])
    x_an_sol = an_sol_x(t_space)
    y_an_sol = an_sol_y(t_space)
    num_sol = odeint(
        ode_sys,
        tf.convert_to_tensor([x_init, y_init], dtype=tf.float64),
        tf.constant(t_space)).numpy()
    plt.figure()
    plt.plot(t_space, x_an_sol, '--', linewidth=2, label='аналитический x')
    plt.plot(t_space, y_an_sol, '--', linewidth=2, label='аналитический y')
    plt.plot(t_space, num_sol[:,0], linewidth=1, label='числовой x')
    plt.plot(t_space, num_sol[:,1], linewidth=1, label='числовой y')
    plt.title('Система двух ОДУ 1-го порядка IVP, решенная с помощью TensorFlowDiffEq')
    plt.xlabel('т')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.
    Вот ссылка на вариант формы матрицы на GitHub.

    Сравнение аналитического решения системы с численным решением, полученным с помощью tfdiffeq.odeint .

    НейроДиффЭк

    NeuroDiffEq — это библиотека, использующая нейронную сеть, реализованную через PyTorch. численно решить систему дифференциальных уравнений с начальными значениями.
    Как было сказано выше, решатель NeuroDiffEq имеет ряд отличий от предыдущих решателей. Прежде всего систему дифференциальных уравнений необходимо представить в неявном виде: $$ \begin{уравнение} \begin{случаи} х' + х - у = 0 \\ у' - 4х + у = 0 \end{случаи} \end{уравнение} $$ кроме того, функция diff(x, t, order) позволяет указать первую производную от $x$ по $t$ и diff(x, t, order) первая производная от $y$ по $t$. Наконец, лямбда (или функция), представляющая систему, принимает в качестве входных данных три параметра в порядке $x$, $y$ и $t$ соответственно и возвращает массив с размером, равным количеству уравнений (в данном случае двумерных), чтобы вернуть значение левых выражений уравнений.
    Для только что сказанного неявная форма вышеописанной системы на Python с Torch и NeuroDiffEq реализована следующим образом:

     лямбда x, y, t: [diff(x, t, order=1) + x - y, diff(y, t, order=1) - 4. * x + y ] 

    Библиотека NeuroDiffEq использует функцию neurodiffeq.ode.solve_system для аппроксимации решения системы; эта функция принимает на вход (опционально) нейронную сеть, алгоритм обучения и другие гиперпараметры.

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с численным решением, полученным с помощью neurodiffeq.ode.solve_system . в диапазоне $[0.0,2.0]$ со следующими настройками:

    • Полносвязная нейронная сеть (сокращенно FC, также известная как MLP для многослойного персептрона) с 3 слоями, 50 нейронами на слой и SinActv в качестве функции активации;
    • Адам как алгоритм оптимизации со скоростью обучения, установленной на 0,003;
    • Размер пакета
    • установлен на 200, максимальное количество эпох установлено на 1200, флаг лучшей модели установлен на True.
    Примечание : Изменяя структуру сети, изменяя гиперпараметры и используя другой алгоритм, вы, конечно, получаете другое приближение. Примечание : Учитывая стохастический характер фазы обучения, ваши конкретные результаты могут отличаться. Попробуйте запустить тренировочную фазу несколько раз.
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из neurodiffeq импортировать diff
    из neurodiffeq.ode импортаsolv_system
    из neurodiffeq.ode импортировать IVP
    из монитора импорта neurodiffeq.ode
    импортировать neurodiffeq.networks как ndenw
    ode_sys = lambda x, y, t: [diff(x, t, order=1) + x - y, diff(y, t, order=1) - 4. * x + y]
    an_sol_x = лямбда t: np.exp(t) + np.exp(-3. * t)
    an_sol_y = лямбда t : 2. * np.exp(t) - 2. * np.exp(-3. * t)
    т_начало=0.
    t_конец=2.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = IVP (t_0 = t_begin, x_0 = 2.0)
    y_init = IVP (t_0 = t_begin, x_0 = 0,0)
    x_an_sol = an_sol_x(t_space)
    y_an_sol = an_sol_y(t_space)
    размер партии = 200
    сеть = ndenw. FCNN(
    n_input_units=1,
            n_output_units=2,
    n_hidden_layers=3,
    n_hidden_units=50,
    actv=ndenw.SinActv)
    оптимизатор = torch.optim.Adam(net.parameters(), lr=0,003)
     
    num_sol, история = Solve_System(
    ode_system=ode_sys,
    условия=[x_init, y_init],
    t_min=t_начало,
    t_max=t_конец,
    batch_size = размер_пакета,
    макс_эпохи=1200,
    return_best = Верно,
    single_net = сеть,
    оптимизатор = оптимизатор,
    монитор = Монитор (t_min = t_begin, t_max = t_end, check_every = 10))
    num_sol = num_sol (t_space, as_type = 'np')
    plt.figure()
    plt.plot(t_space, x_an_sol, '--', linewidth=2, label='аналитический x')
    plt.plot(t_space, y_an_sol, '--', linewidth=2, label='аналитический y')
    plt.plot(t_space, num_sol[0], linewidth=1, label='числовой x')
    plt.plot(t_space, num_sol[1], linewidth=1, label='числовой y')
    plt.title('Система двух ОДУ IVP 1-го порядка, решенная с помощью NeuroDiffEq')
    plt.xlabel('т')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения с численным решением, полученным с помощью neurodiffeq. {\ frac {-t} {2}} (\ cos {\ sqrt {7} \ frac {t} {2}} + \ frac {\ sin {\ sqrt {7} \frac{t}{2}}}{\sqrt{7}}) $$ проверяется онлайн через Wolfram Alpha.
    Реализации следующих резолюций требуют дифференциального уравнения второго порядка записать в явном виде в виде системы двух уравнений первого порядка следующим образом: $$ \begin{уравнение} \begin{случаи} у=х' \\ у'=F(х, у, т) \end{случаи} \end{уравнение} $$ и тогда исходная задача Коши записывается эквивалентно следующим образом: $$ \begin{уравнение} \begin{случаи} у = х' \\ у'= -у - 2х = 0 \\ х(0)=1 \\ у(0)=0 \end{случаи} \end{уравнение} $$

    Сципи

    Scipy использует функцию scipy. integrate.solve_ivp . численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями, что, в силу сказанного выше, эквивалентно уравнению второго порядка с теми же начальными условиями.
    Явная форма вышеуказанной системы в Python с NumPy реализована следующим образом:

     по определению ode_sys(t, X):
            х=Х[0]
            dx_dt=Х[1]
            d2x_dt2=-dx_dt - 2*х
            вернуть [dx_dt, d2x_dt2] 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью scipy.integrate.solve_ivp :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    из scipy.integrate импортаsolve_ivp
    определение ode_sys (t, X):
    х=Х[0]
    dx_dt=Х[1]
    d2x_dt2=-dx_dt - 2*х
    вернуть [dx_dt, d2x_dt2]
    an_sol_x = лямбда t : \
    np.exp(-t/2.) * (np.cos(np.sqrt(7) * t/2.) + \
    np.sin(np.sqrt(7) * t/2.)/np.sqrt(7. ))
    т_начало=0.
    t_конец=12.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    х_инит = 1.
    dxdt_init = 0.
    x_an_sol = an_sol_x(t_space)
    method = 'RK45' #доступные методы: 'RK45', 'RK23', 'DOP853', 'Radau', 'BDF', 'LSODA'
    num_sol =solve_ivp(ode_sys, [t_begin, t_end], [x_init, dxdt_init], method=method, plot_output=True)
    X_num_sol = num_sol.sol(t_space)
    x_num_sol = X_num_sol[0].T
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, x_num_sol, ширина линии=1, метка='числовой')
    plt.title('ODE IVP 2-го порядка, решенная SciPy с помощью метода =' + метод)
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения уравнения второго порядка с численным решением, полученным с помощью scipy.integrate.solve_ivp .

    Вероятность TensorFlow

    TensorFlow Probability использует класс tfp. math.ode.BDF . численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями, что, в силу сказанного выше, эквивалентно уравнению второго порядка с теми же начальными условиями.
    Явная форма приведенной выше системы на Python с TensorFlow Probability реализована следующим образом:

     по определению ode_sys(t, X):
    х=Х[0]
    dx_dt=Х[1]
    d2x_dt2=-dx_dt - 2*х
    вернуть [dx_dt, d2x_dt2] 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfp.math.ode.BDF :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    импортировать tensorflow_probability как tfp
    определение ode_sys (t, X):
    х=Х[0]
    dx_dt=Х[1]
    d2x_dt2=-dx_dt - 2*х
    вернуть [dx_dt, d2x_dt2]
    an_sol_x = лямбда t : \
    np.exp(-t/2.) * (np.cos(np.sqrt(7) * t/2.) + \
    np.sin(np.sqrt(7) * t/2. )/np.sqrt(7.))
    т_начало=0.
    t_конец=12.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    t_init = tf.constant (t_begin)
    x_init = tf.constant(1.)
    dxdt_init = tf.constant(0.)
    x_an_sol = an_sol_x(t_space)
    num_sol = tfp.math.ode.BDF().solve(ode_sys, t_init, [x_init, dxdt_init],
    solution_times = tfp.math.ode.ChosenBySolver (tf.constant (t_end))
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(num_sol.times, num_sol.states[0], ширина линии=1, метка='числовой')
    plt.title('ODE IVP 2-го порядка решена TFP с BDF')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения уравнения второго порядка с численным решением, полученным по tfp.math.ode.BDF

    .

    TorchDiffEq

    TorchDiffEq использует функцию torchdiffeq.odeint . численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями, что, в силу сказанного выше, эквивалентно уравнению второго порядка с теми же начальными условиями.
    Явная форма вышеуказанной системы в Python с Torch реализована следующим образом:

     по определению ode_sys(t, X):
    х = факел. Тензор ([X [0]])
    dx_dt = факел. Тензор ([X [1]])
    d2x_dt2=факел.Тензор([-dx_dt - 2*x])
    вернуть torch.cat([dx_dt, d2x_dt2]) 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью torchdiffeq.odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из torchdiffeq импортировать odeint
    определение ode_sys (t, X):
    х = факел. Тензор ([X [0]])
    dx_dt = факел. Тензор ([X [1]])
    d2x_dt2=факел.Тензор([-dx_dt - 2*x])
    вернуть torch.cat([dx_dt, d2x_dt2])
    an_sol_x = лямбда t : \
    np. exp(-t/2.) * (np.cos(np.sqrt(7) * t/2.) + \
    np.sin(np.sqrt(7) * t/2.)/np.sqrt(7.))
    т_начало=0.
    t_конец=12.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = факел.Тензор([1.])
    dxdt_init = факел.Тензор([0.])
    x_an_sol = an_sol_x(t_space)
    num_sol = odeint(ode_sys, torch.cat([x_init, dxdt_init]), torch.Tensor(t_space)).numpy()
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, num_sol[:,0], ширина линии=1, метка='числовой')
    plt.title('ODE IVP 2-го порядка, решенная с помощью TorchDiffEq')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения уравнения второго порядка с численным решением, полученным с помощью torchdiffeq.odeint .

    TensorFlowDiffEq

    TensorFlowDiffEq использует функцию tfdiffeq.odeint численно решить систему обыкновенных дифференциальных уравнений первого порядка с начальными значениями, что, в силу сказанного выше, эквивалентно уравнению второго порядка с теми же начальными условиями.
    Явная форма вышеуказанной системы в Python с Tensorflow реализована следующим образом:

     по определению ode_sys(t, X):
    х=Х[0]
    dx_dt=Х[1]
    d2x_dt2=-dx_dt - 2*х
    вернуть tf.stack([dx_dt, d2x_dt2]) 

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с числовым, полученным с помощью tfdiffeq.odeint :
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортировать тензорный поток как tf
    из tfdiffeq импортировать odeint
    определение ode_sys (t, X):
    х=Х[0]
    dx_dt=Х[1]
    d2x_dt2=-dx_dt - 2*х
    вернуть tf.stack([dx_dt, d2x_dt2])
    an_sol_x = лямбда t : \
    np.exp(-t/2.) * (np.cos(np.sqrt(7) * t/2.) + \
    np.sin(np.sqrt(7) * t/2.)/np.sqrt(7.))
    т_начало=0.
    t_конец=12.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = tf.constant([1.])
    dxdt_init = tf.constant([0.])
    x_an_sol = an_sol_x(t_space)
    num_sol = odeint(
    ode_sys,
    tf.convert_to_tensor([x_init, dxdt_init], dtype=tf. float64),
    tf.constant(t_space)).numpy()
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.plot(t_space, num_sol[:,0], ширина линии=1, метка='числовой')
    plt.title('ODE IVP 2-го порядка, решенная с помощью TensorFlowDiffEq')
    plt.xlabel('т')
    plt.ylabel('x')
    plt.legend()
    plt.show()
     
    Вот ссылка на код на GitHub.

    Сравнение аналитического решения второго порядка с численным решением, полученным по tfdiffeq.odeint .

    НейроДиффЭк

    NeuroDiffEq — это библиотека, использующая нейронную сеть, реализованную через PyTorch. численно решить дифференциальное уравнение второго порядка с начальными значениями.
    Решатель NeuroDiffEq имеет ряд отличий от предыдущих решателей. Во-первых, нет необходимости переписывать уравнение второго порядка в эквивалентную ему систему уравнений первого порядка поскольку библиотека изначально поддерживает производные порядка выше единицы, на самом деле функция diff(x, t, order) позволяет указать порядок передачи первой производной = 1 и порядок передачи второй производной = 2.
    Из-за вышесказанного эта библиотека принимает на вход уравнение в неявной форме, а именно: $$ \begin{уравнение} х'' + х' + 2х = 0 \end{уравнение} $$ и имея в виду, что лямбда (или функция), представляющая уравнение, имеет инвертированные $t$ и $x$ по отношению ко всем другим библиотекам, рассмотренным ранее, неявная форма приведенного выше уравнения в Python с Torch и NeuroDiffEq реализована следующим образом:

     ode_fn = лямбда x, t: diff(x, t, порядок=2) + diff(x, t, порядок=1) + 2. * x 

    Библиотека NeuroDiffEq использует функцию neurodiffeq.ode.solve для аппроксимации решения уравнения; эта функция принимает на вход (опционально) нейронную сеть, алгоритм обучения и другие гиперпараметры.

    Ниже приведен пример кода Python, который сравнивает аналитическое решение с численным решением, полученным с помощью neurodiffeq.ode. solve . в диапазоне $[0.0,12.0]$ со следующими настройками:

    • Полносвязная нейронная сеть (сокращенно FC, также известная как MLP для многослойного персептрона) с 6 слоями, 50 нейронами на слой и Tanh в качестве функции активации;
    • Адам как алгоритм оптимизации со скоростью обучения, установленной на 0,002;
    • Размер пакета
    • установлен на 200, максимальное количество эпох установлено на 500, флаг лучшей модели установлен на True.
    Примечание : Изменяя структуру сети, изменяя гиперпараметры и используя другой алгоритм, вы, конечно, получаете другое приближение. Примечание : Учитывая стохастический характер фазы обучения, ваши конкретные результаты могут отличаться. Попробуйте запустить тренировочную фазу несколько раз.
     импортировать numpy как np
    импортировать matplotlib.pyplot как plt
    импортный факел
    из neurodiffeq импортировать diff
    из neurodiffeq. ode импорт решить
    из neurodiffeq.ode импортировать IVP
    из монитора импорта neurodiffeq.ode
    импортировать neurodiffeq.networks как ndenw
    ode_fn = лямбда x, t: diff(x, t, order=1) + x - torch.sin(t) - 3. * torch.cos(2. * t)
    an_sol = lambda t : (1./2.) * np.sin(t) - (1./2.) * np.cos(t) + \
     (3./5.) * np.cos(2.*t) + (6./5.) * np.sin(2.*t) - \
     (1./10.) * np.exp(-t)
    т_начало=0.
    t_конец=2.
    t_nsamples=100
    t_space = np.linspace (t_begin, t_end, t_nsamples)
    x_init = IVP (t_0 = t_begin, x_0 = 0,0)
    x_an_sol = an_sol(t_space)
    net = ndenw.FCNN(n_hidden_layers=6, n_hidden_units=50, actv=torch.nn.Tanh)
    оптимизатор = torch.optim.SGD(net.parameters(), lr=0,001)
    num_sol, loss_sol = решить (ode_fn, x_init, t_min=t_begin, t_max=t_end,
    размер партии = 30,
    макс_эпохи=1000,
    return_best = Верно,
    сеть = сеть,
    оптимизатор = оптимизатор,
    монитор = Монитор (t_min = t_begin, t_max = t_end, check_every = 10))
    x_num_sol = num_sol (t_space, as_type = 'np')
    plt.figure()
    plt.plot (t_space, x_an_sol, '--', ширина линии = 2, метка = 'аналитический')
    plt.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *