cmath — Математические функции для комплексных чисел
Этот модуль предоставляет доступ к математическим функциям для комплексных чисел. Функции этого модуля принимают в качестве аргументов целые числа, числа с плавающей точкой или комплексные числа. Они также принимают любой объект 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
Преобразование в полярные координаты и обратно
Комплексное число Python z хранится внутри в прямоугольных, или декартовых, координатах. Оно полностью определяется своей действительной частью z.real и мнимой частью z.imag.
Полярные координаты — это альтернативный способ представления комплексного числа. В полярных координатах комплексное число 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. Эквивалентно
complex(r * math.cos(phi), r * math.sin(phi)).
Степенные и логарифмические функции
-
cmath.exp(x) -
Возвращает e в степени x, где e — основание натуральных логарифмов.
-
cmath.log(x[, base]) -
Возвращает логарифм x по заданному основанию base. Если основание base не указано, возвращает натуральный логарифм x. Имеется один разрез ветвления: от 0 вдоль отрицательной действительной оси до -∞.
-
cmath.log10(x) -
Возвращает десятичный логарифм 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в противном случае.Близость двух значений определяется заданными абсолютным и относительным допусками. Если ошибок не возникает, результат будет таким:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol).rel_tol — относительный допуск, то есть максимально допустимая разница между a и b относительно большего из абсолютных значений a и b. Например, чтобы задать допуск 5%, передайте
rel_tol=0.05. Допуск по умолчанию —1e-09, что гарантирует совпадение двух значений примерно до 9 десятичных знаков. rel_tol должен быть неотрицательным и меньше1.0.abs_tol — абсолютный допуск; по умолчанию он равен
0.0и должен быть неотрицательным. При сравненииxс0.0значениеisclose(x, 0)вычисляется какabs(x) <= rel_tol * abs(x), что равноFalseдля любогоxи rel_tol меньше1.0. Поэтому передайте вызову подходящий положительный аргумент 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. В: Iserles, A. и Powell, M. (ред.), The state of the art in numerical analysis. Clarendon Press (1987), с. 165–211.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/cmath.html