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 (также известную как аргумент от x), как float.
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 по заданному базе. Если база не указана, возвращается натуральный логарифм от x. Существует один срез ветви, от 0 вдоль отрицательной вещественной оси до -∞, непрерывный сверху.
Тригонометрические функции¶
-
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.
Гиперболические функции¶
-
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 в формате float.
-
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. В Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165–211.