Документация 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)

Return the arc sine of x. This has the same branch cuts as 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. Имеется один разрез ветви, простирающийся влево от 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.

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

cmath.isfinite(x)

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

Новое в версии 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 считаются близкими только сами к себе.

Новое в версии 3.5.

См. также

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

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

cmath.pi

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

cmath.e

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

cmath.tau

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

Новое в версии 3.6.

cmath.inf

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

Новое в версии 3.6.

cmath.infj

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

Новое в версии 3.6.

cmath.nan

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

Новое в версии 3.6.

cmath.nanj

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

Новое в версии 3.6.

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

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

См. также

Kahan, W: Ветви разрезов для комплексных элементарных функций; или Много шума из-за знакового бита. В Iserles, A., и Powell, M. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165–211.