Содержание страницы
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 вдоль отрицательной вещественной оси до -∞, непрерывный сверху.
9.3.3. Тригонометрические функции¶Trigonometric functions
-
cmath.acos(x)¶ Возвращает арккосинус x. Имеются два разреза ветвей: один простирается вправо от 1 вдоль вещественной оси до ∞, непрерывный снизу. Другой простирается влево от -1 вдоль вещественной оси до -∞, непрерывный сверху.
-
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.