Pull to refresh

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

Reading time 7 min
Views 34K
Вы когда-нибудь задумывались о том, как мы считаем? Как устроен счет на низком уровне? Например, как выглядят на прямой единичные отрезки в выражении 1 + 1 = 2. Или что такое квадратный корень из $i$.

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

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

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


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

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

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



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

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

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

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

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

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



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

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

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



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

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

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

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



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



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

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

3 + -3 = 0


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

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

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

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

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

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



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

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


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



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

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



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

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



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

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

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

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

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




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

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

$1 + 1i = 1.414 \cdot i^{\frac{1}{2}}$


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

$ \begin{aligned} (0.6 + 0.8i) \cdot (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 \cdot i ^ {\frac{\arcsin(0.8)}{\frac{\pi}{2}}}\\ &= 1 \cdot i^{0.590334...}\\ (1 \cdot i^{0.590334...}) \cdot (1 \cdot i^{0.590334...}) &= 1 \cdot i^{0.590334... + 0.590334...}\\ &= 1 \cdot i^{1.180669...}\\ {1.180669...} \cdot \frac{\pi}{2} &= {1.854590...}\\ sin(1.854590...) &= 0.96\\ cos(1.854590...) &= -0.28 \end{aligned} $




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

$y = i^x$






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

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

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





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

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



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

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


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




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

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

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



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

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

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






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

Еще есть функция altform(), которая показывает запись комплексного числа в виде $r\cdot i^c$
console.log(altform(math.i.sqrt()))
0.707106781187 + 0.707106781187i = 1 * i^0.5 = 1 * i^(1/2)

Также есть объекты Plotly и math, которые добавляются библиотеками.
Tags:
Hubs:
+19
Comments 39
Comments Comments 39

Articles