Python, комплексни типове за работа с комплексни числа (абсолютни стойности, деклинация, полярни трансформации и др.)

Бизнес

В Python има стандартен тип за работа с комплексни числа – тип COMPLEX. Ако искате да правите само прости изчисления, не е необходимо да импортирате никакви модули, но ако импортирате стандартната библиотека 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)
Copied title and URL