Как работать с библиотекой SymPy в Python
Сессия близко! Знакомимся с мощным инструментом для решения диффуров, интегралов и матриц.
Иллюстрация: Оля Ежак для Skillbox Media
При решении математических и инженерных задач часто требуется провести аналитические вычисления: найти производную или интеграл, решить систему уравнений или упростить математическое выражение. Сделать это средствами стандартной библиотеки Python довольно тяжело — придётся написать много сложных математических функций.
Но зачем, если к проекту можно подключить SymPy? Вот о ней далее и поговорим.
Из этой статье вы узнаете:
Что такое SymPy
SymPy — это бесплатная библиотека для символьных вычислений на языке Python. В символьных вычислениях компьютер работает с уравнениями и выражениями как с последовательностью символов, тогда как в численных оперирует приближёнными числовыми значениями.
По сравнению с другими Python-библиотеками для математических вычислений, такими как SageMath и CasADi, у SymPy есть ряд преимуществ.
Работа с символьными вычислениями. Как уже было сказано выше, SymPy работает с математическими выражениями и формулами как с последовательностью символов, а не чисел. Это повышает точность математических операций и позволяет сформулировать результаты вычислений в аналитическом виде (с помощью формул, системы выражений и так далее).
Поддержка различных разделов математики: геометрии, тригонометрии, логики и других. В SymPy есть функции для алгебраического упрощения выражений, решения уравнений, дифференцирования, интегрирования, манипуляции с полиномами и матрицами и многое другое.
Лёгкая интеграция с другими библиотеками Python, такими как NumPy и Matplotlib. Вы можете комбинировать символьные вычисления с численными и визуализировать их без предварительной настройки.
Как установить SymPy
Перед тем как начать работу с библиотекой, установите Python на компьютер. Затем откройте терминал или командную строку и установите SymPy с помощью pip:
Подождите, пока процесс завершится. Откройте редактор кода или IDE и проверьте установку:
Если видите на экране номер версии SymPy, значит, библиотека установлена правильно.
Если работаете в среде Anaconda, то для установки библиотеки введите в командной строке следующее:
Основные функции SymPy
Все функции библиотеки подробно описаны в документации. Мы же пройдёмся по самым часто используемым.
Создание символьных переменных и выражений
Символьные переменные создаются с помощью функции symbols():
Аргумент функции — строка с символами, которые станут именами переменных в выражении. В нашем примере x, y, z — это символьные переменные. Обратите внимание: их имена задаются одной строкой через пробел.
Символьные выражения создаются путём комбинирования символьных переменных и арифметических операций:
Этот код создаёт символьные переменные x, y, z и содержащее их символьное выражение expr. Теперь expr можно упрощать, дифференцировать, интегрировать и далее по списку.
Внимание! Здесь и далее символы ** означают операцию возведения в степень.
Арифметические операции. Библиотека SymPy поддерживает основные арифметические операции с символьными выражениями:
Математические константы используются в символьных выражениях для упрощения записи. Разберём несколько из них.
Пи (π) — отношение длины окружности к её диаметру:
Бесконечность (∞) обозначается двумя символами — oo:
Подстановка. С помощью subs() можно подставлять числа в символьные переменные, чтобы получить значение выражений в конкретных точках:
В этом примере команда expr.subs({x: 2, y: 3, z: 1}) заменяет x на 2, y на 3 и z на 1 в выражении expr.
Функцию subs() также можно использовать для подстановки символьных выражений:
Здесь expr.subs({x: 2, y: pi/2}) заменит x на 2, y — на символьное выражение π/2.
Манипуляции с символьными выражениями
SymPy предоставляет множество функций для работы с математическими выражениями: упрощение, раскрытие скобок, факторизация, сокращение дробей и так далее. Рассмотрим некоторые из них подробнее.
Упрощение. Пригодится, когда нужно представить выражение в более удобоваримой форме. Для этого есть функции: simplify, expand, collect и factor.
simplify() анализирует выражение на предмет вызова функций, квадратных корней, радикалов и степеней и инициализирует подходящие процедуры упрощения:
В этом примере simplify() упрощает выражение sin(x)**2 + cos(x)**2 с помощью тождества Пифагора. Обратите внимание, что не мы задаём вариант упрощения — он определяется автоматически.
Функция expand() раскрывает скобки:
В этом примере мы раскрыли куб выражения (x + y).
Вот какой результат вернул компьютер:
Функция collect() группирует переменные в выражениях:
Здесь collect() группирует слагаемые в выражении x*y + x**2 + y + x*y**2 по степеням переменной x.
Результат выполнения кода:
factor() представляет выражение в виде произведения множителей (факторизует его):
Результат:
Все эти методы можно и нужно комбинировать, чтобы получить необходимый результат.
Решаем уравнения и системы уравнений
В SymPy можно решать уравнения с символьными переменными и их системы — с помощью функций Eq() и solve().
Уравнения
Допустим, мы хотим решить уравнение x**2 + y**2 = 1. Чтобы составить его, нам понадобится функция Eq():
Решить полученное уравнение можно с помощью функции solve():
Код вернёт два решения квадратного уравнения в виде списка:
Системы уравнений
Добавим в нашу программу ещё одну символьную переменную (z) и построим систему уравнений:
Делается это с помощью той же функции Eq():
Теперь решим её с помощью уже знакомой функции solve():
Программа вернёт значения переменных x, y, z, при которых выполняется система уравнений:
Дифференциальные уравнения
С SymPy можно решать даже диффуры. Для этого в ней есть функция dsolve().
Давайте познакомимся с её работой на примере уравнения y’ = x**2 − y с начальным условием y(0) = 1:
На экране увидим результат — символьное выражение:
Операции с матрицами
Есть в SymPy и инструменты линейной алгебры. Например, для создания матриц, сложения, вычитания и прочих действий с ними используют класс Matrix.
Как создать матрицу
Для этого создайте объект Matrix, передав в него символы для заполнения матрицы:
Результат работы кода — матрица 2×2:
Сложение, вычитание и умножение матриц
Арифметические операции над матрицами в SymPy можно производить так же, как и над обычными числами, — используя арифметические операторы +, - и *:
Вот что выведет программа:
Продолжим наш код:
Результат выполнения:
Визуализация
Результаты вычислений, полученных с помощью SymPy, можно визуализировать в виде графиков. Однако сама библиотека подходит для этого плохо, так как ориентирована именно на проведение символьных вычислений. Для визуализации результатов обычно используют другие библиотеки, например Matplotlib.
Читайте также:
Построим график функции sin(x)/x.
В этом примере с использованием SymPy создаётся символьная переменная x и определяется функция y = sin(x)/x. Перед тем как построить график с помощью Matplotlib, функцию нужно привести к виду, понятному для библиотеки. Мы сделали это с помощью метода lambdify.
Получили такой график:
Всё получилось. График функции соответствует математическим ожиданиям.
Что запомнить
Подведём итоги и вспомним, что сегодня узнали:
- Библиотека SymPy используется для символьных вычислений, где формулы — это не только инструменты решения конкретных задач, но также объекты анализа математических структур.
- В SymPy можно работать с символами и переменными, строить выражения, не привязанные к конкретным числам. Это полезно при работе с матрицами, решении уравнений и выполнении математических преобразований.
- Библиотека предоставляет средства для символьного дифференцирования и интегрирования: можно находить производные и интегралы сложных функций, решать дифференциальные уравнения. Это важно при решении физических, инженерных, финансовых и других задач.
- Чтобы визуализировать результаты численных и символьных вычислений, используйте SymPy совместно с библиотеками для построения графиков — Matplotlib, Seaborn и другими.