> **Источник:** https://python-all.ru/3.1/library/cmath.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 9.3. `cmath` – Математические функции для комплексных чисел

Этот модуль всегда доступен. Он предоставляет доступ к математическим функциям для комплексных чисел. Функции этого модуля принимают целые числа, числа с плавающей запятой или комплексные числа в качестве аргументов. Они также примут любой объект Python, у которого есть метод [`__complex__()`](https://python-all.ru/3.1/reference/datamodel.html#object.__complex__) или [`__float__()`](https://python-all.ru/3.1/reference/datamodel.html#object.__float__): эти методы используются для преобразования объекта в комплексное число или число с плавающей запятой соответственно, после чего функция применяется к результату преобразования.

> **Примечание**
>
> На платформах с аппаратной и системной поддержкой знакового нуля функции, использующие разрезы ветвей, непрерывны по *обе* стороны разреза: знак нуля отличает одну сторону от другой. На платформах без поддержки знакового нуля непрерывность описывается ниже.

## 9.3.1. Преобразования в полярные координаты и обратно

Комплексное число Python `z` хранится внутри в *прямоугольных* или *декартовых* координатах. Оно полностью определяется своей *действительной частью* `z.real` и своей *мнимой частью* `z.imag`. Иными словами:

```python
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` равен нулю:

```python
>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793
```

> **Примечание**
>
> Модуль (абсолютное значение) комплексного числа *x* можно вычислить с помощью встроенной функции [`abs()`](https://python-all.ru/3.1/library/functions.html#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)`

.

## 9.3.2. Степенные и логарифмические функции

#### `cmath.exp(x)`

Возвращает экспоненциальное значение

`e**x`

.

#### `cmath.log(x[, base])`

Возвращает логарифм

*x*

по заданному

*основанию*

. Если

*основание*

не указано, возвращает натуральный логарифм

*x*

. Имеется один разрез ветви: от 0 вдоль отрицательной вещественной оси до -∞, непрерывный сверху.

#### `cmath.log10(x)`

Возвращает десятичный логарифм

*x*

. Имеет тот же разрез ветвей, что и

[`log()`](https://python-all.ru/3.1/library/cmath.html#cmath.log)

.

#### `cmath.sqrt(x)`

Возвращает квадратный корень

*x*

. Имеет тот же разрез ветвей, что и

[`log()`](https://python-all.ru/3.1/library/cmath.html#cmath.log)

.

## 9.3.3. Тригонометрические функции

#### `cmath.acos(x)`

Возвращает арккосинус

*x*

. Имеются два разреза ветвей: один простирается вправо от 1 вдоль вещественной оси до ∞, непрерывный снизу. Другой простирается влево от -1 вдоль вещественной оси до -∞, непрерывный сверху.

#### `cmath.asin(x)`

Возвращает арксинус

*x*

. Имеет те же разрезы ветвей, что и

[`acos()`](https://python-all.ru/3.1/library/cmath.html#cmath.acos)

.

#### `cmath.atan(x)`

Возвращает арктангенс

*x*

. Есть два разреза ветвей: один простирается от

`1j`

вдоль мнимой оси до

`∞j`

, непрерывно справа. Другой простирается от

`-1j`

вдоль мнимой оси до

`-∞j`

, непрерывно слева.

#### `cmath.cos(x)`

Возвращает косинус

*x*

.

#### `cmath.sin(x)`

Возвращает синус

*x*

.

#### `cmath.tan(x)`

Возвращает тангенс

*x*

.

## 9.3.4. Гиперболические функции

#### `cmath.acosh(x)`

Возвращает гиперболический арккосинус

*x*

. Имеется один разрез ветвей, идущий влево\\nот 1 вдоль вещественной оси до -∞, непрерывный сверху.

#### `cmath.asinh(x)`

Возвращает гиперболический арксинус

*x*

. Имеется два разреза ветвей:\\nОдин простирается от

`1j`

вдоль мнимой оси до

`∞j`

,\\nнепрерывный справа. Другой простирается от

`-1j`

вдоль\\nмнимой оси до

`-∞j`

, непрерывный слева.

#### `cmath.atanh(x)`

Возвращает гиперболический арктангенс

*x*

. Имеется два разреза ветвей: Один\\nпростирается от

`1`

вдоль вещественной оси до

`∞`

, непрерывный снизу. Другой\\nпростирается от

`-1`

вдоль вещественной оси до

`-∞`

, непрерывный\\nсверху.

#### `cmath.cosh(x)`

Возвращает гиперболический косинус

*x*

.

#### `cmath.sinh(x)`

Возвращает гиперболический синус

*x*

.

#### `cmath.tanh(x)`

Возвращает гиперболический тангенс

*x*

.

## 9.3.5. Функции классификации

#### `cmath.isinf(x)`

Возвращает

*True*

, если действительная или мнимая часть x положительна или отрицательная бесконечность.

#### `cmath.isnan(x)`

Возвращает

*True*

, если действительная или мнимая часть x не является числом (NaN).

## 9.3.6. Константы

#### `cmath.pi`

Математическая константа

*π*

, в виде числа с плавающей запятой.

#### `cmath.e`

Математическая константа

*e*

, в виде числа с плавающей запятой.

Обратите внимание: набор функций похож, но не идентичен набору из модуля [`math`](https://python-all.ru/3.1/library/math.html#module-math). Причина существования двух модулей в том, что некоторые пользователи не интересуются комплексными числами и, возможно, даже не знают, что это такое. Они предпочли бы, чтобы `math.sqrt(-1)` вызывал исключение, а не возвращал комплексное число. Также обратите внимание: функции, определённые в `cmath`, всегда возвращают комплексное число, даже если ответ можно выразить действительным числом (в этом случае комплексное число имеет нулевую мнимую часть).

Примечание о разрезах ветвей: это кривые, вдоль которых данная функция перестаёт быть непрерывной. Они являются необходимым свойством многих комплексных функций. Предполагается, что если вам нужно вычислять комплексные функции, вы разбираетесь в разрезах ветвей. Для понимания обратитесь к любой (не слишком элементарной) книге по комплексному анализу. Для получения информации о правильном выборе разрезов ветвей для численных расчётов хорошим справочником может служить следующее издание:

> **См. также**
>
> Кахан, У: Разрезы ветвей для комплексных элементарных функций; или Много шума из-за знакового бита. В книге Изерлеса, А. и Пауэлла, М. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165-211.
