Комментарии 28
По определению, мнимая единица - это корень из минус одного.
Некорректное определение, кто бы его не ввел и не использовал. Если уж и приводить мнимое значение к реальному, то лучше говорить +/-sqrt(-1)
.
Мое мнение как специалиста в области математики (коим я недавно стал): некорректно говорить о значении i
в контексте реальных чисел.
Определение может выглядеть так: i
это некоторое число вне класса действительных чисел, обладающее следующим свойством...
i * i = -1
Про лямбда-исчисление очень понравилось. Жаль, не показали пример с делением и действительными числами
Спасибо за статью
что-то вспомнился вопрос с подвохом из старшей школы на математическую терминологию:
"корень квадратный из 4?"
i
это некоторое число вне класса действительных чисел, обладающее следующим свойствомi * i = -1
Есть два числа с таким свойством, это i и -i.
С удивлением обнаружил, что гугл не дает определения мнимой единицы.
Мнимая единица - это комплексное число (0; 1).
Комплексные числа - это упорядоченные пары чисел (a; b), для которых определены операции сложения
и умножения
Деление муторно. Как в примитивных микропроцессорах реализуется программно. Т.е. у вас есть оператор Элвиса, сложение, умножение, а для деления пишите программу, реализующую деление столбиком, например. Ну и все остальные функции так-же реализуются.
Спасибо за красивую статью.
В начале XX века светлейшие умы нашей планеты разгадали законы, по которым работает наш мир на самом элементарном своем уровне.
Несколько поспешное заявление. «Светлейшим умам нашей планеты» ещё копать и копать чтобы приблизиться к «разгадкам законов, по которым работает наш мир на самом элементарном своем уровне». Причём копать, судя по всему, светлейшим умам нужно не совсем в ту сторону, в которую они копают сейчас.
Извините, но на мой взгляд, вы злоупотребляете превосходными степенями. "Невероятная красота","величайшая сложность" и т.п.
Очено интересная и красивая статья с философским содержанием. Я не математик, но очень впечатляюще. Спасибо)
основанием натурального алгоритма e
натурального логарифма, наверное :)
Стоит заметить, что в лямбда-исчислении функции унарные.
true = (x) => ((y) => x)
false = (x) => ((y) => y)
и т.д.
Ну и где лямбда-исчисление, там же и комбинаторная логика.
Которая тоже обладает своей особенной красотой.
А самый ураган в том, что можно найти минимальный базис - набор элементарных функций, из которых строится всё.
Например, в обычной двоичной логике есть два хорошо известных базиса:
аристотелев "отрицание, импликация"
булев "отрицание, конъюнкция, дизъюнкция" но внезапно, существуют базисы из одной двуместной функции - Пирса и Шеффера, и-не и или-не.
В комбинаторной логике тоже традиционный базис - это IKS
I (identity): I x = x
K (konstant): K x y = x
S (substitute): S x y z = (x z) (y z)
из которого видно, что чёрчевские
K a b = a, да это же true
(S K) a b = K b (a b) = b, да это же false (причём заметьте, мы тут получили промежуточный бессмысленный мусор ab, что бы это ни значило).
Оказывается, I в этом базисе лишний, I = SKK:
S K K x = (K x) (K x) = x
Или чуть длиннее: I = SSKK:
S S K K x = S K (S K) x = K x (S K x) = x
Но можно пойти дальше и найти базис из единственного комбинатора "йота":
i x = x S K
(распишите его через лямбду сами, если хотите)
I = i i = i S K = S S K K = I, как мы это уже показали выше
K = i (i (i i)) = i (i I) = i I S K = I S K S K = S K S K = K K (S K) = K
S = i (i (i (i i))) = i K = K S K = S
ну а раз мы из йоты получили базис IKS, то йота сама является базисом.
И на её основе построен эзотерический язык, кто бы мог подумать, "йота"
https://en.wikipedia.org/wiki/Iota_and_Jot
Основную мысль теории математической красоты можно кратко выразить как:
Красота - это сложность, порожденная простотой
А как насчет максимально уродливых вещей? Там есть какие-то закономерности?
Опираясь на утверждение
"... людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью ...
",
легко представить, что
"красивый код = простой код, делающий сложные вещи
".
А развер Эйлер был не швецарский и русский математик?
Согласно этой теории людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью
Что такое алгоритмическая сложность, понятно, а что в этом контексте просто "сложность"? Чем строка вида "abababababab" сложнее строки "aaaaaaaaa", если речь не идёт именно об алгоритмической сложности? Наверно, можно подумать в сторону энтропии, но я не уверен, что в данном контексте это достаточный критерий.
По определению, мнимая единица - это корень из минус одного. Мы не можем представить себе это число в том же виде, в котором мы обычно представляем себе обычные числа. Мнимый десяток яблок - невообразимая картина.
На мой взгляд, минус десять яблок - тоже не очень-то просто вообразить, однако представить температурную или другую шкалу с отрицательными значениями уже как-то легче.
Что же касается комплексных чисел, то осмыслить и принять их природу мне очень помог взгляд с точки зрения программирования. Поделюсь им, вдруг кому-то он придётся по душе.
Хотя оперировать комплексными числами и решать задачи меня научили ещё в юном возрасте, долгое время камнем преткновения оставалась эта самая мнимая единица. Вызывала она во мне сильный когнитивный диссонанс - да, в расчётах она помогала, но осмыслить её не удавалось.
Отмечу, что принять бесконечно малые величины в производных, пределах и интегралах, векторы и матрицы мне оказалось как-то проще. Когда же в университете нам рассказали о матричной форме представления комплексных чисел, то это меня очень впечатлило - никакой мнимой единицы, а результаты вычислений те же...
Позже с мнимыми числами столкнулся в программировании. Во многих языках программирования не выделено символьной абстракции наподобие мнимой единицы i, как это принято в математике, однако это никак не мешает реализовывать логику комплексных чисел и выполнять расчёты.
Привычная математическая запись комплексного числа
a + i * b
иногда достаточно вольно трактуется как действительная часть "плюс" мнимая, что меня немного вводило в заблуждение, ведь арифметические операции сложения/вычитания/умножения/деления обычно определяется над самими числами, а не составными частями. А тут как бы идёт смешение сложений и умножений, как над самими числами, так и над их структурными составляющими.
Грубо говоря, при сложении 5 яблок и 5 груш мы не получим 10 яблок или 10 груш, но получим 10 фруктов. Но при этом мы можем ввести абстракцию груше-яблочные числа, определив для них арифметические операции
(г:5, я:0) + (г:0, я:5) = (г:5, я:5)
(г:3, я:5) - (г:2, я:0) = (г:1, я:5)
и меры
(г:5, я:0) => 5 фруктов
(г:0, я:5) => 5 фруктов
(г:5, я:5) => 10 фруктов (5+5)
(г:3, я:5) => 8 фруктов
(г:2, я:0) => 2 фрукта
(г:1, я:5) => 6 фруктов (8-2)
что обеспечит вполне осмысленные результаты при вычислениях.
То есть при выполнении математических операций над объектами следует внимательно относиться к типу этих объектов, чтобы не получались противоречивые результаты или трактовки.
В программировании же такие вольности устранены, поскольку комплексное число - это структура данных на основе двух вещественных(действительных) чисел
struct Complex
{
public double Real { get; set; }
public double Imaginary { get; set; }
public Complex(double real = 0.0, double imaginary = 0.0)
{
Real = real;
Imaginary = imaginary;
}
public static Complex operator +(Complex left, Complex right) =>
new Complex(left.Real + right.Real, left.Imaginary + right.Imaginary);
public static Complex operator -(Complex left, Complex right) =>
new Complex(left.Real - right.Real, left.Imaginary - right.Imaginary);
public static Complex operator *(Complex left, Complex right) =>
new Complex(left.Real * right.Real - left.Imaginary * right.Imaginary,
left.Imaginary * right.Real + left.Real * right.Imaginary);
...
}
то есть как действительная часть, так и мнимая представлены вещественными(действительными) числами, для которых определены арифметические операции и по возможности неявные привидения типов.
public static implicit operator Complex(double value) => new Complex(value, 0d);
public static implicit operator Complex(int value) => new Complex(value, 0d);
...
Поэтому если написать такой код
double a = 1d;
Complex b = new Complex(2d, 0d);
var c = a + b;
то неявным образом переменная a будет приведена к типу Complex, и для переменной c будет выведен также тип Complex (но не double), что эквивалентно выражению
Complex c = (Complex)a + b;
или
Complex c = new Complex(a, 0d) + b;
Что же касается математики, то для устранения некоторой путаницы можно прибегнуть к следующей нотации
A + i*B => r*A + i*B => (r:A, i:B)
что однозначно трактуется как действительная часть r имеет вещественное(действительное) значение A, а мнимая часть i имеет вещественное(действительное) значение B. Да, мнимая часть комплексного числа имеет вещественное действительное значение.
Тогда выражение
i ^ 2 = -1
i * i = -1
в более строгом смысле преобразуется к
(0 + i*1) * (0 + i*1) = (-1 + i*0)
=>
(r*0 + i*1) * (r*0 + i*1) = (r*-1 + i*0)
=>
(r:0, i:1) * (r:0, i:1) = (r:-1, i:0)
то есть
мнимая единица (r:0, i:1) - это комплексное число с нулевым вещественным/действительным значением у действительной(реальной) части и единичным, но тоже вещественным/действительным значением у мнимой(воображаемой) части
действительная единица (r:1, i:0) - это комплексное число с единичным вещественным/действительным значением у действительной(реальной) части и нулевым, но тоже вещественным/действительным значением у мнимой(воображаемой) части
Не знаю, стало ли хоть немного понятнее или наоборот запутал, но в моём понимании корень из минус единицы в строгом смысле подразумевает возведение в комплексную степень комплексного числа
sqrt(-1)
=>
(-1)^(0.5)
=>
(r:-1, i:0) ^ (r:0.5, i:0)
а привычные математические нотации по сути являются исторически сложившимися мнемоническими правилами и символьными сокращениями. Подобно тому как зачастую опускается явное указание знака + у положительных чисел или не записываются разделитель и незначащие нули у вещественных
50 + 50.5 = 100.5
вместо
(+50.0) + (+50.5) = +100.5,
так и при записи комплексных происходит что-то вроде
(A + i*B) + (С + i*D)
=>
A + i*B + С + i*D
=>
(r:A, i:0) + (r:0, i:B) + (r:C, i:0) + (r:0, i:D)
=>
(r:A, i:B) + (r:C, i:D)
=>
(r:A+C, i:B+D)
что в итоге не влияет на результаты вычислений, но подразумевает некоторые неявные соглашения по преобразованию типов значений.
Эйлер, Чёрч и Мандельброт — этюд о красоте и математике