В Python есть стандартный тип для работы с комплексными числами — тип COMPLEX. Если вы хотите выполнять простые вычисления, вам не нужно импортировать какие-либо модули, но если вы импортируете стандартную библиотеку cmath, вы также сможете использовать математические функции (экспоненциальные, логарифмические, тригонометрические и т.д.), соответствующие комплексным числам.
Следующее содержание объясняется здесь с помощью примера кода.
- Генерировать комплексные переменные
- Получение действительных и мнимых частей:
real
,imag
атрибут - Получение сопряженных комплексных чисел:
conjugate()
метод - Получить абсолютное значение (величину):
abs()
функция (например, математика, программирование, программирование) - Получить склонение (фазу):
math
,cmath
модуль - Преобразование полярных координат (представление в полярной форме):
math
,cmath
модуль - Вычисление комплексных чисел (квадратура, силы, квадратные корни)
- Генерировать комплексные переменные
- Получение действительных и мнимых частей комплексных чисел: real, imagатрибут
- Получение сопряженных комплексных чисел: conjugate()
- Получение абсолютного значения (величины) комплексного числа: abs()
- Получение склонения (фазы) комплексного числа: math, cmathмодуль
- Преобразование полярных координат комплексных чисел (полярное формальное представление): math, cmathмодуль
- Вычисление комплексных чисел (квадратура, силы, квадратные корни)
Генерировать комплексные переменные
Обозначим мнимую единицу через j и напишем следующее, заметим, что это не i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Если мнимая часть равна 1, ее опущение приводит к ошибке NameError. Если переменная с именем j определена первой, она считается этой переменной.
1j
Это должно быть четко сформулировано таким образом.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Если действительная часть равна 0, ее можно опустить.
c = 3j
print(c)
# 3j
Если вы хотите определить значение с мнимой частью 0 как сложный комплексный тип, запишите 0 явно. Как описано ниже, между комплексным типом и целочисленным типом или типом с плавающей точкой можно выполнять операции.
c = 3 + 0j
print(c)
# (3+0j)
Вещественная и мнимая части могут быть заданы в виде плавающей запятой. Также допустима экспоненциальная нотация.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Он также может быть порожден конструктором типа «complex», как в «complex(real part, imaginary part)».
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Получение действительных и мнимых частей комплексных чисел: real, imagатрибут
Действительную и мнимую части сложного комплексного типа можно получить с помощью атрибутов real и imag соответственно. Оба типа являются типами с плавающей точкой.
c = 3 + 4j
print(c.real)
print(type(c.real))
# 3.0
# <class 'float'>
print(c.imag)
print(type(c.imag))
# 4.0
# <class 'float'>
Он доступен только для чтения и не может быть изменен.
# c.real = 5.5
# AttributeError: readonly attribute
Получение сопряженных комплексных чисел: conjugate()
Чтобы получить сопряженные комплексные числа, используйте метод conjugate().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Получение абсолютного значения (величины) комплексного числа: abs()
Чтобы получить абсолютное значение (величину) комплексного числа, используйте встроенную функцию abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Получение склонения (фазы) комплексного числа: math, cmathмодуль
Чтобы получить склонение (фазу) комплексного числа, используйте модуль math или cmath.
Модуль cmath — это модуль математических функций для комплексных чисел.
Его можно вычислить с помощью функции обратного тангенса math.atan2(), как определено, или использовать cmath.phase(), которая возвращает склонение (фазу).
import cmath
import math
c = 1 + 1j
print(math.atan2(c.imag, c.real))
# 0.7853981633974483
print(cmath.phase(c))
# 0.7853981633974483
print(cmath.phase(c) == math.atan2(c.imag, c.real))
# True
В обоих случаях единицей измерения угла, который можно получить, являются радианы. Для преобразования в градусы используйте math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Преобразование полярных координат комплексных чисел (полярное формальное представление): math, cmathмодуль
Как упоминалось выше, можно получить абсолютное значение (величину) и склонение (фазу) комплексного числа, но с помощью cmath.polar() их можно получить вместе в виде кортежа (абсолютное значение, склонение).
c = 1 + 1j
print(cmath.polar(c))
print(type(cmath.polar(c)))
# (1.4142135623730951, 0.7853981633974483)
# <class 'tuple'>
print(cmath.polar(c)[0] == abs(c))
# True
print(cmath.polar(c)[1] == cmath.phase(c))
# True
Преобразование из полярных координат в декартовы осуществляется с помощью cmath.rect(). cmath.rect(абсолютное значение, отклонение) и аналогичные аргументы можно использовать для получения значений эквивалентного комплексного комплексного типа.
print(cmath.rect(1, 1))
# (0.5403023058681398+0.8414709848078965j)
print(cmath.rect(1, 0))
# (1+0j)
print(cmath.rect(cmath.polar(c)[0], cmath.polar(c)[1]))
# (1.0000000000000002+1j)
Действительная и мнимая части эквивалентны результатам, вычисленным косинусом math.cos() и синусом math.sin() по абсолютным значениям и углам склонения.
r = 2
ph = math.pi
print(cmath.rect(r, ph).real == r * math.cos(ph))
# True
print(cmath.rect(r, ph).imag == r * math.sin(ph))
# True
Вычисление комплексных чисел (квадратура, силы, квадратные корни)
Четыре арифметические операции и вычисления мощности могут быть выполнены с помощью обычных арифметических операторов.
c1 = 3 + 4j
c2 = 2 - 1j
print(c1 + c2)
# (5+3j)
print(c1 - c2)
# (1+5j)
print(c1 * c2)
# (10+5j)
print(c1 / c2)
# (0.4+2.2j)
print(c1 ** 3)
# (-117+44j)
Квадратный корень можно вычислить с помощью **0.5, но это вносит ошибку. Для вычисления точного значения можно использовать cmath.sqrt().
print((-3 + 4j) ** 0.5)
# (1.0000000000000002+2j)
print((-1) ** 0.5)
# (6.123233995736766e-17+1j)
print(cmath.sqrt(-3 + 4j))
# (1+2j)
print(cmath.sqrt(-1))
# 1j
Он также может выполнять арифметические операции с комплексными типами, типами int и float.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)