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

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


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

Примечание

Для функций, использующих разрезы ветвей, возникает проблема определения этих функций на самом разрезе. Следуя работе Кахана «Branch cuts for complex elementary functions», а также Приложению G стандарта C99 и последующих стандартов C, мы используем знак нуля, чтобы различать стороны разреза ветви: для разреза вдоль (части) действительной оси мы смотрим на знак мнимой части, а для разреза вдоль мнимой оси – на знак действительной части.

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

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

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

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

Преобразования в полярные координаты и обратно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).

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

cmath.exp(x)

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

cmath.log(x[, base])

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

cmath.log10(x)

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

cmath.sqrt(x)

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

Тригонометрические функции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.

Гиперболические функции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.

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

Константы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.