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

cmath.md

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

1> **Источник:** https://python-all.ru/3.11/library/cmath.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`cmath`](https://python-all.ru/3.11/library/cmath.html#module-cmath) – математические функции для комплексных чисел89---1011Этот модуль предоставляет доступ к математическим функциям для комплексных чисел. Функции в этом модуле принимают в качестве аргументов целые числа, числа с плавающей запятой или комплексные числа. Они также принимают любой объект Python, у которого есть метод [`__complex__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__complex__) или [`__float__()`](https://python-all.ru/3.11/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.11/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## Преобразования в полярные координаты и обратно3233Комплексное число Python `z` хранится внутри в *прямоугольных* или *декартовых* координатах. Оно полностью определяется своей *действительной частью* `z.real` и своей *мнимой частью* `z.imag`. Иными словами:3435```python36z == z.real + z.imag*1j37```3839*Полярные координаты* дают альтернативный способ представления комплексного числа. В полярных координатах комплексное число *z* определяется модулем *r* и фазовым углом *phi*. Модуль *r* – это расстояние от *z* до начала координат, а фаза *phi* – это угол, измеряемый в радианах против часовой стрелки от положительной оси x до отрезка, соединяющего начало координат с *z*.4041Следующие функции можно использовать для преобразования из исходных прямоугольных координат в полярные и обратно.4243#### `cmath.phase(x)`4445Возвращает фазу *x* (также известную как *аргумент* *x*) в виде числа с плавающей запятой. `phase(x)` эквивалентно `math.atan2(x.imag, x.real)`. Результат лежит в диапазоне \[-*π*, *π*\], а разрез ветви для этой операции проходит вдоль отрицательной вещественной оси. Знак результата совпадает со знаком `x.imag`, даже если `x.imag` равен нулю:4647```python48>>> phase(complex(-1.0, 0.0))493.14159265358979350>>> phase(complex(-1.0, -0.0))51-3.14159265358979352```5354> **Примечание**55>56> Модуль (абсолютное значение) комплексного числа *x* можно вычислить с помощью встроенной функции [`abs()`](https://python-all.ru/3.11/library/functions.html#abs). Отдельной функции модуля [`cmath`](https://python-all.ru/3.11/library/cmath.html#module-cmath) для этой операции нет.5758#### `cmath.polar(x)`5960Возвращает представление *x* в полярных координатах. Возвращает пару `(r, phi)`, где *r* – модуль *x*, а phi – фаза *x*. `polar(x)` эквивалентно `(abs(x), phase(x))`.6162#### `cmath.rect(r, phi)`6364Возвращает комплексное число *x* с полярными координатами *r* и *phi*. Эквивалентно `r * (math.cos(phi) + math.sin(phi)*1j)`.6566## Степенные и логарифмические функции6768#### `cmath.exp(x)`6970Возвращает *e*, возведённое в степень *x*, где *e* – основание натурального логарифма.7172#### `cmath.log(x[, base])`7374Возвращает логарифм *x* по заданному *основанию*. Если *основание* не указано, возвращает натуральный логарифм *x*. Имеется один разрез ветви, от 0 вдоль отрицательной вещественной оси до -∞.7576#### `cmath.log10(x)`7778Возвращает десятичный логарифм *x*. Имеет тот же разрез ветви, что [`log()`](https://python-all.ru/3.11/library/cmath.html#cmath.log).7980#### `cmath.sqrt(x)`8182Возвращает квадратный корень *x*. Имеет тот же разрез ветви, что и [`log()`](https://python-all.ru/3.11/library/cmath.html#cmath.log).8384## Тригонометрические функции8586#### `cmath.acos(x)`8788Возвращает арккосинус *x*. Имеется два разреза ветви: один простирается вправо от 1 вдоль вещественной оси до ∞. Другой простирается влево от -1 вдоль вещественной оси до -∞.8990#### `cmath.asin(x)`9192Return the arc sine of *x*. This has the same branch cuts as [`acos()`](https://python-all.ru/3.11/library/cmath.html#cmath.acos).9394#### `cmath.atan(x)`9596Возвращает арктангенс *x*. Имеется два разреза ветви: один простирается от `1j` вдоль мнимой оси до `∞j`. Другой простирается от `-1j` вдоль мнимой оси до `-∞j`.9798#### `cmath.cos(x)`99100Возвращает косинус *x*.101102#### `cmath.sin(x)`103104Возвращает синус *x*.105106#### `cmath.tan(x)`107108Возвращает тангенс *x*.109110## Гиперболические функции111112#### `cmath.acosh(x)`113114Возвращает обратный гиперболический косинус *x*. Имеется один разрез ветви, проходящий влево от 1 вдоль вещественной оси до -∞.115116#### `cmath.asinh(x)`117118Возвращает обратный гиперболический синус *x*. Есть два разреза ветвления: один проходит от `1j` вдоль мнимой оси до `∞j`. Другой проходит от `-1j` вдоль мнимой оси до `-∞j`.119120#### `cmath.atanh(x)`121122Возвращает обратный гиперболический тангенс *x*. Есть два разреза ветвления: один проходит от `1` вдоль вещественной оси до `∞`. Другой проходит от `-1` вдоль вещественной оси до `-∞`.123124#### `cmath.cosh(x)`125126Возвращает гиперболический косинус *x*.127128#### `cmath.sinh(x)`129130Возвращает гиперболический синус *x*.131132#### `cmath.tanh(x)`133134Возвращает гиперболический тангенс *x*.135136## Функции классификации137138#### `cmath.isfinite(x)`139140Возвращает `True`, если и вещественная, и мнимая части *x* конечны, и `False` в противном случае.141142Новое в версии 3.2.143144#### `cmath.isinf(x)`145146Возвращает `True`, если хотя бы одна из частей *x* (вещественная или мнимая) является бесконечностью, и `False` в противном случае.147148#### `cmath.isnan(x)`149150Возвращает `True`, если хотя бы одна из частей *x* (вещественная или мнимая) является NaN, и `False` в противном случае.151152#### `cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)`153154Возвращает `True`, если значения *a* и *b* близки друг к другу, и `False` иначе.155156Близость двух значений определяется заданными абсолютной и относительной допустимыми погрешностями.157158*rel\_tol* – это относительная допустимая погрешность: максимально допустимая разница между *a* и *b*, взятая относительно большего абсолютного значения *a* или *b*. Например, чтобы установить погрешность 5%, передайте `rel_tol=0.05`. По умолчанию погрешность равна `1e-09`, что гарантирует совпадение двух значений с точностью примерно до 9 десятичных знаков. *rel\_tol* должен быть больше нуля.159160*abs\_tol* – это минимальная абсолютная допустимая погрешность, полезная для сравнений вблизи нуля. *abs\_tol* должен быть не меньше нуля.161162Если ошибок не возникло, результатом будет: `abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`.163164Особые значения IEEE 754: `NaN`, `inf` и `-inf` обрабатываются согласно правилам IEEE. В частности, `NaN` не считается близким ни к какому другому значению, включая `NaN`. `inf` и `-inf` считаются близкими только сами к себе.165166Новое в версии 3.5.167168> **См. также**169>170> [**PEP 485**](https://python-all.ru/3.11/library/cmath.html) – Функция для проверки приблизительного равенства171172## Константы173174#### `cmath.pi`175176Математическая константа *π*, в виде числа с плавающей запятой.177178#### `cmath.e`179180Математическая константа *e*, в виде числа с плавающей запятой.181182#### `cmath.tau`183184Математическая константа *τ*, в виде числа с плавающей запятой.185186Новое в версии 3.6.187188#### `cmath.inf`189190Положительная бесконечность с плавающей запятой. Эквивалентна `float('inf')`.191192Новое в версии 3.6.193194#### `cmath.infj`195196Комплексное число с нулевой действительной частью и положительной бесконечной мнимой частью. Эквивалентно `complex(0.0, float('inf'))`.197198Новое в версии 3.6.199200#### `cmath.nan`201202Значение с плавающей запятой «не число» (NaN). Эквивалентно `float('nan')`.203204Новое в версии 3.6.205206#### `cmath.nanj`207208Комплексное число с нулевой действительной частью и NaN в мнимой части. Эквивалентно `complex(0.0, float('nan'))`.209210Новое в версии 3.6.211212Обратите внимание, что набор функций похож на набор из модуля [`math`](https://python-all.ru/3.11/library/math.html#module-math), но не идентичен ему. Причина наличия двух модулей в том, что некоторым пользователям неинтересны комплексные числа, и они, возможно, даже не знают, что это такое. Они предпочли бы, чтобы `math.sqrt(-1)` вызывал исключение, а не возвращал комплексное число. Также следует отметить, что функции, определённые в [`cmath`](https://python-all.ru/3.11/library/cmath.html#module-cmath), всегда возвращают комплексное число, даже если ответ может быть выражен вещественным числом (в этом случае комплексное число имеет нулевую мнимую часть).213214Примечание о разрезах ветвей: это кривые, вдоль которых данная функция перестаёт быть непрерывной. Они являются необходимым свойством многих комплексных функций. Предполагается, что если вам нужно вычислять комплексные функции, вы разбираетесь в разрезах ветвей. Для понимания обратитесь к любой (не слишком элементарной) книге по комплексному анализу. Для получения информации о правильном выборе разрезов ветвей для численных расчётов хорошим справочником может служить следующее издание:215216> **См. также**217>218> Kahan, W: Ветви разрезов для комплексных элементарных функций; или Много шума из-за знакового бита. В Iserles, A., и Powell, M. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165–211.219