Модуль и аргумент

Описываем число не координатами $(a,b)$, а длиной и углом — это открывает дорогу к форме Эйлера.

Аргумент $\arg(z)=\varphi$ — угол между положительной вещественной осью и вектором к точке $z$.

Полярные координаты

Точку на плоскости можно задавать двумя способами: декартовыми координатами $(a,b)$ или полярными — расстоянием до начала $r=|z|$ и углом $\varphi$. Связь между ними:

$$a=r\cos\varphi,\qquad b=r\sin\varphi.$$

Обратно модуль считается по Пифагору, а угол — через арктангенс:

$$r=\sqrt{a^2+b^2},\qquad \varphi=\operatorname{atan2}(b,a).$$

Функция $\operatorname{atan2}(b,a)$ важнее обычного $\arctan(b/a)$: она учитывает знаки обеих координат и поэтому правильно определяет четверть. Простой $\arctan$ путает, например, первую и третью четверти.

Пример

Возьмём $z=1+i$. Модуль $r=\sqrt{1+1}=\sqrt2\approx1.414$. Угол: точка лежит на биссектрисе первого квадранта, значит $\varphi=45^\circ=\pi/4$ радиан.

import cmath, math
z = 1 + 1j
r, phi = cmath.polar(z)
print("Модуль r =", round(r, 4))
print("Аргумент (рад) =", round(phi, 4))
print("Аргумент (град) =", round(math.degrees(phi), 2))

Вывод:

Модуль r = 1.4142
Аргумент (рад) = 0.7854
Аргумент (град) = 45.0

$0.7854$ радиан — это ровно $\pi/4$, то есть $45^\circ$, как и ожидалось.

Обратный переход

Функция cmath.rect(r, phi) делает обратное: по модулю и углу строит число $a+bi$.

import cmath, math
z = cmath.rect(math.sqrt(2), math.pi/4)
print("Восстановленное число:", complex(round(z.real, 4), round(z.imag, 4)))

Вывод:

Восстановленное число: (1+1j)

Как работает под капотом

Аргумент определён с точностью до $2\pi$: угол $45^\circ$ и $405^\circ$ указывают на ту же точку. Чтобы ответ был однозначным, берут главное значение аргумента в диапазоне $(-\pi,\pi]$ — именно его возвращает cmath.phase и atan2. Полярная запись особенно удобна для умножения: при перемножении модули умножаются, а аргументы складываются. Это мы докажем в следующем разделе.

Частые ошибки

  • Использовать $\arctan(b/a)$ вместо $\operatorname{atan2}(b,a)$ и получить угол не из той четверти.
  • Путать радианы и градусы. Python работает в радианах; для градусов нужен math.degrees.
  • Забывать, что у нуля аргумент не определён (направления нет).

Итог

  • Полярная запись: модуль $r=|z|$ и аргумент $\varphi=\operatorname{atan2}(b,a)$.
  • Главное значение аргумента лежит в $(-\pi,\pi]$.
  • В Python: cmath.polar — в полярные, cmath.rect — обратно.
Проверьте себя
1. Чему равен аргумент числа $z=1+i$ (главное значение)?
A$0$
B$\pi/4$
C$\pi/2$
D$\pi$
2. Почему предпочитают $\operatorname{atan2}(b,a)$ вместо $\arctan(b/a)$?
Aatan2 быстрее считается
Batan2 учитывает знаки обеих координат и даёт правильную четверть
Carctan не существует в Python
DЭто одно и то же