Как решать уравнения в питоне

Символьные вычисления средствами Python. Часть1. Основы

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

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

Как преподаватель дисциплины «Компьютерная техника и программирование», в модуле, посвященном программированию на языке Python, я знакомлю студентов с возможностями этого языка для научных исследований. Вашему вниманию представляется цикл статей, в которых можно ознакомиться с символьными вычислениями на Python. Хочу сразу предупредить, что данные статьи не претендуют на абсолютную уникальность, так как собраны на основании материалов из различных источников, их цель – обучить студентов основам символьных вычислений.

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

Примечание. Для сокращения записи во всех следующих примерах не приводится первая строка: from sympy import *

Явное объявление символьных переменных

Для символьных вычислений с помощью модуля SymPy символьные переменные и функции должны быть объявлены как таковые. В программах для математических вычислений, таких как Mathematica или Maple, переменные сразу рассматриваются как символьные. В Python же их необходимо принудительно объявить символьными, и сделать это можно несколькими путями. Самым простым будет использование функций symbols() или var(). Первая функция возвращает ссылку на символьный объект в виде какой-либо переменной. Вторая, без присваивания создает символьную переменную.

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

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

Чтобы создать контейнер для одиночного символа, используем аргумент seq=True:

Определение действительных значений для символьных переменных:

Функция S()

Иногда символьные выражения могут быть проинтерпретированы как числовые константы Python, а не SymPy. Поэтому для объявления символьных переменных, а также для преобразования числовых констант в символьные, применяют функцию S(), например, сравним:

Разница между постоянной Python и символьной состоит в том, что символьная константа может быть вычислена с заданной степенью точности, как показано в следующем примере в сравнении со стандартной функцией round():

Cимвольные имена

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

Имя переменной из пространства имен можно удалить командой del имя1, имя2. :

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

Метод subs(. )

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

Метод subs(. ) используется для вычисления символьного выражения при заданных значениях переменных, например:

Если в методе subs использовать два аргумента, то они интерпретируются как subs(old,new), т.е. старый идентификатор old заменяется новым new. Аргумент метода subs() может быть последовательностью, которая должна содержать пары (old,new), а может быть символьным выражением, например:

Обратим ваше внимание на следующую особенность работы с переменными (символьными и обычными переменными Python). Выполним следующий код:

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

Операции с дробями

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

Функции Rational(числитель, знаменатель) и Integer(. ) используются для создания рациональных дробей без десятичного округления:

Округления вычислений

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

Для любого символьного объекта существует метод evalf(. )(evaluate float), который возвращает его десятичное представление:

В методе evalf([n. ]) можно использовать аргумент, задающий точность результата (n = количество значащих цифр)

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

Если известно, что результат содержит погрешность вычислений, то с помощью опции chop=True метода evalf() ее можно удалить. Очень маленькое значение вещественной или мнимой части результата в этом случае заменяется нулем. Возьмем предыдущий пример:

Бесконечность

После выполнения первой строки from sympy import * становится доступен символ бесконечности – oo (две буквы „o‟), с которым тоже можно выполнять определенные операции:

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

Вывод

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

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

Источник

Решаем систему линейных алгебраических уравнений с Python-пакетом scipy.linalg (не путать с numpy.linalg)

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Аппарат линейной алгебры применяют в самых разных областях — в линейном программировании, эконометрике, в естественных науках. Отдельно отмечу, что этот раздел математики востребован в машинном обучении. Если, например, вам нужно поработать с матрицами и векторами, то, вполне возможно, на каком-то шаге вам придётся решать систему линейных алгебраических уравнений (СЛАУ).

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

Я расскажу про один из таких инструментов — Python-пакет scipy.linalg из библиотеки SciPy, который позволяет быстро и эффективно решать многие задачи с использованием аппарата линейной алгебры.

В этом туториале вы узнаете:

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

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

Установка scipy.linalg

SciPy — это библиотека Python с открытым исходным кодом для научных вычислений: решение СЛАУ, оптимизация, интеграция, интерполяция и обработка сигналов. Помимо linalg, она содержит несколько других пакетов — например, NumPy, Matplotlib, SymPy, IPython и pandas.

Среди прочего, scipy.linalg содержит функции для с работы с матрицами — вычисление определителя, инверсия, вычисление собственных значений и векторов, а также сингулярное разложение.

Чтобы использовать scipy.linalg, вам необходимо установить и настроить библиотеку SciPy. Это можно сделать с помощью дистрибутива Anaconda, а также системы управления пакетами и инсталлятора Conda.

Для начала подготовьте среду выполнения для библиотеки:

Установите необходимые пакеты:

Эта команда может работать долго. Не пугайтесь!

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

Перед открытием Jupyter Notebook вам необходимо зарегистрировать экземпляр conda linalg, чтобы использовать его в качестве ядра при создании ноутбука. Для этого выполните следующую команду:

Теперь можно открыть Jupyter Notebook:

Когда он загрузится в вашем браузере, создайте новый notebook, нажав New linalg:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Чтобы убедиться, что установка библиотеки SciPy прошла успешно, введите в ноутбуке:

NumPy для работы с векторами и матрицами (куда же без него)

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

NumPy — это наиболее популярный пакет для работы с матрицами и векторами в Python. Часто его применяют в сочетании с scipy.linalg. Чтобы начать работу с матрицами и векторами, нужно импортировать пакет NumPy:

Для представления матриц и векторов NumPy использует специальный тип, называемый ndarray. Чтобы создать объект ndarray, вы можете использовать array ().

Например, вам нужно создать следующую матрицу:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Создадим матрицу как набор вложенных списков (векторов-строк):

Заметьте, что приведённый выше вывод (Outp[3]) достаточно наглядно показывает получившуюся матрицу.

И ещё: все элементы матрицы должны и будут иметь один тип. Это можно проверить с помощью dtype.

Здесь элементы являются целыми числами, поэтому их общий тип по умолчанию — int64. Если бы среди них было хотя бы одно число с плавающей точкой, все элементы получили бы тип float64:

Чтобы вывести на экран размерность матрицы, можно использовать метод shape:

Как и ожидалось, размерность матрицы A 3×2, то есть A имеет три строки и два столбца.

При работе с матрицами часто приходится использовать операцию транспонирования, которая столбцы превращает в строки и наоборот. Чтобы транспонировать вектор или матрицу (представленную объектом типа ndarray), вы можете использовать .transpose () или .T. Например:

Чтобы создать вектор, также можно использовать.array(), передав туда список значений в качестве аргумента:

Заметьте, что она выглядит как (3,), а не как (3, 1) или (1, 3). Разработчики NumPy решили сделать отображение размерности векторов так же, как в MATLAB.

Чтобы получить на выходе размерность (1, 3), нужно было бы создать вот такой массив:

Для (3, 1) — вот такой:

Как видите, они не идентичны.

Часто возникает задача из вектора-строки сделать вектор-столбец. Как вариант, можно сначала создать вектор-строку, а потом использовать .reshape() для его преобразования в столбец:

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

Заполнение массивов данными

NumPy позволяет быстро создавать и заполнять массивы. Например, чтобы создать массив, заполненный нулями, можно использовать .zeros():

Точно так же, для создания массивов из единиц можно использовать .ones ():

Элементы созданного массива также получат тип float64.

Создать массив, заполненный случайными числами, поможет .random.rand():

Чтобы получить массив с псевдослучайными значениями, взятыми из множества, сгенерированного по закону нормального распределения с нулевым средним и единичной дисперсией, вы можете использовать .random.randn():

Почему scipy.linalg лучше, чем numpy.linalg

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

В следующем разделе мы применим scipy.linalg для работы с системами линейных алгебраических уравнений. Наконец-то практика!

Формализация и решение задач с scipy.linalg

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

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

Система линейных алгебраических уравнений — это набор из m уравнений, n переменных и вектора свободных членов. Прилагательное «линейных» означает, что все переменные имеют первую степень. Для простоты рассмотрим СЛАУ, где m и n равны 3:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Есть ещё одно требование к «линейности»: коэффициенты K₁ … K₉ и вектор b₁ … b₃ должны быть константами (в математическом смысле этого слова).

В реальных задачах СЛАУ обычно содержат большое количество переменных, что делает невозможным решение систем вручную. К счастью, такие инструменты, как scipy.linalg, могут выполнить эту тяжелую работу.

Задача 1

Мы сначала разберёмся с основами scipy.linalg.solve() на простом примере, а в следующем разделе возьмём задачу посложнее.

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Перейдём к матричной записи нашей системы и введём соответствующие обозначения — A, x и b:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Заметьте: левая часть в исходной записи системы — это обычное произведение матрицы A на вектор x.

Всё, теперь можно переходить к программированию.

Пишем код, используя scipy.linalg.solve()

Входными данными для scipy.linalg.solve() будут матрица A и вектор b. Их нужно представить в виде двух массивов: A — массив 2х2 и b — массив 2х1. В этом нам как раз поможет NumPy. Таким образом, мы можем решить систему так:

Разберём приведённый выше код:

Далее возьмём более сложный пример из реальной практики.

Задача 2: составление плана питания

Это одна из типовых задач, встречающихся на практике: найти пропорции компонентов для получения определенной смеси.

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

Нам даны нормы содержания витаминов в пище:

ПродуктВитамин AВитамин BВитамин CВитамин DВитамин E
1110122
291011
322512
4111213
511192

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

Обозначим оптимальную концентрацию (количество единиц) для продукта 1 как x1, для продукта 2 — как x2 и так далее. Так как мы будем смешивать продукты, то для каждого витамина (столбца таблицы) можно просто просуммировать значения, по всем продуктам. Учитывая, что сбалансированная диета должна включать 170 единиц витамина А, то, используя данные из столбца «Витамин А», составим уравнение:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Аналогичные уравнения можно составить и для витаминов B, C, D, E, объединив всё в систему:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Запишем полученную СЛАУ в матричной форме:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Теперь для решения системы можно использовать scipy.linalg.solve():

Мы получили результат. Давайте его расшифруем. Сбалансированная диета должна включать:

Облачные VPS-серверы с быстрыми NVMе-дисками и посуточной оплатой. Загрузка своего ISO.

Источник

Символьное решение линейных дифференциальных уравнений и систем методом преобразований Лапласа c применением SymPy

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

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

Сам метод Лапласа и его преимущества при решении линейных дифференциальных уравнений и систем широко освещены в литературе, например в популярном издании [1]. В книге метод Лапласа приведен для реализации в лицензионных программных пакетах Mathematica, Maple и MATLAB (что подразумевает приобретение учебным заведением этого ПО) на выбранных автором отдельных примерах.

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

История об авторстве преобразований Лапласа

Преобразования Лапласа (изображения по Лапласу) имеют интересную историю. Впервые интеграл в определении преобразования Лапласа появился в одной из работ Л. Эйлера. Однако в математике общепринято называть методику или теорему именем того математика, который открыл ее после Эйлера. В противном случае существовало бы несколько сотен различных теорем Эйлера.

В данном случае следующим после Эйлера был французский математик Пьер Симон де Лаплас (Pierre Simon de Laplace (1749-1827)). Именно он использовал такие интегралы в своей работе по теории вероятностей. Самим Лапласом не применялись так называемые «операционные методы» для нахождения решений дифференциальных уравнений, основанные на преобразованиях Лапласа (изображениях по Лапласу). Эти методы в действительности были обнаружены и популяризировались инженерами-практиками, особенно английским инженером-электриком Оливером Хевисайдом (1850-1925). Задолго до того, как была строго доказана справедливость этих методов, операционное исчисление успешно и широко применялось, хотя его законность ставилось в значительной мере под сомнение даже в начале XX столетия, и по этой теме велись весьма ожесточенные дебаты.

Функции прямого и обратного преобразования Лапласа

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Эта функция возвращает (F, a, cond), где F(s) есть преобразование Лапласа функции f(t), a Текст программы

Время на обратное визуальное преобразование Лапласа: 2.68 s

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Обратное преобразование Лапласа часто используется при синтезе САУ, где Python может заменить дорогостоящих программных “монстров” типа MathCAD, поэтому приведенное использование обратного преобразования имеет практическое значение.

Преобразование Лапласа от производных высших порядков для решения задачи Коши

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Если a и b — константы, то

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

для всех s, таких, что существуют оба преобразования Лапласа (изображения по Лапласу) функций f(t) и q(t).

Проверим линейность прямого и обратного преобразований Лапласа с помощью ранее рассмотренных функций laplace_transform() и inverse_laplace_transform(). Для этого в качестве примера примем f(t)=sin(3t), q(t)=cos(7t), a=5, b=7 и используем следующую программу.

(7*s**3 + 15*s**2 + 63*s + 735)/((s**2 + 9)*(s**2 + 49))
(7*s**3 + 15*s**2 + 63*s + 735)/((s**2 + 9)*(s**2 + 49))
True
5*sin(3*t) + 7*cos(7*t)
5*sin(3*t) + 7*cos(7*t)

Приведенный код также демонстрирует однозначность обратного преобразования Лапласа.

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

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Повторение этого вычисления дает

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

После конечного числа таких шагов мы получаем следующее обобщение первой теоремы:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

Метод решения линейных дифференциальных уравнений и систем уравнений, основанный на преобразованиях Лапласа, с использованием библиотеки SymPy

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

где Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне— приведенное начальное положение массы, Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне— приведенная начальная скорость массы.

Упрощённая физическая модель, заданная уравнением (4) при ненулевых начальных условиях [1]:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

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

Последовательность решения средствами SymPy следующая:

Получаем:
Версия библиотеки sympy – 1.3

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

При этом учебное значение метода решения сохраняется за счёт необходимости использования системы (5) и перехода в NumPy для исследования решения более производительными методами.

Для дальнейшей демонстрации метода решим систему дифференциальных уравнений:
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне
с начальными условиями Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Упрощённая физическая модель, заданная системой уравнений (6) при нулевых начальных условиях:

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Таким образом, сила f(t) внезапно прилагается ко второй материальной точке заданной массы в момент времени t = 0, когда система находится в покое в ее положении равновесия.

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

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

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

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Рассмотрим решение линейного дифференциального уравнения четвёртого порядка с нулевыми начальными условиями:
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Решим линейное дифференциальное уравнение четвёртого порядка:
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне
с начальными условиями Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне, Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне, Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне.

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Функции для решения ОДУ

Для имеющих аналитическое решение ОДУ и систем ОДУ применяется функция dsolve():
sympy.solvers.ode.dsolve(eq, func=None, hint=’default’, simplify=True, ics=None, xi=None, eta=None, x0=0, n=6, **kwargs)

Давайте сравним производительность функции dsolve() с методом Лапласа. Для примера возьмём следующее дифференциальное уравнение четвёртой степени с нулевыми начальными условиями:
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне
Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Время решения уравнения с использованием функции dsolve(): 1.437 s

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Время решения уравнения с использованием преобразования Лапласа: 3.274 s

Как решать уравнения в питоне. Смотреть фото Как решать уравнения в питоне. Смотреть картинку Как решать уравнения в питоне. Картинка про Как решать уравнения в питоне. Фото Как решать уравнения в питоне

Итак, функция dsolve() (1.437 s) решает уравнение четвёртого порядка быстрее, чем выполняется решение по методу преобразований Лапласа (3.274 s) более чем в два раза. Однако при этом следует отметить, что функция dsolve() не решает системы дифференциальных уравнений второго порядка, например, при решении системы (6) с использованием функция dsolve() возникает ошибка:

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

Для того чтобы найти необходимый метод решения дифференциальных уравнений с помощью функции dsolve(), нужно использовать classify_ode(eq, f(x)), например:

Таким образом, для уравнения eq=Eq(f(x).diff(x,x)+f(x),0) работает любой метод из первого списка:

Для уравнения eq = sin(x)*cos(f(x)) + cos(x)*sin(f(x))*f(x).diff(x) работает любой метод из второго списка:

separable, 1st_exact, almost_linear,
1st_power_series, lie_group, separable_Integral,
1st_exact_Integral, almost_linear_Integral

Чтобы использовать выбранный метод, запись функции dsolve() примет вид, к примеру:

Вывод:

Данная статья ставила своей целью показать, как использовать средства библиотек SciPy и NumPy на примере решения систем линейных ОДУ операторным методом. Таким образом, были рассмотрены методы символьного решения линейных дифференциальных уравнений и систем уравнений методом Лапласа. Проведен анализ производительности этого метода и методов, реализованных в функции dsolve().

Источник

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

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