Сообщить об ошибке.

Модуль cmath в Python

Математические функции для комплексных чисел в Python

Модуль cmath обеспечивает доступ к математическим функциям для комплексных чисел.

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

Функции в этом модуле принимают в качестве аргументов целые числа, числа с плавающей запятой или комплексные числа. Они также будут принимать любой объект Python, имеющий метод __complex__() или __float__(): эти методы используются для преобразования объекта в комплексное число или число с плавающей запятой соответственно, а затем функция применяется к результату преобразование.

Примечание. Для функций, включающих разрезы ветвей, здесь возникает проблема: как определить эти функции на самом разрезе. Следуя статье Кахана "Разрезы ветвей для сложных элементарных функций", а также Приложению G к стандартам C99 и более поздним версиям языка C, используется знак нуля, чтобы отличить одну сторону разреза от другой: для разрезанной вдоль (части) действительной оси смотрим на знак мнимой части, а для ветви, разрезанной по мнимой оси, смотрим на знак действительной части.

Например, функция cmath.sqrt() имеет ветвь, срезанную по отрицательной вещественной оси. Аргумент complex(-2.0, -0.0) рассматривается так, как будто он находится ниже разреза ветви, и поэтому дает результат на отрицательной мнимой оси:

>>> import cmath
>>> cmath.sqrt(complex(-2.0, -0.0))
# -1.4142135623730951j

Но аргумент complex(-2.0, 0.0) обрабатывается так, как если бы он лежал выше срезаемой ветви:

>>> cmath.sqrt(complex(-2.0, 0.0))
# 1.4142135623730951j

Обратите внимание, что набор функций аналогичен, но не идентичен набору функций в модуле math. Причина наличия двух модулей заключается в том, что некоторые пользователи не интересуются комплексными числами и, возможно, даже не знают, что это такое. Они предпочли бы, чтобы math.sqrt(-1) вызывал исключение, чем возвращал комплексное число. Также обратите внимание, что функции, определенные в cmath, всегда возвращают комплексное число, даже если ответ может быть выражен действительным числом (в этом случае комплексное число имеет нулевую мнимую часть).

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