Spec-Zone.ru › Python 3.12

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API