В 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)
Реалната и въображаемата част могат да бъдат зададени като тип float с плаваща запетая. Допустим е и експоненциален запис.
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)
Реалните и въображаемите части са еквивалентни на резултатите, изчислени чрез cosine math.cos() и sine 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)