SymPy - SymPy
Разработчики) | Команда разработчиков SymPy |
---|---|
изначальный выпуск | 2007 |
Стабильный выпуск | 1.6.2[1] / 9 августа 2020 |
Репозиторий | |
Написано в | Python |
Операционная система | Кроссплатформенность |
Тип | Система компьютерной алгебры |
Лицензия | Новая лицензия BSD |
Интернет сайт | www |
SymPy является Открытый исходный код Python библиотека за символьное вычисление. Он предоставляет возможности компьютерной алгебры либо как отдельное приложение, как библиотека для других приложений, либо в Интернете как SymPy Live или же SymPy Gamma. SymPy прост в установке и проверке, поскольку он полностью написан на Python с небольшими зависимостями.[2][3][4] Эта простота доступа в сочетании с простой и расширяемой кодовой базой на хорошо известном языке делает SymPy системой компьютерной алгебры с относительно низким барьером для входа.
SymPy включает в себя функции от базовой символьной арифметики до исчисления, алгебры и т. Д. дискретная математика и квантовая физика. Он может форматировать результат вычислений как Латекс код.[2][3]
SymPy - это бесплатно программное обеспечение и под лицензией Новая лицензия BSD. Ведущие разработчики - Ондржей Чертик и Аарон Мерер. Его основал в 2005 году Ондржей Чертик.[5]
Функции
Библиотека SymPy разделена на ядро с множеством дополнительных модулей.
В настоящее время ядро SymPy содержит около 260000 строк кода.[6] (также включает исчерпывающий набор самотестирования: более 100 000 строк в 350 файлах, начиная с версии 0.7.5), и его возможности включают:[2][3][7][8][9]
Основные возможности
- Базовая арифметика: *, /, +, -, **
- Упрощение
- Расширение
- Функции: тригонометрические, гиперболические, экспоненциальные, корни, логарифмы, абсолютное значение, сферические гармоники, факториалы и гамма-функции, дзета-функции, полиномы, гипергеометрические, специальные функции, ...
- Замена
- Произвольная точность целые числа, рациональные числа и числа с плавающей запятой
- Некоммутативные символы
- Сопоставление с образцом
Полиномы
- Основы арифметики: разделение, gcd, ...
- Факторизация
- Факторизация без квадратов
- Базы Грёбнера
- Разложение на частичную дробь
- Результат
Исчисление
- Пределы
- Дифференциация
- Интеграция: Реализовано Риш – Норман эвристический
- Серия Тейлор (Серия Laurent )
Решение уравнений
Дискретная математика
- Биномиальные коэффициенты
- Итоги
- Товары
- Теория чисел: генерация простых чисел, проверка простоты, целочисленная факторизация, ...
- Логические выражения
- Логическое объяснение[10]
Матрицы
- Основы арифметики
- Собственные значения /собственные векторы
- Детерминанты
- Инверсия
- Решение
Геометрия
- Точки, линии, лучи, сегменты, эллипсы, круги, многоугольники, ...
- Перекрестки
- Касательность
- Сходство
Сюжет
Обратите внимание, что для построения графика требуется внешний matplotlib или же Пиглет модуль.
- Координатные модели
- Построение геометрических объектов
- 2D и 3D
- Интерактивный интерфейс
- Цвета
- Анимации
Физика
- Единицы
- Классическая механика
- Механика сплошной среды[11]
- Квантовая механика
- Гауссова оптика
- Алгебра Паули
Статистика
Комбинаторика
- Перестановки
- Комбинации
- Перегородки
- Подмножества
- Группа перестановок: Многогранник, Рубик, Симметричный, ...
- Последовательность Прюфера и Коды Грея
Печать
- Довольно-полиграфический: Форматирование ASCII / Unicode, Латекс
- Генерация кода: C, Фортран, Python
Связанные проекты
- SageMath: альтернатива с открытым исходным кодом Mathematica, Клен, MATLAB, и Магма (SymPy включен в Sage)
- SymEngine: переписывание ядра SymPy на C ++ с целью повышения его производительности. В настоящее время ведется работа по превращению SymEngine в основной движок Sage.
- mpmath: библиотека Python для арифметики с плавающей запятой произвольной точности
- SympyCore: еще одна система компьютерной алгебры Python
- SfePy: Программное обеспечение для решения систем связанных дифференциальных уравнений в частных производных (PDE) методом конечных элементов в 1D, 2D и 3D.
- Gалгебра: Геометрическая алгебра модуль (ранее sympy.galgebra).
- Квамеон: Квантовый Монте-Карло в Python.
- Lcapy: Экспериментальный пакет Python для обучения анализ линейных цепей.
- Проект LaTeX Expression: Easy LaTeX набор алгебраических выражений в символьной форме с автоматической подстановкой и вычислением результата.
- Символьное статистическое моделирование: Добавление статистических операций к сложным физическим моделям.
- Диофант: форк SymPy, начатый Сергеем Кирпичевым
Зависимости
Начиная с версии 1.0, SymPy имеет пакет mpmath в качестве зависимости.
Есть несколько дополнительных зависимостей, которые могут расширить его возможности:
- gmpy: Если установлен gmpy, модуль полиномов SymPy автоматически будет использовать его для более быстрых типов заземления. Это может повысить производительность некоторых операций в несколько раз.
- matplotlib: Если установлен matplotlib, SymPy может использовать его для построения графиков.
- Пиглет: Альтернативный пакет для построения графиков.
Примеры использования
Довольно-полиграфический
Sympy позволяет форматировать выходные данные в более привлекательный формат с помощью pprint
функция. В качестве альтернативы init_printing ()
метод включит красивую печать, поэтому pprint
не нужно называть. Хорошая печать будет использовать символы Unicode, если они доступны в текущей среде, в противном случае он вернется к ASCII символы.
>>> из симпатичный импорт pprint, init_printing, Символ, грех, потому что, exp, sqrt, серии, интеграл, Функция>>>>>> Икс = Символ("Икс")>>> у = Символ("у")>>> ж = Функция('f')>>> # pprint по умолчанию будет использовать Unicode, если он доступен>>> pprint( Икс**exp(Икс) ) ⎛ x⎞ ⎝ℯ ⎠Икс >>> # Вывод без юникода>>> pprint(интеграл(ж(Икс), Икс), use_unicode=Ложь) / | | f (x) dx | / >>> # Сравните с тем же выражением, но на этот раз включен юникод>>> pprint(интеграл(ж(Икс), Икс), use_unicode=Истинный)⌠ ⎮ f (x) dx⌡ >>> # В качестве альтернативы, вы можете вызвать init_printing () один раз и красиво напечатать без функции pprint.>>> init_printing()>>> sqrt(sqrt(exp(Икс))) ____4 ╱ х ╲╱ ℯ >>> (1/потому что(Икс)).серии(Икс, 0, 10) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064
Расширение
1 >>> из симпатичный импорт init_printing, Символ, расширять 2 >>> init_printing() 3 >>> 4 >>> а = Символ('а') 5 >>> б = Символ('b') 6 >>> е = (а + б)**3 7 >>> е 8 (а + б) ³ 9 >>> е.расширять()10 a³ + 3⋅a²⋅b + 3⋅a⋅b² + b³
Пример произвольной точности
>>> из симпатичный импорт Рациональный, pprint>>> е = 2**50 / Рациональный(10)**50>>> pprint(е)1/88817841970012523233890533447265625
Дифференциация
>>> из симпатичный импорт init_printing, символы, пер, разница>>> init_printing()>>> Икс, у = символы('x y')>>> ж = Икс**2 / у + 2 * Икс - пер(у)>>> разница(ж, Икс) 2⋅x ─── + 2 у >>> разница(ж, у) 2 х 1 - ── - ─ 2 года у>>> разница(разница(ж, Икс), у) -2⋅x ──── 2 у
Сюжет
>>> из симпатичный импорт символы, потому что>>> из sympy.plotting импорт plot3d>>> Икс, у = символы('x y')>>> plot3d(потому что(Икс*3)*потому что(у*5)-у, (Икс, -1, 1), (у, -1, 1))<sympy.plotting.plot.Plot object at 0x3b6d0d0>
Пределы
>>> из симпатичный импорт init_printing, Символ, предел, sqrt, оо>>> init_printing()>>> >>> Икс = Символ('Икс')>>> предел(sqrt(Икс**2 - 5*Икс + 6) - Икс, Икс, оо)-5/2>>> предел(Икс*(sqrt(Икс**2 + 1) - Икс), Икс, оо)1/2>>> предел(1/Икс**2, Икс, 0)∞>>> предел(((Икс - 1)/(Икс + 1))**Икс, Икс, оо) -2ℯ
Дифференциальные уравнения
>>> из симпатичный импорт init_printing, Символ, Функция, Уравнение, dsolve, грех, разница>>> init_printing()>>>>>> Икс = Символ("Икс")>>> ж = Функция("е")>>>>>> экв = Уравнение(ж(Икс).разница(Икс), ж(Икс))>>> эквd ── (е (х)) = е (х)dx >>> >>> dsolve(экв, ж(Икс)) Иксf (x) = C₁⋅ℯ>>>>>> экв = Уравнение(Икс**2*ж(Икс).разница(Икс), -3*Икс*ж(Икс) + грех(Икс)/Икс)>>> экв 2 г грех (х)х ⋅── (f (x)) = -3⋅x⋅f (x) + ────── dx x >>>>>> dsolve(экв, ж(Икс)) C₁ - cos (x)f (x) = ─────────── x³
Интеграция
>>> из симпатичный импорт init_printing, интегрировать, Символ, exp, потому что, Эрф>>> init_printing()>>> Икс = Символ('Икс')>>> # Полиномиальная функция>>> ж = Икс**2 + Икс + 1>>> ж 2 х + х + 1>>> интегрировать(ж,Икс) 3 2 х х ── + ── + x3 2 >>> # Рациональная функция>>> ж = Икс/(Икс**2+2*Икс+1)>>> ж Икс ──────────── 2 х + 2⋅x + 1>>> интегрировать(ж, Икс) 1 журнал (x + 1) + ───── х + 1>>> # Экспоненциально-полиномиальные функции>>> ж = Икс**2 * exp(Икс) * потому что(Икс)>>> ж 2 х х ⋅ℯ ⋅cos (х)>>> интегрировать(ж, Икс) 2 х 2 х х х х ⋅ℯ ⋅sin (x) x ⋅ℯ ⋅cos (x) x ℯ ⋅sin (x) ℯ ⋅cos (x)───────────── + ───────────── - x⋅ℯ ⋅sin (x) + ───────── - ───── ──── 2 2 2 2 >>> # Неэлементарный интеграл>>> ж = exp(-Икс**2) * Эрф(Икс)>>> ж 2 -Икс ℯ ⋅erf (х)>>> интегрировать(ж, Икс) ___ 2 ╲╱ π erf (х)───────────── 4
Серии
>>> из симпатичный импорт Символ, потому что, грех, pprint>>> Икс = Символ('Икс')>>> е = 1/потому что(Икс)>>> pprint(е) 1 ──────cos (x)>>> pprint(е.серии(Икс, 0, 10)) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064 >>> е = 1/грех(Икс)>>> pprint(е) 1 ──────грех (х)>>> pprint(е.серии(Икс, 0, 4)) 3 1 х 7⋅x ⎛ 4⎞─ + ─ + ──── + O⎝x ⎠х 6 360
Логическое объяснение
Пример 1
>>> из симпатичный импорт *>>> Икс = Символ('Икс')>>> у = Символ('y')>>> факты = Q.положительный(Икс), Q.положительный(у)>>> с предполагая(*факты):... Распечатать(просить(Q.положительный(2 * Икс + у)))Истинный
Пример 2
>>> из симпатичный импорт *>>> Икс = Символ('Икс')>>> # Предположение о x>>> факт = [Q.основной(Икс)]>>> с предполагая(*факт):... Распечатать(просить(Q.рациональный(1 / Икс)))Истинный
Смотрите также
Рекомендации
- ^ «Релизы - симпи / симпы». Получено 10 августа 2020 - через GitHub.
- ^ а б c "Домашняя страница SymPy". Получено 2014-10-13.
- ^ а б c Джойнер, Дэвид; Чертик, Ондржей; Мерер, Аарон; Грейнджер, Брайан Э. (2012). «Системы компьютерной алгебры с открытым исходным кодом: SymPy». ACM-коммуникации в компьютерной алгебре. 45 (3/4): 225–234. Дои:10.1145/2110170.2110185.
- ^ Мерер, Аарон; Смит, Кристофер П .; Папроцкий, Матеуш; Чертик, Ондржей; Кирпичев, Сергей Б .; Роклин, Мэтью; Кумар, AMiT; Иванов, Серджиу; Мур, Джейсон К. (02.01.2017). «SymPy: символьные вычисления в Python» (PDF). PeerJ Компьютерные науки. 3: e103. Дои:10.7717 / peerj-cs.103. ISSN 2376-5992.
- ^ https://github.com/sympy/sympy/wiki/SymPy-vs.-Mathematica
- ^ «Статистика проекта Sympy на Open HUB». Получено 2014-10-13.
- ^ Геде, Гилберт; Peterson, Dale L .; Нанджангуд, Ангадх; Мур, Джейсон К .; Хаббард, Монт (2013). «Ограниченная многотельная динамика с Python: от генерации символьных уравнений до публикации». ASME 2013 Международные технические конференции по проектированию и проектированию, Конференция по компьютерам и информации в инженерии. Американское общество инженеров-механиков: V07BT10A051. Дои:10.1115 / DETC2013-13470. ISBN 978-0-7918-5597-3.
- ^ Роклин, Мэтью; Террел, Энди (2012). «Символьная статистика с помощью SymPy». Вычислительная техника в науке и технике. 14 (3): 88–93. Дои:10.1109 / MCSE.2012.56.
- ^ Асиф, Муштак; Олауссен, Кори (2014). «Автоматический генератор кода для интеграторов высшего порядка». Компьютерная физика Коммуникации. 185 (5): 1461–1472. arXiv:1310.2111. Bibcode:2014CoPhC.185.1461M. Дои:10.1016 / j.cpc.2014.01.012.
- ^ «Модуль предположений - документация SymPy 1.4». docs.sympy.org. Получено 2019-07-05.
- ^ «Механика сплошной среды - документация SymPy 1.4». docs.sympy.org. Получено 2019-07-05.