Документация Python неофициальный перевод

cmath.md

251 строк · 20.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/library/cmath.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `cmath` – математические функции для комплексных чисел89---1011Этот модуль предоставляет доступ к математическим функциям для комплексных чисел. Функции в этом модуле принимают в качестве аргументов целые числа, числа с плавающей запятой или комплексные числа. Они также принимают любой объект Python, у которого есть метод [`__complex__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__complex__) или [`__float__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__float__): эти методы используются для преобразования объекта в комплексное число или число с плавающей запятой соответственно, после чего функция применяется к результату преобразования.1213> **Примечание**14>15> Для функций, использующих разрезы ветвей, возникает проблема определения этих функций на самом разрезе. Следуя работе Кахана «Branch cuts for complex elementary functions», а также Приложению G стандарта C99 и последующих стандартов C, мы используем знак нуля, чтобы различать стороны разреза ветви: для разреза вдоль (части) действительной оси мы смотрим на знак мнимой части, а для разреза вдоль мнимой оси – на знак действительной части.16>17> Например, функция [`cmath.sqrt()`](https://python-all.ru/3.13/library/cmath.html#cmath.sqrt) имеет разрез ветви вдоль отрицательной действительной оси. Аргумент `complex(-2.0, -0.0)` рассматривается так, как если бы он находился *ниже* разреза, и поэтому даёт результат на отрицательной мнимой оси:18>19> ```python20> >>> cmath.sqrt(complex(-2.0, -0.0))21> -1.4142135623730951j22> ```23>24> Но аргумент `complex(-2.0, 0.0)` рассматривается как лежащий выше разреза ветви:25>26> ```python27> >>> cmath.sqrt(complex(-2.0, 0.0))28> 1.4142135623730951j29> ```3031| **Преобразование в полярные координаты и обратно** |  |32| --- | --- |33| [`phase(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.phase) | Возвращает фазу *z* |34| [`polar(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.polar) | Возвращает представление *z* в полярных координатах |35| [`rect(r, phi)`](https://python-all.ru/3.13/library/cmath.html#cmath.rect) | Возвращает комплексное число *z* с полярными координатами *r* и *phi* |36| **Степенные и логарифмические функции** |  |37| [`exp(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.exp) | Возвращает *e* в степени *z* |38| [`log(z[, base])`](https://python-all.ru/3.13/library/cmath.html#cmath.log) | Возвращает логарифм *z* по заданному *основанию* (по умолчанию *e*) |39| [`log10(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.log10) | Возвращает десятичный логарифм *z* |40| [`sqrt(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.sqrt) | Возвращает квадратный корень из *z* |41| **Тригонометрические функции** |  |42| [`acos(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.acos) | Возвращает арккосинус *z* |43| [`asin(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.asin) | Возвращает арксинус *z* |44| [`atan(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.atan) | Возвращает арктангенс *z* |45| [`cos(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.cos) | Возвращает косинус *z* |46| [`sin(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.sin) | Возвращает синус *z* |47| [`tan(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.tan) | Возвращает тангенс *z* |48| **Гиперболические функции** |  |49| [`acosh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.acosh) | Возвращает обратный гиперболический косинус *z* |50| [`asinh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.asinh) | Возвращает обратный гиперболический синус *z* |51| [`atanh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.atanh) | Возвращает обратный гиперболический тангенс *z* |52| [`cosh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.cosh) | Возвращает гиперболический косинус *z* |53| [`sinh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.sinh) | Возвращает гиперболический синус *z* |54| [`tanh(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.tanh) | Возвращает гиперболический тангенс *z* |55| **Функции классификации** |  |56| [`isfinite(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.isfinite) | Проверяет, все ли компоненты *z* конечны |57| [`isinf(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.isinf) | Проверяет, является ли какой-либо компонент *z* бесконечным |58| [`isnan(z)`](https://python-all.ru/3.13/library/cmath.html#cmath.isnan) | Проверяет, является ли какой-либо компонент *z* NaN |59| [`isclose(a, b, *, rel_tol, abs_tol)`](https://python-all.ru/3.13/library/cmath.html#cmath.isclose) | Проверяет, близки ли значения *a* и *b* друг к другу |60| **Константы** |  |61| [`pi`](https://python-all.ru/3.13/library/cmath.html#cmath.pi) | *π* = 3.141592… |62| [`e`](https://python-all.ru/3.13/library/cmath.html#cmath.e) | *e* = 2.718281… |63| [`tau`](https://python-all.ru/3.13/library/cmath.html#cmath.tau) | *τ* = 2*π* = 6.283185… |64| [`inf`](https://python-all.ru/3.13/library/cmath.html#cmath.inf) | Положительная бесконечность |65| [`infj`](https://python-all.ru/3.13/library/cmath.html#cmath.infj) | Чисто мнимая бесконечность |66| [`nan`](https://python-all.ru/3.13/library/cmath.html#cmath.nan) | «Не число» (NaN) |67| [`nanj`](https://python-all.ru/3.13/library/cmath.html#cmath.nanj) | Чисто мнимый NaN |6869## Преобразования в полярные координаты и обратно7071Комплексное число Python `z` хранится внутри в *прямоугольных* (*декартовых*) координатах. Оно полностью определяется своей *действительной частью* `z.real` и *мнимой частью* `z.imag`.7273*Полярные координаты* дают альтернативный способ представления комплексного числа. В полярных координатах комплексное число *z* определяется модулем *r* и фазовым углом *phi*. Модуль *r* – это расстояние от *z* до начала координат, а фаза *phi* – это угол, измеряемый в радианах против часовой стрелки от положительной оси x до отрезка, соединяющего начало координат с *z*.7475Следующие функции можно использовать для преобразования из исходных прямоугольных координат в полярные и обратно.7677#### `cmath.phase(z)`7879Возвращает фазу *z* (также известную как *аргумент* числа *z*) в виде числа с плавающей запятой. `phase(z)` эквивалентно `math.atan2(z.imag, z.real)`. Результат лежит в диапазоне \[-*π*, *π*\], а разрез ветви для этой операции проходит по отрицательной действительной оси. Знак результата совпадает со знаком `z.imag`, даже если `z.imag` равно нулю:8081```python82>>> phase(complex(-1.0, 0.0))833.14159265358979384>>> phase(complex(-1.0, -0.0))85-3.14159265358979386```8788> **Примечание**89>90> Модуль (абсолютное значение) комплексного числа *z* можно вычислить с помощью встроенной функции [`abs()`](https://python-all.ru/3.13/library/functions.html#abs). Для этой операции нет отдельной функции модуля `cmath`.9192#### `cmath.polar(z)`9394Возвращает представление *z* в полярных координатах. Возвращает пару `(r, phi)`, где *r* – модуль *z*, а *phi* – фаза *z*. `polar(z)` эквивалентно `(abs(z), phase(z))`.9596#### `cmath.rect(r, phi)`9798Возвращает комплексное число *z* с полярными координатами *r* и *phi*. Эквивалентно `complex(r * math.cos(phi), r * math.sin(phi))`.99100## Степенные и логарифмические функции101102#### `cmath.exp(z)`103104Возвращает *e*, возведённое в степень *z*, где *e* – основание натуральных логарифмов.105106#### `cmath.log(z[, base])`107108Возвращает логарифм *z* по заданному *основанию*. Если *основание* не указано, возвращает натуральный логарифм *z*. Имеется один разрез ветви: от 0 по отрицательной действительной оси до -∞.109110#### `cmath.log10(z)`111112Возвращает десятичный логарифм *z*. Имеет тот же разрез ветви, что и [`log()`](https://python-all.ru/3.13/library/cmath.html#cmath.log).113114#### `cmath.sqrt(z)`115116Возвращает квадратный корень из *z*. Имеет тот же разрез ветви, что и [`log()`](https://python-all.ru/3.13/library/cmath.html#cmath.log).117118## Тригонометрические функции119120#### `cmath.acos(z)`121122Возвращает арккосинус *z*. Имеется два разреза ветви: один идёт вправо от 1 вдоль действительной оси до ∞. Другой идёт влево от -1 вдоль действительной оси до -∞.123124#### `cmath.asin(z)`125126Возвращает арксинус *z*. Имеет те же разрезы ветвей, что и [`acos()`](https://python-all.ru/3.13/library/cmath.html#cmath.acos).127128#### `cmath.atan(z)`129130Возвращает арктангенс *z*. Имеется два разреза ветви: один идёт от `1j` вдоль мнимой оси до `∞j`. Другой идёт от `-1j` вдоль мнимой оси до `-∞j`.131132#### `cmath.cos(z)`133134Возвращает косинус *z*.135136#### `cmath.sin(z)`137138Возвращает синус *z*.139140#### `cmath.tan(z)`141142Возвращает тангенс *z*.143144## Гиперболические функции145146#### `cmath.acosh(z)`147148Возвращает обратный гиперболический косинус числа *z*. Имеется один разрез ветви, проходящий от 1 влево по вещественной оси до −∞.149150#### `cmath.asinh(z)`151152Возвращает обратный гиперболический синус числа *z*. Имеется два разреза ветви: Один проходит от `1j` по мнимой оси до `∞j`. Другой проходит от `-1j` по мнимой оси до `-∞j`.153154#### `cmath.atanh(z)`155156Возвращает обратный гиперболический тангенс числа *z*. Имеется два разреза ветви: один проходит от `1` по вещественной оси до `∞`. Другой проходит от `-1` по вещественной оси до `-∞`.157158#### `cmath.cosh(z)`159160Возвращает гиперболический косинус числа *z*.161162#### `cmath.sinh(z)`163164Возвращает гиперболический синус числа *z*.165166#### `cmath.tanh(z)`167168Возвращает гиперболический тангенс числа *z*.169170## Функции классификации171172#### `cmath.isfinite(z)`173174Возвращает `True`, если и вещественная, и мнимая части *z* конечны, и `False` в противном случае.175176Добавлено в версии 3.2.177178#### `cmath.isinf(z)`179180Возвращает `True`, если либо вещественная, либо мнимая часть *z* является бесконечностью, и `False` в противном случае.181182#### `cmath.isnan(z)`183184Возвращает `True`, если либо вещественная, либо мнимая часть *z* является NaN, и `False` в противном случае.185186#### `cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)`187188Возвращает `True`, если значения *a* и *b* близки друг к другу, и `False` иначе.189190Близость двух значений определяется на основе заданных абсолютного и относительного допусков. Если ошибок не возникает, результатом будет: `abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`.191192*rel\_tol* – это относительный допуск; это максимально допустимая разница между *a* и *b*, относительно большего абсолютного значения *a* или *b*. Например, чтобы установить допуск 5%, передайте `rel_tol=0.05`. По умолчанию допуск равен `1e-09`, что гарантирует совпадение двух значений с точностью примерно до 9 десятичных знаков. *rel\_tol* должен быть неотрицательным и меньше `1.0`.193194*abs\_tol* – это абсолютный допуск; по умолчанию он равен `0.0` и должен быть неотрицательным. При сравнении `x` с `0.0`, `isclose(x, 0)` вычисляется как `abs(x) <= rel_tol * abs(x)`, что равно `False` для любых значений `x` и rel\_tol меньше `1.0`. Поэтому передайте в вызов подходящий положительный аргумент abs\_tol.195196Особые значения IEEE 754: `NaN`, `inf` и `-inf` обрабатываются согласно правилам IEEE. В частности, `NaN` не считается близким ни к какому другому значению, включая `NaN`. `inf` и `-inf` считаются близкими только сами к себе.197198Добавлено в версии 3.5.199200> **См. также**201>202> [**PEP 485**](https://python-all.ru/3.13/library/cmath.html) – Функция для проверки приблизительного равенства203204## Константы205206#### `cmath.pi`207208Математическая константа *π*, в виде числа с плавающей запятой.209210#### `cmath.e`211212Математическая константа *e*, в виде числа с плавающей запятой.213214#### `cmath.tau`215216Математическая константа *τ*, в виде числа с плавающей запятой.217218Добавлено в версии 3.6.219220#### `cmath.inf`221222Положительная бесконечность с плавающей запятой. Эквивалентна `float('inf')`.223224Добавлено в версии 3.6.225226#### `cmath.infj`227228Комплексное число с нулевой действительной частью и положительной бесконечной мнимой частью. Эквивалентно `complex(0.0, float('inf'))`.229230Добавлено в версии 3.6.231232#### `cmath.nan`233234Значение с плавающей запятой «не число» (NaN). Эквивалентно `float('nan')`. См. также [`math.nan`](https://python-all.ru/3.13/library/math.html#math.nan).235236Добавлено в версии 3.6.237238#### `cmath.nanj`239240Комплексное число с нулевой действительной частью и NaN в мнимой части. Эквивалентно `complex(0.0, float('nan'))`.241242Добавлено в версии 3.6.243244Обратите внимание, что набор функций похож на набор из модуля [`math`](https://python-all.ru/3.13/library/math.html#module-math), но не идентичен ему. Причина наличия двух модулей в том, что некоторым пользователям неинтересны комплексные числа, и они, возможно, даже не знают, что это такое. Они предпочли бы, чтобы `math.sqrt(-1)` вызывал исключение, а не возвращал комплексное число. Также следует отметить, что функции, определённые в `cmath`, всегда возвращают комплексное число, даже если ответ может быть выражен вещественным числом (в этом случае комплексное число имеет нулевую мнимую часть).245246Примечание о разрезах ветвей: это кривые, вдоль которых данная функция перестаёт быть непрерывной. Они являются необходимым свойством многих комплексных функций. Предполагается, что если вам нужно вычислять комплексные функции, вы разбираетесь в разрезах ветвей. Для понимания обратитесь к любой (не слишком элементарной) книге по комплексному анализу. Для получения информации о правильном выборе разрезов ветвей для численных расчётов хорошим справочником может служить следующее издание:247248> **См. также**249>250> Kahan, W: Ветви разрезов для комплексных элементарных функций; или Много шума из-за знакового бита. В Iserles, A., и Powell, M. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165–211.251