29Комплексные числа
Мы начинали курс с обсуждения чисел, ими же и закончим. Всё началось с натуральных чисел. Натуральные числа можно складывать, умножать и возводить в степени, но не всегда можно вычитать. Попробуйте-ка вычесть пять из трёх — если вам известны только натуральные числа, не получится. Приходится изобретать отрицательные. С отрицательными числами вычитание работает без проблем, но с делением есть трудности — четыре на два поделятся, а на три — нет. Рациональные числа лишены этой проблемы: делить можно что угодно на что угодно, кроме нуля (с нулём так всегда будет, тут уж ничего не поделать). Однако, корни извлекать не всегда получается — например, корень из двух не является рациональным числом. Чтобы эту проблему решить, придумали вещественные числа. Теперь корни извлекаются — но только из неотрицательных чисел. А что делать, если очень хочется извлечь корень из отрицательного числа? Как обычно — придумывать новые числа!29.1Построение комплексных чисел
29.1.1Мнимая единица
Когда мы не смогли поделить четыре на три, мы сказали — ну и ладно, давайте просто объявим, что — это новое число — не натуральное и не целое, но рациональное. Потом мы придумали две вещи: во-первых, как вложить множество целых чисел в множество рациональных — мы знаем, что целое число — это то же самое, что рациональное число . Во-вторых, как рациональные числа складывать и умножать.С корнями из отрицательных чисел можно поступить аналогично. Допустим, очень хочется вычислить квадратный корень из минус единицы. Давайте считать, что мы его вычислили, и обозначим результат через . Эта штука называется мнимой единицей. Мы бы хотели извлекать квадратный корень не только из минус единицы, но и из других отрицательных чисел. Однако, как мы скоро увидим, ничего специального для этого делать не придётся.
Конечно, не является вещественным числом, поскольку мы хорошо знаем, что квадрат любого вещественного числа неотрицателен (ну вот просто так мы определили операции — минус на минус даёт плюс, поэтому отрицательного ничего не получится). Тем не менее, давайте считать, что это всё-таки число — какого-то нового, невиданного доселе типа — и что его можно включать в арифметические операции.
Самое главное (и, по большому счёту, единственное), что мы знаем про и арифметические операции — что если его умножить на себя, то получится минус единица:
Итак, по определению, множество комплексных чисел — это множество
29.1.2Арифметические операции с комплексными числами
В дальнейшем мы будем предполагать, что привычные для нас правила работы с числами — например, «от перестановки слагаемых сумма не меняется» и т.д. сохраняются и в случае комплексных чисел — по крайней мере, до тех пор, пока это возможно.
Сложение. Пусть и — два комплексных числа. Их сумма определяется так:
Умножение. Тут будет посложнее.
29.1.3Комплексная плоскость
Всякие комплексное число задаётся парой вещественных чисел — действительной и мнимой частью. С другой стороны, мы знаем, что парами вещественных чисел задаются точки на плоскости. Каждой точке можно также сопоставить радиус-вектор — стрелочку, которая начинается в нуле, а заканчивается в этой точке. (Эту стрелочку также можно переносить по всей плоскости, сохраняя направление и длину — иногда бывает полезно откладывать вектор не от нуля, а от другой точки.) Мы будем думать про комплексные числа как про такие векторы. Точка и её радиус-вектор соответствуют вещественному числу , а точка — числу .Вероятно, вы помните, что векторы на плоскости складываются по правилу параллелограмма или правилу треугольника (что в сущности одно и то же). В координатах, сложение векторов происходит покомпонентно — первая компонента первого вектора складывается с первой компонентой второго, втарая — со второй. Точно так же складываются комплексные числа. Поэтому сложение комплексных чисел работает в точности так же, как сложение векторов.
С умножением интереснее. На плоскости не существует обычного векторного умножения. (Вероятно, вы помните, что есть скалярное умножение, но оно на выходе возвращает не вектор, а число — скаляр; бывает ещё векторное умножение, но оно действует в трёхмерном пространстве, а не на плоскости.) А вот комплексные числа умножать можно. Есть ли у умножения какой-то геометрический смысл? Есть! Но сперва нужно поговорить про полярные координаты.
29.1.4Тригонометрическая форма записи комплексных чисел
Задать точку на плоскости можно по-разному. Можно — её координатами в декартовой системе, как мы это обычно делаем. А можно — в полярных координатах.Возьмём некоторое направление — например, направление горизонтальной координатной оси от начала координат в сторону плюс бесконечности. Рассмотрим теперь какую-нибудь точку . Она однозначно задаётся двумя числами: расстоянием до начала координат и углом , который составляет с нашим исходным направлением. Числа и называются полярными координатами точки .
Полярные координаты иногда бывают удобнее декартовых. Например, чтобы задать единичную окружность, в декартовых координатах приходится вспоминать про теорему Пифагора и записывать уравнение , а в полярных соответствующее уравнение выглядит гораздо проще: .
Если заданы полярные координаты, восстановить декартовы легко. Если , то и — это определение синуса и косинуса. Если , всю картинку нужно растянуть в раз, то есть умножить обе координаты на . Получается такая штука:
Умножение в тригонометрической форме. Посмотрим, как работает формула умножения комплексных чисел (29.1), если представлять их не в декартовых координатах, а в комплексных.
Верный ответ. Верно! Собственно, если взять число , умножить его на , оно повернётся как раз на в положительном направлении (против часовой стрелки).
Неверный ответ. Попробуйте взять число и умножить его на . Куда оно повернётся?
Неверный ответ. Попробуйте взять число и умножить его на . Куда оно повернётся?
Неверный ответ. Попробуйте взять число и умножить его на . Что с ним произойдёт?
29.1.5Комплексное сопряжение и деление
Обсудим ещё две важные операции. Во-первых, с комплексным числом можно сделать такую штуку, которую нельзя сделать в вещественным числом: поменять знак мнимой части. Вернее, сделать её с вещественным числом можно, но вещественное число от этого не поменяется. Если же у комплексного числа есть ненулевая мнимая часть, её знак заменится на противоположный и получится другое комплексное число. Эта операция называется комплексным сопряжением и обозначается чертой:Рассмотрим теперь любое число . Что будет, если умножить его на сопряженное?
Научимся теперь делить комплексные числа. Для этого научимся для всякого находить такое число , что . То есть — обратное к .
Начнём с равенства, которое мы только что вывели:
29.2Функции от комплексных чисел
29.2.1Возведение в квадрат
Мы начали с того, что добавили к обычным вещественным числам одно-единственное число — квадратный корень из минус единицы — и пообещали, что в получившейся системе чисел можно будет найти квадратный корень из любого числа. Давайте проверим, что это верно. Но сначала разберёмся, как действует возведение в квадрат.Пусть , , то есть — это отобржаение из в — как говорят, комплекснозначная функция комплексного аргумента. К сожалению, представлять такие функции так, как мы привыкли, в виде графиком, практически невозможно — поскольку комплексное число соответствует двум вещественным, график такой функции пришлось бы рисовать в четыерёхмерном пространстве, которое очень трудно представить. Попробуем по-другому.
Запишем в тригонометрической форме:
Как действует это отображение? Для простоты рассмотрим случай, когда с радиусом ничего не происходит — а именно, пусть . В этом случае наше квадратичное отображение просто удваивает аргумент, то есть отображает точку на единичной окружности с угловой координатой в точку .
Пусть точка постепенно обходит окружность от точки в положительном направлении (против часовой стрелки). Что происходит с ? Она также обходит окружность, но вдвое быстрее, см. анимацию на рис. 29.1. Когда сделает четверть оборота и окажется в точке с (то есть в точке ), её квадрат сделает полоборота и окажется в — так и должно быть, мы знаем, что . Дальше будет преодолевать расстояние от до , за это время преодолеет ещё полоборота и окажется в точке . Всё логично: . Потом будет проходить вторую половину окружности, а — обходить всю окружность по второму разу. В частности, в тот момент, когда попадёт в точку (что соответствует ), её квадрат снова попадёт в . То есть не только , но и (что, конечно, мгновенно следует из правила «минус на минус даёт плюс», которое никто не отменял). Итак, полное прохождение окружности точкой соответствует двукратному прохождению окружности точкой ?
29.2.2Квадратный корень
Попробуем теперь понять, как найти квадратный корень из комплексного числа. Это операция, обратная к возведению в квадрат. Чтобы возвести комплексное число в квадрат нужно его модуль возвести в квадрат, а аргумент удвоить. Значит, чтобы сделать обратную операцию, нужно извлечь корень из модуля (это всегда возможно, модуль — неотрицательное вещественное число) и поделить аргумент на два.Звучит просто? Но не совсем.
Мы говорили о том, что аргумент не является определенным однозначно. Например, можно сказать, что аргумент числа — это , а можно сказать, что , а можно — что . И всё это будет верно, потому что эти аргументы отличаются ровно на и задают одну и ту же точку.
Однако, когда мы их разделим пополам, вычисляя корень, мы можем получить разные точки. Действительно, если аргумент равняется , я его делю пополам, и получаю аргумент . Ему соответствует точка . Если же я взял аргумент , после деления пополам я получу аргумент , что соответствует числу . То есть при делении аргумента пополам можно получить две разные точки.
Это, конечно, не должно нас удивлять. Анализируя отображение возведения в квадрат, мы выяснили, что оно не инъективно — а именно, у каждой точки, кроме нуля, есть ровно два прообраза. Поэтому логично, что обратное отображение не определено однозначно, и может принимать два разных значения.
Собственно, с такой же проблемой мы сталкивались, когда определяли обычный квадратный корень из неотрицательного вещественного числа. Однако, там мы легко вышли из этой ситуации, ограничив нашу функцию на неотрицательную полуось, или, иными словами, потребовав, чтобы квадратный корень (строго говоря, «арифметический квадратный корень») принимал только неотрицательные значения. Таким образом, мы получили корректно определенную, однозначную функцию, а в приложениях — например, в формуле корней квадратного уравнения — просто приписывали перед этим нашим «арифметическим квадратным корнем» знак , который позволял не терять решений. Можем ли мы поступить так же с квадратным корнем из комплексного числа? Например, определить функцию «комплексный арифметический квадратный корень» таким образом, чтобы его значение всегда имело неотрицательную вещественную часть, или ещё как-то выбрав один из возможных корней и сняв таким образом неоднозначность? Давайте попробуем.
Возьмём снова точку на окружности, и пусть точка — это её квадратный корень. Пусть сначала , то есть аргумент числа равен нулю или . Есть два возможных кандидата для значения корня — либо , либо . Конечно, мы хотим, чтобы корень из единицы равнялся единице. Итак, пусть при . Теперь начнём постепенно двигать по окружности. Мы также хотим, чтобы корень был непрерывной функцией, и когда мы немножко увеличим аргумент числа , аргумент числа не должен измениться сильно. Это означает, что не может такого быть, чтобы мы только-только выехали из единицы, а вдруг стал близок к . Значит, если, например, аргумент числа равен , то аргумент числа будет , а не . Пусть мы так постепенно сдвигая , пройдём им полоборота по окружности, оказавшись в точке . В это время проедет четверть оборота и окажется в точке . Что ж, пока всё отлично — мы же знаем, что корень из минус единицы равен , так и должно быть. Однако, пусть теперь едет дальше, и проезжает вторую половину окружности. В это время проедет вторую четвертинку и окажется в точке .
Стоп.
Но ведь точка , проехав вторую половину окружности, сделал полный круг и вернулась в . И мы только что сказали, что точка , которая равна корню из , при это оказалась равной . Хотя начинали мы с того, что принудительно положили корень из единицы равным единице. Как же так? Откуда вдруг противоречие?
Никакого содержательного противоречия тут на самом деле нет: и в принципе число может с тем же правом претендовать на звание квадратного корня из единицы, как и число . Единственное, с чем возникло противоречие — это с нашим предположением, что мы можем по своем усмотрению однозначно выбрать, какому из двух возможных чисел этот корень равен. И вот это противоречие мы уже не сможем преодолеть — по крайней мере, сохраняя непрерывность корня.
В комплексных числах невозможно определить функцию таким образом, чтобы она была непрерывной, но при этом однозначной — то есть так, как мы привыкли определять функции. Фактически, для всякого значения , у принимает два разных значения (отличающихся знаком), и, более того, нельзя сказать, какое из них «первое», а какое «второе» — в результате непрерывного обхода точкой вокруг нуля, эти значения поменяются местами.
Вот таким необычным образом могут выглядеть функции на множестве комплексных чисел.
29.2.3Экспонента
Давайте поговорим ещё про одну важную функцию — экспоненту. Для вещественнного числа мы определяли экспоненту как пределКонечно, неплохо было бы доказать, что этот ряд сходится, но мы этого делать не будем. Вместо этого попробуем найти более явную формулу для экспоненты.
Для начала, рассмотрим случай чистого мнимого , то есть . Посчитаем первые несколько степеней , чтобы понять общий принцип: Итак, коэффициенты перед меняются таким образом: , , , , снова и дальше процесс повторяется циклически.
Запишем теперь первые члены ряда (29.4) и выделим вещественную и мнимую части:
Наконец, если у есть не только мнимая, но и действительная часть, экспонента определяется следующим естественным образом:
29.2.4Логарифм
Итак, у нас есть экспонента. Как определить логарифм?Посмотрим ещё раз на формулу (29.5). Её можно записать в таком виде. Пусть . Тогда
Во-первых, легко найти : раз , числа и вещественны, и можно посчитать обычный вещественный логарифм:
В комплексных числах экспонента не является инъективным отображением — что, впрочем, неудивительно, учитывая появление в ней синусов и косинусов. Более того, у каждой точки под действием экспоненты оказывается бесконечно много прообразов (а не два, как было в случае с возведением в квадрат). Поэтому каждое значение логарифма — это набор из бесконечного числа точек! И мы снова не можем выделить из них одну правильную.
29.3Фрактал Мандельброта
Теперь я могу рассказать про штуку, которая — в какой-то мере — привела меня в математику. Может быть, вам тоже понравится. Это фрактал Мандельброта.Возьмём произвольное комлпексное число и рассмотрим такую последовательность комплексных чиспел :
К чему стремится эта последовательность? Если , вся последовательность тождественно нулевая, и значит стремится к нулю. Если маленькое, наверное, последовательность колеблется где-то вблизи нуля или какой-то другой точки с небольшим модулем. Если большое, логично ожидать, что возведение в квадрат сделает его ещё больше и довольно быстро последовательность будет стремиться к бесконечности. Но как выглядит разделительная область между двумя режимами — когда последовательность ограничена и когда неограничена?
Давайте возьмём все точки комплексной плоскости, и раскрасим их в разные цвета. Если последовательность для выбранного значения не стремится к бесконечности — закрасим в чёрный. Если стремится — закрасим в разные цвета, в зависимости от того, как быстро она это делает (например, как быстро модуль становится больше десяти или даже двух — можно доказать, что если это произошло, то последовательность точно стремится к бесконечности). Что получится? Наверное, что-то вроде окружности? Или эллипс? Или что-то более сложное?
Оказывается, получается что-то неимоверно сложное — а именно, вот такая картинка.
import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py
def mandelbrot(pmin, pmax, ppoints, qmin, qmax, qpoints,
max_iterations=200, infinity_border=10):
image = np.zeros((ppoints, qpoints))
p, q = np.mgrid[pmin:pmax:(ppoints*1j), qmin:qmax:(qpoints*1j)]
c = p + 1j*q
z = np.zeros_like(c)
for k in range(max_iterations):
z = z**2 + c
mask = (np.abs(z) > infinity_border) & (image == 0)
image[mask] = k
z[mask] = np.nan
return -image.T
plt.figure(figsize=(10, 10))
image = mandelbrot(-2.5, 1.5, 1000, -2, 2, 1000)
plt.xticks([])
plt.yticks([])
plt.imshow(image, cmap='flag', interpolation='none')
Множества с такими свойствами называются фракталами. Про фракталы у нас есть дополнительный листок с задачами — правда, множества Мандельброта там нет, потому что мы не обсуждали методов, которые позволили бы вам его исследовать — этим занимается отдельный раздел математики — так называемая голоморфная динамика.
Ну а пока можно просто посмотреть на картинку. Что самое удивительно — всю эту сложность породила одна очень простая формула: !
Пожалуй, трудно придумать лучшую иллюстрацию к величию и красоте математического мира — первые шаги в котором мы сделали в этом курсе.