Комплексные числа — complex
Если вы еще ничего не прочитали о комплексных числах на википедии, то обязательно прочитайте. А если прочитали, но не совсем поняли, хотя, даже если и поняли, мы все равно подробно рассмотрим как устроены и как работают комплексные числа в Python.
Создание комплексных чисел
Мы знаем, что любое комплексное число \(z\) задается его действительной частью \(a\), мнимой частью \(b\) и в нем всегда присутствует символ \(i\), обозначающий мнимую единицу. В Python все практически точно так же, только мнимую единицу обозначают символом j (реже J ), а числа \(a\) и \(b\) могут быть любыми числами типа int или float. Например, комплексные числа в Python могут выглядеть следующим образом:
Интуитивно понятно, что если в числе \(a+bi\) мнимая часть \(b=0\), то оно автоматически становится обычным вещественным числом, потому что \(z=a+0i=a\). Но в то же время все вещественные числа, являются подмножеством комплексных, значит число \(a\) это комплексное число у которого мнимая часть равна \(0\). В математике это так, но в Python нет, т.е. автоматического преобразования чисел типа complex в числа типа int или float не происходит, даже если их мнимая часть равна \(0\):
Наверное, если бы такое преобразование имело место, то это привело бы к противоречиям некоторых математических операций. Здесь следует еще раз напомнить о преобразовании типов и о том что это преобразование работает только в одну сторону:
Встроенная функция complex()
Встроенная функция complex(real[, imag]) позволяет создать комплексное число на основе значений его действительной и мнимой частей:
Приятным сюрпризом данной функции, является то что она может создавать комплексное число из строки. Но с небольшой оговоркой, эта строка должна быть допустимым литералом комплексного числа:
Учитывая, что на месте действительной и мнимой части могут находиться только целые и вещественные числа, то как видите, способов ввода строк комплексных чисел становится довольно много. Однако, следует помнить, что пробельные символы являются недопустимыми:
Представление на комплексной плоскости
Целые и вещественные числа в геометрическом представлении являются точками на числовом луче:
Геометрическим представлением комплексных чисел являются точки на плоскости. Данная плоскость называется комплексной и абсолютно аналогична прямоугольной системе координат, только по оси абцис (x) откладывается величина действительной части ( real ), а по оси ординат (y) ооткладывается величина мнимой части ( imag ). Например, точка \(A(3, 4)\) и комплексное число \(z = 3 + 4i\) будут выглядеть вот так:
Как видите, изображение комплексных чисел на плоскости довольно простой процесс, по сути это те же самые декартовы координаты, которые получаются по правилу: \(x=\mathrm
Изображение комплексных чисел еще и весьма удобно, так как позволяет наглядно изображать арифметические операции над ними.
Арифметические операции
Сложение двух комплексных чисел \(A=a+bi\) и \(B=c+di\) выполняется по простой формуле:
Python выполняет все промежуточные действия за нас, сразу выдавая результат:
На предыдущем рисунке мы видели, что комплексное число это точка на комплексной плоскости. Но если заметить что значения действительной и мнимой части отсчитываются от начала координат, то уместно задать вопрос: «А нельзя ли изображать эти числа в виде векторов?» Ответ: «Можно.» Данные числа действительно можно рассматривать как радиус-векторы:
Разность комплексных чисел задается похожим образом:
Умножение комплексного числа на вещественное число выполняется очень просто: \(kA = k\left(a+bi\right)=ka + kbi\) и по сути просто меняет лишь длину радиус вектора комплексного числа, вдоль его направления:
А вот умножение комплексных чисел друг на друга немного сложнее:
Как всегда в Python мы сразу видим результат:
Который на комплексной плоскости выглядит вот так:
Можно было бы предположить, что это что-то вроде векторного или скалярного умножения векторов, но нет, умножение комплексных чисел, отличается от этих двух операций.
Деление комплексного числа на вещественное число, так же как и умножение на вещественное число кроме длины радиус-вектора вдоль его направления ничего не меняет:
Деление комплексных чисел друг на друга вычисляется по формуле:
Давайте посмотрим как это выглядит в Python и на комплексной плоскости:
Математические операции
Комплексные числа поддерживают не все математические операции и не все операции сравнения, а побитовые операции не поддерживаются вообще. Дело в том, что комплексные числа являются «двумерными», что на первый взгляд вовсе не кажется помехой для таких операций как целочисленное деление или остаток от деления. На на самом деле введение таких операций приводит к неопределенностям, которые невозможно преодолеть. К тому же, такие операции как и > так же не могут быть выполнены просто потому, что мы не знаем какая из двух точек на плоскости будет больше другой, а какая меньше.
Неподдерживаемые комплексными числами математические операции выделены красным цветом и оставлены в таблице, потому что они формально могут присутствовать в математических выражениях содержащих числа типа int и float. Все операции отсортированы по убыванию приоритета:
Важно: приоритет математических операций выше операций сравнения.
I. возведение \(0+0i\) в степень \(0+0i\) возвращает \(1+0i\):
III. Функция abs() всегда возвращает результат типа float.
IV. деление на \(0+0i\) приведет к ошибке и вызовет исключение ZeroDivisionError.
V. встроенная функция complex() пропускает числа (объекты) типа complex «как есть», не выполняя над ними, абсолютно никаких действий.
VI. строго говоря эти функции не являются математическими, но они могут учавствовать в математических выражениях Python и поэтому должны обладать приоритетом.
Операции сравнения
Для сравнения чисел имеется \(8\) операций, но для комплексных чисел доступно только \(4\) причем все они имеют одинаковый приоритет:
Важно: приоритет операций сравнения ниже математических.
I. эти операции могут присутствовать в математических выражениях, но если операндами являются комплексные числа или одним из них является комплексным числом, то это приведет к ошибке и вызовет исключение TypeError:
Как использовать метод complex() в Python?
Метод complex() в Python используется для создания комплексного числа из других примитивных типов данных. Это полезно, когда вы хотите быстро выполнить сложные арифметические операции и преобразования.
Синтаксис
Следовательно, синтаксис вызова функции:
Комплексное число будет иметь вид:
Здесь j — мнимое число (sqrt (-1))
Метод Python complex() вернет это комплексное число.
Вы можете подумать, что для построения комплексного числа можно использовать только целые числа и числа с плавающей запятой, но это не тот случай.
Мы также можем построить его из строки, шестнадцатеричного, двоичного или даже другого комплексного числа.
Вызов complex() без параметров
Вызов complex() с использованием числовых параметров
Вызов с шестнадцатеричными и двоичными аргументами
Мы также можем напрямую передать в это шестнадцатеричное или двоичное число, не преобразовывая его в целое.
Вызов с использованием другого комплексного числа
Мы также можем передать другое комплексное число при построении комплексного числа с помощью complex()
С использованием строковых аргументов
Мы также можем передать с ним строку, при условии, что между ней нет пробелов. Строка должна иметь только форму «a + bj», т. Е. Строку, которая может представлять комплексное число.
Если мы используем строку, мы можем использовать только один аргумент.
Комплексные числа Python
В Python есть несколько способов создать такое комплексное число.
Реальные и мнимые части в комплексном числе
Каждое комплексное число ( a + bj ) имеет действительную часть ( a ) и мнимую часть ( b ).
Сопряжение комплексного числа
Арифметические операции
Подобно действительным числам, комплексные числа также можно складывать, вычитать, умножать и делить. Давайте посмотрим, как мы могли бы это сделать в Python.
ПРИМЕЧАНИЕ. В отличие от действительных чисел, мы не можем сравнивать два комплексных числа. Мы можем сравнивать только их действительную и мнимую части по отдельности, поскольку это действительные числа. Приведенный ниже фрагмент доказывает это.
Фаза (аргумент)
Мы можем представить комплексное число как вектор, состоящий из двух компонентов на плоскости, состоящей из real и imaginary осей. Следовательно, две составляющие вектора — это действительная и мнимая части.
Угол между вектором и действительной осью определяется как argument или phase комплексного числа.
Формально это определяется как:
фаза (число) = arctan (мнимая_часть / действительная_часть)
где функция arctan является обратной математической функцией tan.
В Python мы можем получить фазу комплексного числа, используя модуль cmath для комплексных чисел. Мы также можем использовать функцию math.arctan и получить фазу из ее математического определения.
Прямоугольные и полярные координаты
Константы в модуле cmath
В модуле cmath есть специальные константы. Некоторые из них перечислены ниже.
Тригонометрические функции
Гиперболические функции
Экспоненциальные и логарифмические функции
Другие
Числа: целые, вещественные, комплексные
Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.
Целые числа (int)
Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:
Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).
Битовые операции
Над целыми числами также можно производить битовые операции
| x | y | Побитовое или |
| x ^ y | Побитовое исключающее или |
| x & y | Побитовое и |
| x > y | Битовый сдвиг вправо |












