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


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

Примечание

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

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

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

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

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

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

cmath.phase(x)

Возвращает фазу x (также известную как argument 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).

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

cmath.exp(x)

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

cmath.log(x[, base])

Возвращает логарифм x к заданному base. Если base не указан, возвращает натуральный логарифм 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 в противном случае.

Добавлено в версии 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 – Функция для проверки приблизительного равенства

Константы

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: Branch cuts for complex elementary functions; or, Much ado about nothing’s sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165–211.