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


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

Примечание

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

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

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

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

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

Преобразования в полярные координаты и обратно

Комплексное число z в Python хранится во внутренних прямоугольных или картезианских координатах. Оно полностью определяется своей реальной частью z.real и мнимой частью z.imag.

Полярные координаты дают альтернативный способ представления комплексного числа. В полярных координатах комплексное число *z определяется модулем r и фазовым углом phi. Модуль r - это расстояние от z до начала координат, а фаза phi - это угол против часовой стрелки, измеряемый в радианах, от положительной оси x до отрезка прямой, соединяющей начало координат с z.

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

cmath.phase(x)

Возвращает фазу x (также известную как аргумент от x) в виде float. phase(x) эквивалентно math.atan2(x.imag, x.real). Результат лежит в диапазоне [-π, π], а срез ветви для этой операции лежит вдоль отрицательной вещественной оси. Знак результата совпадает со знаком x.imag, даже если x.imag равен нулю:

>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793

Примечание

Модуль (абсолютное значение) комплексного числа x можно вычислить с помощью встроенной функции abs(). Отдельной функции модуля cmath для этой операции не существует.

cmath.polar(x)

Возвращает представление x в полярных координатах. Возвращает пару (r, phi), где r - модуль x, а phi - фаза x. polar(x) эквивалентно (abs(x), phase(x)).

cmath.rect(r, phi)

Возвращает комплексное число x с полярными координатами r и phi. Эквивалентно complex(r * math.cos(phi), r * math.sin(phi)).

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

cmath.exp(x)

Возвращает e, возведенное в степень x, где e - основание натурального логарифма.

cmath.log(x[, base])

Возвращает логарифм от x по заданному базису. Если база не указана, возвращается натуральный логарифм от x. Имеется один срез ветви - от 0 вдоль отрицательной вещественной оси до -∞.

cmath.log10(x)

Возвращает логарифм по основанию 10 от x. Имеет тот же срез ветви, что и log().

cmath.sqrt(x)

Возвращает квадратный корень из x. Имеет тот же срез ветви, что и log().

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

cmath.acos(x)

Возвращает косинус дуги от x. Есть два отрезка ветви: Один простирается вправо от 1 вдоль вещественной оси до ∞. Другой - влево от -1 вдоль вещественной оси до -∞.

cmath.asin(x)

Возвращает синус дуги от x. Имеет те же разрезы ветвей, что и acos().

cmath.atan(x)

Возвращает касательную к дуге x. Существует два отрезка ветви: Один простирается от 1j вдоль мнимой оси до ∞j. Другой - от -1j вдоль мнимой оси до -∞j.

cmath.cos(x)

Возвращает косинус от x.

cmath.sin(x)

Возвращает синус от x.

cmath.tan(x)

Возвращает тангенс к x.

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

cmath.acosh(x)

Возвращает обратный гиперболический косинус от x. Имеется одна ветвь, простирающаяся влево от 1 вдоль вещественной оси до -∞.

cmath.asinh(x)

Возвращает обратный гиперболический синус от x. Имеется два отрезка ветви: Один простирается от 1j вдоль мнимой оси до ∞j. Другой - от -1j вдоль мнимой оси до -∞j.

cmath.atanh(x)

Возвращает обратный гиперболический тангенс к x. Существует два отрезка ветви: Один простирается от 1 вдоль вещественной оси до . Другой - от -1 вдоль вещественной оси до -∞.

cmath.cosh(x)

Возвращает гиперболический косинус x.

cmath.sinh(x)

Возвращает гиперболический синус от x.

cmath.tanh(x)

Возвращает гиперболический тангенс к x.

Функции классификации

cmath.isfinite(x)

Возвращает True, если действительная и мнимая части x конечны, и False в противном случае.

Added in version 3.2.

cmath.isinf(x)

Возвращает True, если действительная или мнимая часть x равна бесконечности, и False в противном случае.

cmath.isnan(x)

Возвращает True, если действительная или мнимая часть x является NaN, и False в противном случае.

cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

Возвращает True, если значения a и b близки друг к другу, и False в противном случае.

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

rel_tol - это относительный допуск - максимально допустимая разница между a и b по отношению к большему абсолютному значению a или b. Например, чтобы установить допуск в 5%, передайте rel_tol=0.05. Допуск по умолчанию равен 1e-09, что гарантирует, что два значения будут одинаковыми примерно в пределах 9 десятичных цифр. Значение rel_tol должно быть больше нуля.

abs_tol - минимальный абсолютный допуск - полезно для сравнений вблизи нуля. abs_tol должно быть не меньше нуля.

Если ошибок не возникло, результатом будет: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol).

Специальные значения IEEE 754 NaN, inf и -inf будут обрабатываться в соответствии с правилами IEEE. В частности, NaN не считается близким к любому другому значению, включая NaN. inf и -inf считаются близкими только к самим себе.

Added in version 3.5.

См.также

PEP 485 – Функция для проверки приблизительного равенства

Константы

cmath.pi

Математическая константа π, в виде float.

cmath.e

Математическая константа e, в виде float.

cmath.tau

Математическая константа τ, в виде float.

Added in version 3.6.

cmath.inf

Положительная бесконечность с плавающей точкой. Эквивалентно float('inf').

Added in version 3.6.

cmath.infj

Комплексное число с нулевой действительной частью и положительной бесконечной мнимой частью. Эквивалентно complex(0.0, float('inf')).

Added in version 3.6.

cmath.nan

Значение с плавающей точкой «не число» (NaN). Эквивалентно float('nan').

Added in version 3.6.

cmath.nanj

Комплексное число с нулевой действительной частью и мнимой частью NaN. Эквивалентно complex(0.0, float('nan')).

Added in version 3.6.

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

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

См.также

Kahan, W: Branch cuts for complex elementary functions; or, Much ado about nothing’s sign bit. В Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165–211.