Модуль и аргумент
Описываем число не координатами $(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— обратно.