cmath
— Математические функции для комплексных чисел¶
Этот модуль предоставляет доступ к математическим функциям для комплексных чисел. Функции в этом модуле принимают целые числа, числа с плавающей запятой или комплексные числа в качестве аргументов. Они также будут принимать любой объект Python, у которого есть метод __complex__()
или метод __float__()
: эти методы используются для преобразования объекта в комплексное число или число с плавающей запятой соответственно, а затем функция применяется к результату преобразования.
Примечание
Для функций, связанных с обрезкой ветвей, мы сталкиваемся с проблемой определения того, как определить эти функции в самом разрезе. Следуя статье Кахана «Разрезы ветвей для сложных элементарных функций», а также Приложению 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 == 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)
.
Степенные и логарифмические функции¶
- 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 в виде числа с плавающей запятой.
- 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
, всегда возвращают комплексное число, даже если ответ может быть выражен в виде действительного числа (в этом случае комплексное число имеет мнимую часть от нуля).
Примечание о разрезах ветвей: это кривые, вдоль которых данная функция не может быть непрерывной. Они являются необходимым свойством многих сложных функций. Предполагается, что если вам нужно выполнять вычисления со сложными функциями, вы будете разбираться в разрезах ветвей. Обратитесь к любой (не слишком элементарной) книге по комплексным переменным, чтобы узнать больше. Для получения информации о правильном выборе сечений ветвей для численных целей, хорошей ссылкой может быть следующее:
См.также
Кахан, У.: Разветвления для сложных элементарных функций; или «Много шума из-за пустого знакового бита». В серии А. и Пауэлл, М. (ред.), «Современное состояние численного анализа». Издательство «Кларендон Пресс» (1987), стр. 165-211.