Что такое complex в python

Как использовать метод complex() в Python?

Метод complex() в Python используется для создания комплексного числа из других примитивных типов данных. Это полезно, когда вы хотите быстро выполнить сложные арифметические операции и преобразования.

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

Синтаксис

Следовательно, синтаксис вызова функции:

Комплексное число будет иметь вид:

Здесь j — мнимое число (sqrt (-1))

Метод Python complex() вернет это комплексное число.

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

Мы также можем построить его из строки, шестнадцатеричного, двоичного или даже другого комплексного числа.

Вызов complex() без параметров

Вызов complex() с использованием числовых параметров

Вызов с шестнадцатеричными и двоичными аргументами

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

Вызов с использованием другого комплексного числа

Мы также можем передать другое комплексное число при построении комплексного числа с помощью complex()

С использованием строковых аргументов

Мы также можем передать с ним строку, при условии, что между ней нет пробелов. Строка должна иметь только форму «a + bj», т. Е. Строку, которая может представлять комплексное число.

Если мы используем строку, мы можем использовать только один аргумент.

Источник

Комплексные числа — 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]) позволяет создать комплексное число на основе значений его действительной и мнимой частей:

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

Учитывая, что на месте действительной и мнимой части могут находиться только целые и вещественные числа, то как видите, способов ввода строк комплексных чисел становится довольно много. Однако, следует помнить, что пробельные символы являются недопустимыми:

Представление на комплексной плоскости

Целые и вещественные числа в геометрическом представлении являются точками на числовом луче:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

Геометрическим представлением комплексных чисел являются точки на плоскости. Данная плоскость называется комплексной и абсолютно аналогична прямоугольной системе координат, только по оси абцис (x) откладывается величина действительной части ( real ), а по оси ординат (y) ооткладывается величина мнимой части ( imag ). Например, точка \(A(3, 4)\) и комплексное число \(z = 3 + 4i\) будут выглядеть вот так:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

Как видите, изображение комплексных чисел на плоскости довольно простой процесс, по сути это те же самые декартовы координаты, которые получаются по правилу: \(x=\mathrm \,z; \quad y=\mathrm \,z\). А в Python получение тех же координат будет выглядеть аналогично:

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

Арифметические операции

Сложение двух комплексных чисел \(A=a+bi\) и \(B=c+di\) выполняется по простой формуле:

Python выполняет все промежуточные действия за нас, сразу выдавая результат:

На предыдущем рисунке мы видели, что комплексное число это точка на комплексной плоскости. Но если заметить что значения действительной и мнимой части отсчитываются от начала координат, то уместно задать вопрос: «А нельзя ли изображать эти числа в виде векторов?» Ответ: «Можно.» Данные числа действительно можно рассматривать как радиус-векторы:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

Разность комплексных чисел задается похожим образом:

Умножение комплексного числа на вещественное число выполняется очень просто: \(kA = k\left(a+bi\right)=ka + kbi\) и по сути просто меняет лишь длину радиус вектора комплексного числа, вдоль его направления:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

А вот умножение комплексных чисел друг на друга немного сложнее:

Как всегда в Python мы сразу видим результат:

Который на комплексной плоскости выглядит вот так:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

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

Деление комплексного числа на вещественное число, так же как и умножение на вещественное число кроме длины радиус-вектора вдоль его направления ничего не меняет:

Деление комплексных чисел друг на друга вычисляется по формуле:

Давайте посмотрим как это выглядит в Python и на комплексной плоскости:

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в 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:

Источник

Комплексные числа в Python. Бонус: фрактал

В Python есть встроенный тип данных complex, который моделируют комплексные числа. По-моему, теория комплексных чисел – настоящий прорыв в математике, оказавший колоссальное влияние на современную физику. Неудивительно, что комплексные числа оказались в стандартной библиотеке такого языка, как Python.

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

Цель этой статьи – рассказать про комплексные числа с точки зрения программирования на Python, если вам хочется узнать математическую теорию или просто освежить воспоминания о комплексных числах, то смело переходите по ссылке: Комплексные числа (откроется в новом окне), а потом возвращайтесь сюда.

В Python комплексное число состоит из пары чисел с плавающей запятой, которые отвечают за реальную и мнимые части. В исходнике на Си – это структура из пары чисел типа double. (Вы же помните, что float в Python это числа двойной точности?):

✅ Давайте посмотрим, какими способами мы можем задать комплексное число. Во-первых, с помощью встроенной функции complex(real[, imag]) :

❌ Когда создаете комплексное число из строки, то в ней не должно быть пробелов, иначе будет ошибка ValueError!

❌ Но! Нельзя задавать их так:

Кстати, буква j может быть и заглавной J.

Какие свойства есть у типа complex?

Можно извлекать из комплексного числа его мнимую (imag) и реальную (real) части – это обычные float:

Комплексно-сопряженное число – то же самое, только с другим знаком у мнимой части:

Модуль комплексного числа – фактически длина вектора на комплексной плоскости – вычисляется обычной функцией abs:

Операции

Пару комплексных чисел можно складывать и вычитать. Это просто, они работают подобно двумерным векторам на плоскости. Комплексные числа можно умножать и делить. Тут математика несколько сложнее, не буду повторять ее, читайте вики. А примеры кода вот:

Не забывайте ставить скобки:

❌ Целочисленные деления, взятие остатка и подобное не применимы к комплексным числам.

✅ Комплексные числа можно сравнивать на равенство и неравенство.

❌ Но нельзя к ним применять знаки больше, меньше.

✅ Можно возводить одно комплексное число в степень другого следующими способами * :

Комплексный 0 в степени комплексного 0 даст… барабанная дробь… единицу:

*) О многозначности замолвлено будет ниже, математики приберегите свои помидоры, пока не дочитаете до конца.

cmath

Модуль, который отвечает за стандартные функции над комплексными числами называется cmath (документация на английском). Обычный math не умеет извлекать корень из минус единицы, а cmath – запросто:

Рассмотрим основные функции из cmath:

cmath.phase(x) – фаза (или у нас она более известна, как аргумент Arg z) – эквивалент math.atan2(x.imag, x.real) – иными словами, это угол поворота φ вектора на комплексной плоскости. Результат лежит в промежутке [-π, π]. При этом разрез на комплексной области (т. е. луч, через который результат функции разрывается и перепрыгивает) выбирается вдоль отрицательной части реальной оси).

За модуль отвечает обычная abs (без cmath).

cmath.sqrt (x) – корень квадратный из комплексного числа.

Те, кто разбирается в математике сразу заметят, что многие функции от комплексной переменной – многозначны. (Видео о многозначных функциях) В частности у корня квадратного из комплексного числа всегда ровно два ответа. Но! Python всегда возвращает ровно одно значение. Он берет всегда «главную ветвь», а всякие вращения на 2πk/n остаются на совести программиста. Вот теория, как брать корень из комплексного числа. Я тщетно пытался нагуглить функцию, возвращающую множество значений корня n-й степени, и в итоге написал свою:

cmath.exp(x),cmath.log(x[, base]), cmath.log10(x), cmath.acos(x), cmath.asin(x), cmath.atan(x), cmath.cos(x), cmath.sin(x), cmath.tan(x), cmath.acosh(x), cmath.asinh(x), cmath.atanh(x), cmath.cosh(x), cmath.sinh(x), cmath.tanh(x) – обычный набор функций, только для комплексных чисел. Каждая из функций возвращает один результат. Думаю, если вам действительно нужны в работе комплексные функции, значит вы и так знаете, как достать все значения функций.

Множество Мандельброта

Даже если вы не математик или физик, комплексные числа могут поразвлечь и вас. Решил, что прикладной пример о комплексных числах должен быть впечатляющим. Мы нарисуем множество Мандельброта – пожалуй самый знаменитый фрактал.

Мно́жество Мандельбро́та — это множество таких точек c на комплексной плоскости, для которых рекуррентное соотношение задаёт ограниченную последовательность.

Иными словами мы берем каждую точку с = x + yj на выбранном участке комплексной плоскости и возводим в квадрат, потом снова прибавляем c, опять возводим в квадрат и так несколько раз. Смотрим, улетает ли результат в бесконечность. Если не улетает, значит точка принадлежит множеству, красим ее в черный, а если улетает, то красим в белый.

Нам понадобятся библиотеки для работы с изображениями и для полосы прогресса:

Добавим цвета. Будем считать, сколько итераций прошел цикл перед тем, как последовательность разошлась и мы вышли. Каждому числу шагов зададим цвет на палитре. Цвета плавно меняются вдоль палитры.

Вот такая красота получается из простейшей формулы!

Можно пойти дальше и создать GIF анимацию, где мы постепенно приближаемся к деталям фрактала. Перед этим оптимизируем немного код. abs извлекает квадратный корень, что не обязательно. Лучше сделать так, для улучшения производительности:

От кадра к кадру будем менять область отображения. Генератор фрактала для заданной области описан функцией:

Остаетя задать закон движения камеры и сохранить пачку кадров в GIF.

Полный код генератора анимации здесь.

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈

Источник

Комплексные числа Python

В Python есть несколько способов создать такое комплексное число.

Реальные и мнимые части в комплексном числе

Каждое комплексное число ( a + bj ) имеет действительную часть ( a ) и мнимую часть ( b ).

Сопряжение комплексного числа

Арифметические операции

Подобно действительным числам, комплексные числа также можно складывать, вычитать, умножать и делить. Давайте посмотрим, как мы могли бы это сделать в Python.

ПРИМЕЧАНИЕ. В отличие от действительных чисел, мы не можем сравнивать два комплексных числа. Мы можем сравнивать только их действительную и мнимую части по отдельности, поскольку это действительные числа. Приведенный ниже фрагмент доказывает это.

Фаза (аргумент)

Мы можем представить комплексное число как вектор, состоящий из двух компонентов на плоскости, состоящей из real и imaginary осей. Следовательно, две составляющие вектора — это действительная и мнимая части.

Что такое complex в python. Смотреть фото Что такое complex в python. Смотреть картинку Что такое complex в python. Картинка про Что такое complex в python. Фото Что такое complex в python

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

Формально это определяется как:

фаза (число) = arctan (мнимая_часть / действительная_часть)

где функция arctan является обратной математической функцией tan.

В Python мы можем получить фазу комплексного числа, используя модуль cmath для комплексных чисел. Мы также можем использовать функцию math.arctan и получить фазу из ее математического определения.

Прямоугольные и полярные координаты

Константы в модуле cmath

В модуле cmath есть специальные константы. Некоторые из них перечислены ниже.

Тригонометрические функции

Гиперболические функции

Экспоненциальные и логарифмические функции

Другие

Источник

Complex Number ObjectsВ¶

Python’s complex number objects are implemented as two distinct types when viewed from the C API: one is the Python object exposed to Python programs, and the other is a C structure which represents the actual complex number value. The API provides functions for working with both.

Complex Numbers as C StructuresВ¶

Note that the functions which accept these structures as parameters and return them as results do so by value rather than dereferencing them through pointers. This is consistent throughout the API.

The C structure which corresponds to the value portion of a Python complex number object. Most of the functions for dealing with complex number objects use structures of this type as input or output values, as appropriate. It is defined as:

Return the sum of two complex numbers, using the C Py_complex representation.

Return the difference between two complex numbers, using the C Py_complex representation.

Return the negation of the complex number num, using the C Py_complex representation.

Return the product of two complex numbers, using the C Py_complex representation.

Return the quotient of two complex numbers, using the C Py_complex representation.

Return the exponentiation of num by exp, using the C Py_complex representation.

Complex Numbers as Python ObjectsВ¶

This subtype of PyObject represents a Python complex number object.

This instance of PyTypeObject represents the Python complex number type. It is the same object as complex in the Python layer.

PyObject * PyComplex_FromCComplex ( Py_complex v ) В¶
Return value: New reference.

Create a new Python complex number object from a C Py_complex value.

Return a new PyComplexObject object from real and imag.

Return the Py_complex value of the complex number op.

Changed in version 3.8: Use __index__() if available.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *