Импортируйте функцию sin из модуля math с присвоением ей псевдонима sinus

Обновлено: 07.07.2024

В SymPy есть разные функции, которые применяются в сфере символьных вычислений, математического анализа, алгебры, дискретной математики, квантовой физики и так далее. SymPy может представлять результат в разных форматах: LaTeX, MathML и так далее. Распространяется библиотека по лицензии New BSD. Первыми эту библиотеку выпустили разработчики Ondřej Čertík и Aaron Meurer в 2007 году. Текущая актуальная версия библиотеки — 1.6.2.

Вот где применяется SymPy:

  • Многочлены
  • Математический анализ
  • Дискретная математика
  • Матрицы
  • Геометрия
  • Построение графиков
  • Физика
  • Статистика
  • Комбинаторика

Установка SymPy

Для работы SymPy требуется одна важная библиотека под названием mpmath . Она используется для вещественной и комплексной арифметики с числами с плавающей точкой произвольной точности. Однако pip установит ее автоматически при загрузке самой SymPy:

Такие дистрибутивы, как Anaconda, Enthough, Canopy и другие, заранее включают SymPy. Чтобы убедиться в этом, достаточно ввести в интерактивном режиме команду:

Исходный код можно найти на GitHub.

Список функций

Теоретико-числовые функции и функции представления

math.ceil() Функция округляет аргумент до большего целого числа.

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

💭 Можете подставить числа в формулу, и самостоятельно проверить правильность решения.

math.copysign() Функция принимает два аргумента. Возвращает первый аргумент, но со знаком второго.

print(math.copysign(-6, 2)) > 6.0

math.fabs() Функция возвращает абсолютное значение аргумента:

math.floor() Антагонист функции ceil() . Округляет число до ближайшего целого, но в меньшую сторону.

math.fmod(a, b) Считает остаток от деления a на b . Является аналогом оператора " % " с точностью до типа возвращаемого значения.

print(math.fmod(75, 4)) > 3.0

math.frexp(num) Возвращает кортеж из мантиссы и экспоненты аргумента. Формула:

, где M – мантисса, E – экспонента.

math.fsum() Вычисляет сумму элементов итерируемого объекта. Например, вот так она работает для списка:

summable_list = [1, 2, 3, 4, 5] print(math.fsum(summable_list)) > 15.0

math.gcd(a, b) Возвращает наибольший общий делитель a и b . НОД – это самое большое число, на которое a и b делятся без остатка.

a = 5 b = 15 print(math.gcd(a, b)) > 5

math.isclose(x, y) Функция возвращает True , если значения чисел x и y близки друг к другу, и False в ином случае. Помимо пары чисел принимает ещё два необязательных именованных аргумента:

  • rel_tol – максимально допустимая разница между числами в процентах;
  • abs_tol – минимально допустимая разница.

math.isfinite() Проверяет, является ли аргумент NaN , False или же бесконечностью. True , если не является, False – в противном случае.

math.isinf() True , если аргумент – положительная/отрицательная бесконечность. False – в любом другом случае.

not_inf = 42 inf = math.inf print(math.isinf(not_inf)) > False print(math.isinf(inf)) > True

math.isnan() Возврат True , если аргумент – не число ( nan ). Иначе – False .

not_nan = 0 nan = math.nan print(math.isnan(not_nan)) > False print(math.isnan(nan)) > True

math.isqrt() Возвращает целочисленный квадратный корень аргумента, округлённый вниз.

math.ldexp(x, i) Функция возвращает значение по формуле:

возвращаемое значение = x * (2 ** i) print(math.ldexp(3, 2)) > 12.0

math.modf() Результат работы modf() – это кортеж из двух значений:

  1. Дробная часть аргумента;
  2. Целая часть аргумента;

math.perm(n, k) Возвращает число размещений из n по k . Формула:

Задача : Посчитать количество вариантов распределения трёх билетов на концерт Стаса Михайлова для пяти фанатов.

print(math.perm(5, 3)) > 60

Целых 60 способов! Главное – не запутаться в них, и не пропустить концерт любимого исполнителя!

math.prod() Принимает итерируемый объект. Возвращает произведение элементов.

multiple_list = [2, 3, 4] print(math.prod(multiple_list)) > 24

math.remainder(m, n) Возвращает результат по формуле:

Результат = m – x * n,

где x – ближайшее целое к выражению m/n число.

print(math.remainder(55, 6)) > 1.0 print(math.remainder(4, 6)) > -2.0

math.trunc() trunc() вернёт вам целую часть переданного в неё аргумента.

Степенные и логарифмические функции

math.exp(x) Возвращает e в степени x . Более точный аналог pow(math.e, x) .

math.expm1(x) Вычисляет значение выражения exp(x) - 1 и возвращает результат.

print(math.expm1(3)) > 19.085536923187668 print(math.expm1(3) == (math.exp(3) - 1)) > True

math.log() Функция работает, как с одним, так и с двумя параметрами .

1 аргумент: вернёт значение натурального логарифма (основание e ):

2 аргумента: вернёт значение логарифма по основанию, заданному во втором аргументе:

print(math.log(16, 4)) > 2.0

☝️ Помните, это читается, как простой вопрос: "в какую степень нужно возвести число 4 , чтобы получить 16 ". Ответ, очевидно, 2 . Функция log() с нами согласна.

math.log1p() Это натуральный логарифм от аргумента (1 + x) :

print(math.log(5) == math.log1p(4)) > True

math.log2() Логарифм по основанию 2 . Работает точнее, чем math.log(x, 2) .

math.log10() Логарифм по основанию 10 . Работает точнее, чем math.log(x, 10) .

math.pow(a, b) Функция выполняет возведение числа a в степень b и возвращает затем вещественный результат.

Возведение в степень в Python

math.sqrt() Возврат квадратного корня из аргумента

Как извлечь корень в Python?

Тригонометрические функции

math.acos() Функция возвращает арккосинус в радианах:

math.asin() Возврат арксинуса (угол в радианах):

math.atan2(y, x) Функция принимает на вход два аргумента и возвращает арктангенс y/x . Значение будет в радианах. atan2() учитывает четверть, в которой находится точка (x, y) .

print(math.atan2(-12, 13)) > -0.7454194762741583

math.cos() Косинус угла, который следует указывать в радианах:

math.dist(p, q) Функция возвращает значение евклидова расстояния между точками p и q . У точек должны совпадать измерения. В прямоугольной системе координат dist(p, q) эквивалентна следующей формуле:

math.hypot(x, y) Возвращает длину вектора от начала координат до точки, заданной координатами. Иначе – функция вычисляет гипотенузу треугольника c катетами x и y .

print(math.hypot(3, 4)) > 5.0

math.sin() Функция вернёт синус угла. Угол следует задавать в радианах:

math.tan() Тангенс угла. Аргумент указываем в радианах.

Угловые преобразования

math.degrees() Функция переводит радианное значение угла в градусы.

math.radians() Наоборот: из градусов – в радианы.

Гиперболические функции

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

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

Встроенная функция abs(x) в Python возвращает абсолютное значение аргумента x, который может быть целым или числом с плавающей точкой, или же объектом, реализующим функцию __abs__() . Для комплексных чисел функция возвращает их величину. Абсолютное значение любого числового значения -x или +x — это всегда соответствующее положительное +x.

Аргумент x целое число, число с плавающей точкой, комплексное число,
объект, реализующий __abs__()
Возвращаемое
значение
|x| возвращает абсолютное значение входящего аргумента

Константы модуля Math

math.pi Представление математической константы π = 3.141592…. "Пи" — это отношение длины окружности к её диаметру.

math.e Число Эйлера или просто e . Иррациональное число, которое приблизительно равно 2,71828.

math.tau Число τ – это отношение длины окружности к её радиусу. Т.е

import math > print(math.tau) print(math.tau == 2 * math.pi) > True

math.inf Положительная бесконечность.

Для оперирования отрицательной бесконечно большой величиной, используйте -math.inf

Константа math.inf эквивалента выражению float("inf") .

math.nan NaN означает – "не число".

Аналогичная запись: float("nan") .

Функция lambdify()

Функция lambdify() переводит выражения SymPy в функции Python. Если выражение, которое нужно вычислить, затрагивает диапазон значений, то функция evalf() становится неэффективной. Функция lambdify действует как лямбда-функция с тем исключением, что она конвертирует SymPy в имена данной числовой библиотеки, обычно NumPy. По умолчанию же она реализована на основе стандартной библиотеки math.

У выражения может быть больше одной переменной. В таком случае первым аргументом функции является список переменных, а после него — само выражение:

Но чтобы использовать numpy в качестве основной библиотеки, ее нужно передать в качестве аргумента функции lambdify() .

В этой функции использовались два массива numpy: a и b . В случае с ними выполнение гораздо быстрее:

Логические выражения

Булевы функции расположены в модуле sympy.basic.booleanarg . Их можно создать и с помощью стандартных операторов Python: & (And), | (Or),

(Not), а также >> и << . Булевы выражения наследуются от класса Basic .

BooleanTrue.
Эта функция является эквивалентом True из Python. Она возвращает объект-одиночку, доступ к которому можно получить и с помощью S.true .

BooleanFalse.
А эта функция является эквивалентом False . Ее можно достать с помощью S.False .

And.
Функция логического AND оценивает два аргумента и возвращает False , если хотя бы один из них является False . Эта функция заменяет оператор & .

Or.
Оценивает два выражения и возвращает True , если хотя бы одно из них является True . Это же поведение можно получить с помощью оператора | .

Not.
Результат этой функции — отрицание булево аргумента. True, если аргумент является False , и False в противном случае. В Python за это отвечает оператор

Xor.
Логический XOR (исключающий OR) возвращает True, если нечетное количество аргументов равняется True , а остальные — False . False же вернется в том случае, если четное количество аргументов True , а остальные — False . То же поведение работает в случае оператора ^ .

В предыдущем примере один(нечетное число) аргумент является True , поэтому Xor вернет True . Если же количество истинных аргументов будет четным, результатом будет False , как показано дальше.

Nand.
Выполняет логическую операцию NAND. Оценивает аргументы и возвращает True , если хотя бы один из них равен False , и False — если они истинные.

Nor.
Выполняет логическую операцию NOR. Оценивает аргументы и возвращает False , если один из них True , или же True , если все — False .

Хотя SymPy и предлагает операторы ^ для Xor ,

для Not , | для Or и & для And ради удобства, в Python они используются в качестве побитовых. Поэтому если операнды будут целыми числами, результаты будут отличаться.

Equivalent.
Эта функция возвращает отношение эквивалентности. Equivalent(A, B) будет равно True тогда и только тогда, когда A и B оба будут True или False . Функция вернет True , если все аргументы являются логически эквивалентными. В противном случае — False .

Подстановка параметров

Одна из базовых операций в математических выражениях — подстановка. Функция subs() заменяет все случаи первого параметра на второй.

Этот код даст вывод, эквивалентный такому выражению.

Подстановка параметров

А кодом expr.subs(x,a) мы получим туже формулу, но с a вместо x .

Эта функция полезна, когда требуется вычислить определенное выражение. Например, нужно посчитать значения выражения, заменив a на 5 :

Математическая библиотека Python SymPy

Также функция используется для замены подвыражения другим подвыражением. В следующем примере b заменяется на a+b .

Это дает такой вывод:

замена подвыражения другим подвыражением

Что такое модуль числа

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

Т.е. в любом случае, модуль – число большее или равное 0. Поэтому отрицательная длина в примере хитрой учительницы должна была быть взята по модулю:

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

, где z – комплексное число: z = x + i y.

В Python для нахождения модуля числа применяются две функции: fabs() из подключаемой библиотеки math и встроенная функция abs() .

В то время как math.fabs() может оперировать только вещественными аргументами, abs() отлично справляется и с комплексными. Для начала покажем, что abs в python работает строго в соответствии с математическим определением.

Как видно, с вещественными числами всё в порядке. Перейдём к комплексным.

Если вспомнить, что комплексное число выглядит так: z = x + i y, а его модуль вычисляется по формуле:

, то можно без труда посчитать, что sqrt(3**2 + 4**2) действительно равно 5.0 .

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

В этом кроется ещё одно отличие abs() от fabs() . Функция из модуля math всегда приводит аргумент к вещественному типу, а если это невозможно сделать – выбрасывает ошибку:

Для начала работы с fabs() необходимо импортировать модуль math с помощью следующей инструкции:

Мы уже выяснили, что fabs() не работает с комплексными числами, поэтому проверим работу функции на вещественных:

print(math.fabs(-10)) print(math.fabs(0)) print(math.fabs(10)) > 10.0 > 0.0 > 10.0

Функция производит вычисления в соответствие с математическим определением, однако, в отличие от abs() , всегда возвращает результат типа float :

P ython библиотека math содержит наиболее применяемые математические функции и константы. Все вычисления происходят на множестве вещественных чисел.

Если вам нужен соответствующий аппарат для комплексного исчисления, модуль math не подойдёт. Используйте вместо него cmath . Там вы найдёте комплексные версии большинства популярных math -функций.

Символьные вычисления в SymPy

Символьные вычисления — это разработка алгоритмов для управления математическими выражениями и другими объектами. Такие вычисления объединяют математику и компьютерные науки для решения математических выражений с помощью математических символов.

Система компьютерной алгебры же, такая как SymPy, оценивает алгебраические выражения с помощью тех же символов, которые используются в традиционных ручных методах. Например, квадратный корень числа с помощью модуля math в Python вычисляется вот так:

Как можно увидеть, квадратный корень числа 7 вычисляется приблизительно. Но в SymPy квадратные корни чисел, которые не являются идеальными квадратами, просто не вычисляются:

Вот каким будет вывод этого кода: sqrt(7) .

Это можно упростить и показать результат выражения символически таким вот образом:

В случае с модулем math вернется число, а вот в SymPy — формула.

Для рендеринга математических символов в формате LaTeX код SymPy, используйте Jupyter notebook:

Если выполнить эту команду в IDLE, то получится следующий результат:

Символьные вычисления в SymPy

Квадратный корень неидеального корня также может быть представлен в формате LaTeX с помощью привычных символов:

Квадратный корень может быть представлен в формате LaTeX

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

В пакете SymPy есть разные модули, которые помогают строить графики, выводить результат (LaTeX), заниматься физикой, статистикой, комбинаторикой, числовой теорией, геометрией, логикой и так далее.

Запросы

Модуль assumptions в SymPy включает инструменты для получения информации о выражениях. Для этого используется функция ask() .

Следующие свойства предоставляют полезную информацию о выражении:

algebraic(x)
Чтобы быть алгебраическим, число должно быть корнем ненулевого полиномиального уравнения с рациональными коэффициентами. √2, потому что √2 — это решение x2 − 2 = 0. Следовательно, это выражения является алгебраическим.

complex(x)
Предикат комплексного числа. Является истиной тогда и только тогда, когда x принадлежит множеству комплексных чисел.

even, odd
ask() возвращает True , если x находится в множестве четных и нечетных чисел соответственно.

imaginary
Свойство представляет предикат мнимого числа. Является истиной, если x можно записать как действительное число, умноженное на мнимую единицу.

integer
Это свойство, возвращаемое Q.integer(x) , будет истинным только в том случае, если x принадлежит множеству четных чисел.

rational, irrational
Q.irrational(x) истинно тогда и только тогда, когда x — это любое реальное число, которое нельзя представить как отношение целых чисел. Например, pi — это иррациональное число.

positive, negative
Предикаты для проверки того, является ли число положительным или отрицательным.

zero, nonzero
Предикат для проверки того, является ли число нулем или нет.

З апускаю китайскую реплику "ТАРДИС", и вот мы в пятом классе. На доске нарисована числовая ось, а на ней выделен отрезок. Его начало в точке 4, а конец – в 8. Учительница говорит, что длину отрезка можно найти путём вычитания координаты начала отрезка из координаты его конца. Вычитаем, получаем 4, и радуемся – мы нашли длину. Ура! 🎉

Перемещаемся на год вперёд, и там происходит странное: учительница выделяет мелом другой отрезок, но делает это в каком-то неправильном месте – левее точки с цифрой "0". Теперь перед нами старая задача, но с новыми числами и даже буквами: A, B, минус 4 и минус 8. Мы начинаем искать длину отрезка AB = [-4;-8]:

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

Пример abs() с целым числом

Следующий код демонстрирует, как получить абсолютное значение 42 положительного числа 42.

Функция simplify()

Функция simplify() используется для преобразования любого произвольного выражения, чтобы его можно было использовать как выражение SymPy. Обычные объекты Python, такие как целые числа, конвертируются в SymPy.Integer и так далее. Строки также конвертируются в выражения SymPy:

Любой объект Python можно конвертировать в объект SymPy. Однако учитывая то, что при преобразовании используется функция eval() , не стоит использовать некорректные выражения, иначе возникнет ошибка SimplifyError .

Функция simplify() принимает следующий аргумент: strict=False . Если установить True , то преобразованы будут только те типы, для которых определено явное преобразование. В противном случае также возникнет ошибка SimplifyError . Если же поставить False , то арифметические выражения и операторы будут конвертированы в их эквиваленты SumPy без вычисления выражения.

Математическая библиотека Python SymPy

Числа

Основной модуль в SymPy включает класс Number , представляющий атомарные числа. У него есть пара подклассов: Float и Rational . В Rational также входит Integer .

Класс Float

Float представляет числа с плавающей точкой произвольной точности:

SymPy может конвертировать целое число или строку в число с плавающей точкой:

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

Представить число дробью можно с помощью объекта класса Rational , где знаменатель — не 0:

Математическая библиотека Python SymPy

Если число с плавающей точкой передать в конструктор Rational() , то он вернет дробь:

Rational вернет дробь

Для упрощения можно указать ограничение знаменателя:

Выведется дробь 1/5 вместо 3602879701896397/18014398509481984.

Если же в конструктор передать строку, то вернется рациональное число произвольной точности:

Математическая библиотека Python SymPy

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

Класс Integer

Класс Integer в SymPy представляет целое число любого размера. Конструктор принимает рациональные и числа с плавающей точкой. В результате он откидывает дробную часть:

Также есть класс RealNumber , который является алиасом для Float . В SymPy есть классы-одиночки Zero и One , доступные через S.Zero и S.One соответственно.

Другие числовые объекты-одиночки — Half , NaN , Infinity и ImaginaryUnit .

Бесконечность представлена в виде объекта-символа oo или как S.Infinity :

Математическая библиотека Python SymPy

ImaginaryUnit можно импортировать как символ I , а получить к нему доступ — через S.ImaginaryUnit .

ImaginaryUnit можно импортировать как символ I

Символы

Symbol — самый важный класс в библиотеке SymPy. Как уже упоминалось ранее, символьные вычисления выполняются с помощью символов. И переменные SymPy являются объектами класса Symbol .

Аргумент функции Symbol() — это строка, содержащая символ, который можно присвоить переменной.

Код выше является эквивалентом этого выражения:

Математическая библиотека Python SymPy

Символ может включать больше одной буквы:

Также в SymPy есть функция Symbols() , с помощью которой можно определить несколько символов за раз. Строка содержит названия переменных, разделенные запятыми или пробелами.

В модуле abc можно найти элементы латинского и греческого алфавитов в виде символов. Таким образом вместо создания экземпляра Symbol можно использовать метод:

Однако C, O, S, I, N, E и Q являются заранее определенными символами. Также символы с более чем одной буквы не определены в abc. Для них нужно использовать объект Symbol . Модуль abs определяет специальные имена, которые могут обнаружить определения в пространстве имен SymPy по умолчанию. сlash1 содержит однобуквенные символы, а clash2 — целые слова.

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

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

Функция evalf()

Функция вычисляет данное числовое выражение с точностью до 100 цифр после плавающей точки. Она также принимает параметр subs , как объект словаря с числовыми значениями для символов. Например такое выражение:

Даст такой результат: ?? 2

Вычислим выражение с помощью evalf() и заменим r на 5:

По умолчанию точность после плавающей точки — 15, но это значение можно перезаписать до 100. Следующее выражение вычисляет, используя вплоть до 20 цифр точности:

Синтаксис и подключение

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

Теперь с помощью точечной нотации можно обращаться к константам и вызывать функции этой библиотеки. Например, так:

Читайте также: