[МУЗЫКА] [МУЗЫКА] Итак,
отвлечемся немного от программирования
и посмотрим на характерную ситуацию, когда заказчик, например,
в нашем случае математик или физик, что-то объясняет программистам,
чтобы у них общее понимание сложилось, что сейчас будет происходить.
Вот такую странную вещь я написал.
Если вдруг вы не знаете, что такое комплексное число, возможно,
это вас удивит, потому что корень из отрицательных чисел нельзя извлекать,
этому нас учили в школе.
Но на самом деле можно, если очень хочется.
Такие числа называются комплексные, сейчас мы о них поговорим чуть подробнее.
Математики их широко используют, и если вы слушали курс математического анализа,
то они вам знакомы.
А если не слушали, то моего объяснения хватит для наших задач.
Мы будем реализовывать класс для работы с комплексными числами,
и для этого нужно примерно понимать, как они устроены.
Комплексное число представимо в виде двух частей: действительной и мнимой,
real и imaginary,
то есть настоящее и воображаемое.
И эта мнимая часть умножается на вот это число i, которое равно √−1.
Например, мы можем взять такое число 2 + 3i.
С линейными уравнениями, я думаю,
работали все, и, например, запись 2 + 3x вас не напугала бы.
Относитесь к ней так же, и все будет хорошо.
Главное потом вспомнить, что i² будет равно −1.
Что можно делать с комплексными числами?
Например, мы можем взять два комплексных числа и сложить их между собой.
Например, наше число (2 + 3i) с
числом (−1 − i), −1i.
Вспоминаем, что относиться нужно точно так же,
как к линейному уравнению, и получаем наш ожидаемый
результат 1 + 2i.
Комплексные числа очень сильно связаны с точками на плоскости.
Давайте я изображу плоскость, на которой будут
отмечены комплексные числа следующим
образом: наша действительная часть будет x координатой,
а мнимая часть — y координатой точки.
То есть я отложу отрезки единичной
длины и наше первое число (2 + 3i).
Соответственно, мы взяли x координату — мы договорились
взять действительную часть, а y координату — взять мнимую часть.
Соответственно, вот наша точка (2, 3) расположится примерно здесь.
Что такое сложение комплексных чисел?
Это то же самое, что сложение векторов, исходящих из точки (0, 0).
То есть мы можем представить себе комплексное число не только как точку,
но и как вот такой вектор — свободный вектор,
если вам курс школьной физики ближе.
Сложение векторов делается одним из многих способов.
Например, если мы возьмем наш вектор (−1,
−1) и отложим его от нашей точки,
то есть сделаем сложение, он нас приведет
вот сюда — в точку с координатами (1, 2).
И это же результат сложения комплексных чисел.
То есть можете пользоваться вот такой абстракцией,
если вам что-то нужно сделать, то вектора многим помогают.
Что еще полезного есть в комплексных числах?
Поскольку мы рассмотрели их как вектор, исходящий из точки (0,
0), то мы можем задать число не только двумя координатами,
но и углом наклона и длиной этого вектора.
В математике это часто используется.
Если вы видите что-то такое, не пугайтесь, это нормально.
И наконец, самое интересное, что можно сделать с числами, это умножение.
Давайте перемножим два комплексных числа между собой.
Например, одно из них у нас будет такое же,
как и было, (2 + 3i),
и мы умножим его на какое-нибудь новое комплексное число, например,
(3 + 4i).
Как я уже говорил,
всё то же самое, вместо i подставляете x, и все страхи проходят.
Что здесь произойдет?
2 * 3 будет 6 +
9i, это 3i * 3.
А затем что я делаю дальше?
3i умножаю на 3 просто.
Это я и сделал.
Осталось 8i — это 2 * 4i.
И наконец, между собой + 12i².
Теперь мы можем со слагаемыми,
соответствующими степенями i нулевой, первой и второй,
навести некоторый порядок.
Получится 6 + 17i + 12i².
Пока абсолютно ничего необычного не произошло,
но теперь мы вспоминаем про наше правило,
что i = √−1,
значит, i² будет равняться −1.
И избавляемся от нашего i²,
то есть это получится вместо +12i² получится −12.
Просто −12.
Таким образом, получится
−6 + 17i.
Операция умножения комплексных чисел нам потребуется в нашем классе,
и делать мы ее будем примерно по такому правилу.
Это легко описать алгоритмически.
На этом нам, как программистам, знаний о предмете, который мы сейчас
будем реализовывать, о том классе, который от нас потребуется, уже достаточно.
А потом, когда мы напишем библиотеку, например, для эффективной работы,
для удобной работы с комплексными числами, математики уже сами напишут то,
что им нужно, все их сложные формулы.
Таким образом, если вы будете когда-нибудь, например,
работать в НИИ или исследовать какие-то сложные физические процессы в лаборатории,
если вам скажут, что вам сейчас придется программировать
дифференциальное уравнение 12-й степени, вы не торопитесь пугаться.
Скорее всего, ваши знания о предметной области могут быть достаточно
поверхностными, и глубокого понимания от вас не потребуют,
хотя какое-то представление лучше сложить.
Работать совсем с черными ящиками — это не очень хорошо.
В реальной жизни, конечно же, задачи чаще всего бывают не связаны с комплексными
числами или с дифференциальными уравнениями, но в любом случае,
скорее всего, вы будете делать какой-то проект,
который предназначен для чего-то полезного, для какого-нибудь
бизнеса или для какого-то описания процесса происходящего.
И конечно же, некоторое предварительное представление о том, что вы делаете,
нужно сложить, перед тем как проектировать структуру классов вашей программы,
чтобы просто представлять, как оно должно выглядеть, и главное,
что может поменяться в процессе,
чтобы заложить себе такие удобные места для внесения каких-то изменений.
А теперь перейдем к практической реализации класса комплексных чисел.
[МУЗЫКА]
[МУЗЫКА]