Документация Python неофициальный перевод
Содержание страницы

9.3. cmath – Математические функции для комплексных чиселcmath – Mathematical functions for complex numbers

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

Примечание

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

9.3.1. Преобразования в полярные координаты и обратноConversions to and from polar coordinates

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

z == z.real + z.imag*1j

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

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

cmath.phase(x)

Возвращает фазу x (также известную как аргумент x) в виде числа с плавающей запятой. 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. Эквивалентно r * (math.cos(phi) + math.sin(phi)*1j).

9.3.2. Степенные и логарифмические функцииPower and logarithmic functions

cmath.exp(x)
Возвращает экспоненциальное значение e**x.
cmath.log(x[, base])
Возвращает логарифм x по заданному основанию. Если основание не указано, возвращает натуральный логарифм x. Имеется один разрез ветви: от 0 вдоль отрицательной вещественной оси до -∞, непрерывный сверху.
cmath.log10(x)
Возвращает десятичный логарифм x. Имеет тот же разрез ветвей, что и log().
cmath.sqrt(x)
Возвращает квадратный корень x. Имеет тот же разрез ветвей, что и log().

9.3.3. Тригонометрические функцииTrigonometric functions

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.

9.3.4. Гиперболические функцииHyperbolic functions

cmath.acosh(x)
Возвращает гиперболический арккосинус x. Имеется один разрез ветвей, идущий влево\nот 1 вдоль вещественной оси до -∞, непрерывный сверху.
cmath.asinh(x)
Возвращает гиперболический арксинус x. Имеется два разреза ветвей:\nОдин простирается от 1j вдоль мнимой оси до ∞j,\nнепрерывный справа. Другой простирается от -1j вдоль\nмнимой оси до -∞j, непрерывный слева.
cmath.atanh(x)
Возвращает гиперболический арктангенс x. Имеется два разреза ветвей: Один\nпростирается от 1 вдоль вещественной оси до , непрерывный снизу. Другой\nпростирается от -1 вдоль вещественной оси до -∞, непрерывный\nсверху.
cmath.cosh(x)
Возвращает гиперболический косинус x.
cmath.sinh(x)
Возвращает гиперболический синус x.
cmath.tanh(x)
Возвращает гиперболический тангенс x.

9.3.5. Функции классификацииClassification functions

cmath.isinf(x)
Возвращает True, если действительная или мнимая часть x положительна или отрицательная бесконечность.
cmath.isnan(x)
Возвращает True, если действительная или мнимая часть x не является числом (NaN).

9.3.6. КонстантыConstants

cmath.pi
Математическая константа π, в виде числа с плавающей запятой.
cmath.e
Математическая константа e, в виде числа с плавающей запятой.

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

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

См. также

Кахан, У: Разрезы ветвей для комплексных элементарных функций; или Много шума из-за знакового бита. В книге Изерлеса, А. и Пауэлла, М. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165-211.