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 определяется модулем 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 по заданному основанию. Если основание не указано, возвращает натуральный логарифм 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: Разрывы ветвей для комплексных элементарных функций; или, Много шума из-за нулевого бита. В Iserles, A., и Powell, M. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165–211.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/cmath.html