Немного об арифметике

vtt-3zegfybsa20hruiwrq19utq.pngВы когда-нибудь задумывались о том, как мы считаем? Как устроен счет на низком уровне? Например, как выглядят на прямой единичные отрезки в выражении 1 + 1 = 2. Или что такое квадратный корень из $i$.

Счет появился не просто чтобы считать, а чтобы посчитать какие-то объекты. Например, количество яблок или антилоп в стаде. То есть всегда есть единица измерения.

Можно считать на пальцах или палочках, то есть задать некоторое соответствие между единицами измерения. Одна антилопа — одна палочка. Так как любые другие единицы можно заменить на палочки, то будем рассматривать только их. Палочка это абстрактная единица измерения.

Простые действия


Надо заметить, что счет идет в порядке возрастания. Такая счетная палочка сама по себе подразумевает наличие следующей палочки. То есть единица измерения имеет направление. А значит это единичный вектор.

Добавляя один единичный вектор в конец другого, мы будем перемещаться по числовой прямой, получая новые значения.

И тут появляется 4 варианта.

ce4l1t1xkvuomdnu9cj7nsb4_aq.png

Как выглядят концы единичного отрезка? Какой вариант лучше моделирует реальный счет?

Первый не подходит. Двигаясь таким образом, мы никогда не попадем в целое число. Вроде досчитали до 1, а ни первому ни второму вектору оно не принадлежит.

Четвертый тоже не подходит. Если мы в точке 1, то непонятно, это первый вектор или второй. Когда мы считаем овечек, прыгающих через забор, у них нет общих точек.

Второй выглядит самым правильным. Дошли до точки 1 — значит отсчитали 1 объект. Каждая точка принадлежит одному вектору. Его мы и будем использовать в дальнейшем.

Третий тоже выглядит подходящим. Но у него есть особенность — точка 0 принадлежит первому вектору. Когда еще ничего нет, мы считаем что что-то уже есть. Это не похоже на реальный счет. Зато похоже на счет, используемый в компьютерах. Первая 32-разрядная ячейка в оперативной памяти занимает байты с адресами 0, 1, 2, 3. Чтобы было похоже на счет реальных объектов, надо было бы отсчитывать от адреса 1×4 и брать байты со смещением 0, -1, -2, -3.

Значит, второй вариант.

mmrcqhr32bvygzqd3kjsjndkv0g.png

Обратите внимание, ноля здесь нет. Если просто считать по порядку, то не совсем очевидно, что точка отсчета не первая единица, а что-то до нее. Возможно поэтому ноль появился позже появления собственно счета.

Результат сложения можно представить в виде одного вектора из начальной точки в конечную.

Как сделать вычитание? Для этого надо добавить в рассмотрение вектор, направленный в обратную сторону.

v7h2ili1p02phzt0a_do-qthn88.png

Будем считать, что закрашенная точка означает стрелочку, то есть показывает направление вектора.

Чтобы различать эти вектора, назовем их соответственно положительным и отрицательным.

Можно ввести операцию изменения направления. После применения ее к положительному вектору получается отрицательный. После применения ее 2 раза получается исходный вектор. По-другому ее можно назвать «унарный минус» или «смена знака».

Отрицательные вектора тоже образуют последовательность.

y4qjrqkht0y1412vlnhigdkjc5i.png

Если бы мы рассматривали только отрицательное направление, можно было бы использовать те же числа, что и для положительного, то есть без знака. Но мы рассматриваем оба, и надо отличать отсчеты в положительном и отрицательном направлении. Поэтому у чисел в отрицательном направлении стоит знак «минус». Можно и положительные числа обозначить знаком «плюс», но это необязательно, отличие и так есть.

b4qa-tkmlzhjscakchxpbqt6uy4.png

Что это означает? Что есть положительный и отрицательный 0. Геометрически они находятся в одной точке. Это связывает положительный и отрицательный луч направления счета.

Ноль можно рисовать закрашенным, но для этого надо ввести особый вектор нулевой длины, к которому и прибавлять единичные. Его можно получить из единичных векторов.

3 + -3 = 0
op9yjtujj4prdteplbe_46v0ii8.png

Технически у него левый край тоже не включен, но правый край находится в той же точке. То есть вектор превращается в точку, или по-другому, точка это частный случай вектора.

Интересный момент, мы можем подойти к нулю слева или справа. Соответственно и знак у него будет положительный или отрицательный. Что-то похожее упоминается здесь.

Раз точка 0 это вектор нулевой длины, то можно сказать, что и отдельно взятая на прямой точка 1, или 2, или 3, это тоже вектор нулевой длины. Получается, есть нулевые векторы, которые связаны ненулевыми. Это решает вопрос, почему отрезок ненулевой длины состоит из бесконечного числа точек нулевой длины. Потому что точки всегда соединены ненулевыми векторами. Это две противоположности, которые образуют систему. Как 0 и 1 в двоичной системе счисления.

С умножением все просто — берем целиком второй вектор столько раз, сколько единиц в первом векторе.

С делением сложнее. Так же как вычитание это сложение со сменой знака, так и деление это умножение на обратное число. То есть надо задать способ получения вектора 1/N. Так как он меньше единичного вектора, надо ввести более мелкую единицу измерения.

Например, как разделить вектор длиной 12 на 10 частей? Вводим новый вектор некоторой длины и задаем условие, что этот вектор, повторенный 10 раз, дает исходный единичный вектор. В результате снова получаем вычисления в целых числах. 120 мелких векторов делим на 10 частей, получаем 12 мелких или 1.2 единичного.

eg1wkdnrnduvjzo0z3xjlic7n6s.png

Как выразить через такие векторы число пи? Никак. Точное выражение через единицы измерения означает точную десятичную запись. Точно так же нельзя выразить ими число $\frac{1}{3}$ = 0.333(3). Иначе надо будет до бесконечности вводить все более мелкие единицы измерения. Можно только обозначить эти числа другим способом — буквой или выражением.
Число $\frac{1}{2}$ = 0.5 можно выразить, но только потому что основание нашей системы счисления кратно этому числу. В десятичной системе все дроби периодические, кроме тех, знаменатели у которых кратны 2 или 5. Это может быть не совсем очевидно, так как мы чаще работаем с конечными дробями

Выходим за границы


Как попасть в эту точку?

6usjviypupfaxrgsgcf6m_u7mlo.png

Двигаясь только по прямой мы не можем в нее попасть. Значит, надо ввести еще один единичный вектор, перпендикулярный первому. Ввести положительное и отрицательное направление, определить правила сложения и вычитания между всеми видами векторов. Получается слишком сложно. Много сущностей и заданных правил, к тому же похожих друг на друга.

Что если подойти с другой стороны? Что надо сделать, чтобы попасть в точку в стороне от основного направления? Надо повернуть.

7cequvmxygiqnjycukqtwdg773k.pngjzutggvbw3102u6cj-m1jjm5ods.png

Повернули один вектор и складываем с другим.

Нетрудно заметить, что поворот положительного единичного вектора 2 раза дает отрицательный вектор.

f-pf12j31tz-ryt_xwiztdms-xm.png

Ничего не напоминает? Да ведь это умножение на мнимую единицу.

Значит что получается. $i$ это не вектор, перпендикулярный вещественному направлению. $i$ это поворот на прямой угол. Это не единица направления, а единица поворота. Умножение вектора на $i$ означает поворот вектора на $\frac{\pi}{2}$ через комплексное пространство. Смена знака это поворот 2 раза.

«Комплексное пространство» означает что если мы рассматриваем двумерный график функции $y=f(x)$, то мнимая часть $x$ находится в плоскости, перпендикулярной поверхности графика. Для ее отображения понадобится третье измерение, а мнимая часть $y$ потребует уже четвертого. Для одномерной числовой прямой достаточно второго.

А что такое квадратный корень из $i$? Видимо это такое значение, что умножение единичного вектора на него 2 раза дает вектор $1*i$.
Раз умножение на $i$ это поворот на $\frac{\pi}{2}$, то умножение на корень из $i$ это поворот на $\frac{\pi}{4}$.

Проверим в Wolfram Alpha.

idqqxhjcupgyq28_-kkdn-rwbte.png

Ага, так и есть.

Любое выражение вида $a + bi$ можно представить в виде $r * i^c$, где $r$ это длина вектора, а $c$ задает угол поворота как коэффициент для $\frac{\pi}{2}$.

$1 + 1i = 1.414 * i^{\frac{1}{2}}$
em29sywroor1yreubn9vkecnybg.png

При умножении чисел длины перемножаются, а углы складываются.

$ \begin{aligned} (0.6 + 0.8i) * (0.6 + 0.8i) = (0.36 + 0.48i + 0.48i - 0.64) = -0.28 + 0.96i\\ \end{aligned} $


$ \begin{aligned} 0.6 + 0.8i &= 1 * i ^ {\frac{\arcsin(0.8)}{\frac{\pi}{2}}}\\ &= 1 * i^{0.590334...}\\ (1 * i^{0.590334...}) * (1 * i^{0.590334...}) &= 1 * i^{0.590334... + 0.590334...}\\ &= 1 * i^{1.180669...}\\ {1.180669...} * \frac{\pi}{2} &= {1.854590...}\\ sin(1.854590...) &= 0.96\\ cos(1.854590...) &= -0.28 \end{aligned} $


fmwmyj52h4mouy2q0fyy0qtcknq.png

4 умножения на i возвращают вектор в исходное состояние. График умножения на $i$ с изменением степени по 0.1 дает обычную единичную окружность. Если развернуть ее по оси $x$, получим обычные синус и косинус. Как думаете, как выглядят синус и косинус в 3D? Это спираль.

$y = i^x$

cqj-b97sfqgypddoiee8i0nb7z0.png
rxtl_owgcbn9xu4kbad3xiiseko.png
4abtsrgwrseno9ier2tb0dibmzs.png

Здесь период целочисленный, так как по $x$ отсчитываются обороты, а не длина окружности.

Картинки кликабельные, по ссылкам интерактивная страница с графиками. В блоке «Axis mappping» определяется, какие 3 из 4 осей показываются в 3D. В поле «Function 1» и «Function 2» находится javascript-код, из которого создается объект типа Function.
В URL хэш, в хэше base64, в base64 json, в json значения полей.
Подписи относятся не к центральным осям, а к линиям, по которым откладываются цифры.
Расчеты в комплексных числах выполняются с помощью math.js, графики сделаны с помощью plotly.js.

А что если умножать не на $i$, а на $1.1i$? Вместо окружности получится расходящаяся логарифмическая спираль.
f0_qtr28na6apxe0qrp_bkma0re.png
2waacgkhmt1yrl2xhenk_yaabd8.png
ymile1tmaenuwjmpz7ywoemqw8y.png

Вернемся ненадолго к делению. Обратное число это степень -1. Это связано с движением по этой логарифмической спирали.

Это график функции $y = 2i^x,\,x=-1..1$. Длина вектора изменяется от $\frac{1}{2}$ до 2.
rcataw4vi4obisc4l0uz1k9uym4.png

График длины радиуса это обычный экспоненциальный график вида $a^x$.

Особый случай


Рассмотрим график функции $e^x$

iscvldxprvk9181nx6ibtccycku.png

Тождество Эйлера выглядит так:
$ e^{i\pi} + 1 = 0 $

Это особый случай формулы Эйлера. Что оно означает?
Оно означает, что значение функции $e^x$ в вещественной точке $x = 0$ c мнимой частью $\pi$ равно -1.

Добавим график функции $e^{ix}$.
tj24vd15m8_rxekteshh90gr_o4.png

Он идет перпендикулярно вещественному и выглядит как $\cos(x)$. Поэтому $e^{-i\pi}$, $e^{3i\pi}$, $e^{-3i\pi}$ тоже равны -1.

Картинку, которую рисуют в википедии, можно получить так. Отличается значение для оси Y в Axis mapping.

В трехмерном виде получается волнистая поверхность.
ebgaldil-okwth-msm2oh5_1xvq.png

x4tsgbferos7laeottxep4r5nkc.png

Чтобы получить последний график, надо дополнительно в консоли запустить функцию buildFuncSurface(). В интерфейсе можно задать только 2 серии точек, а на последнем их 3. Для управления сериями есть функции addTraces()/deleteTraces().

Еще есть функция altform(), которая показывает запись комплексного числа в виде $r*i^c$

console.log(altform(math.i.sqrt()))
0.707106781187 + 0.707106781187i = 1 * i^0.5 = 1 * i^(1/2)


Также есть объекты Plotly и math, которые добавляются библиотеками.

© Habrahabr.ru