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.