Python, typy złożone do pracy z liczbami złożonymi (wartości bezwzględne, deklinacja, transformacje biegunowe itp.)

Biznes

Python ma standardowy typ do obsługi liczb złożonych – typ COMPLEX. Jeśli chcesz wykonywać tylko proste obliczenia, nie musisz importować żadnych modułów, ale jeśli zaimportujesz standardową bibliotekę cmath, możesz również używać funkcji matematycznych (wykładniczych, logarytmicznych, trygonometrycznych itd.) odpowiadających liczbom złożonym.

Poniższe treści zostały tu wyjaśnione wraz z przykładowym kodem.

  • Generowanie zmiennych złożonych
  • Uzyskaj części rzeczywiste i urojone:real,imagatrybut
  • Uzyskaj koniugację liczb zespolonych:conjugate()metoda
  • Uzyskaj wartość bezwzględną (wielkość):abs()funkcja (np. matematyczna, programistyczna, programistyczna)
  • Uzyskaj deklinację (fazę):math,cmathmoduł
  • Biegunowa transformacja współrzędnych (przedstawienie w postaci biegunowej):math,cmathmoduł
  • Obliczanie liczb zespolonych (kwadratura, potęgi, pierwiastki kwadratowe)

Generowanie zmiennych złożonych

Oznacz jednostkę urojoną przez j i zapisz poniższy tekst, zauważ, że nie jest to i.

c = 3 + 4j

print(c)
print(type(c))
# (3+4j)
# <class 'complex'>

Jeśli część urojona wynosi 1, to jej pominięcie powoduje wystąpienie błędu NameError. Jeśli zmienna o nazwie j zostanie zdefiniowana jako pierwsza, to jest ona uważana za tę zmienną.

1j
Powinno to być wyraźnie zaznaczone w ten sposób.

# c = 3 + j
# NameError: name 'j' is not defined

c = 3 + 1j

print(c)
# (3+1j)

Jeśli część rzeczywista wynosi 0, można ją pominąć.

c = 3j

print(c)
# 3j

Jeśli chcemy zdefiniować wartość o części urojonej równej 0 jako typ złożony, należy wyraźnie wpisać 0. Jak opisano poniżej, można wykonywać operacje między typem złożonym a typem całkowitym lub zmiennoprzecinkowym.

c = 3 + 0j

print(c)
# (3+0j)

Części rzeczywista i urojona mogą być określone jako zmiennoprzecinkowe typu float. Dopuszczalna jest również notacja wykładnicza.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Można go również wygenerować za pomocą konstruktora typu „complex”, jak w przypadku „complex(część rzeczywista, część urojona)”.

c = complex(3, 4)

print(c)
print(type(c))
# (3+4j)
# <class 'complex'>

Poznaj rzeczywiste i urojone części liczb zespolonych: real, imagatrybut

Części rzeczywistą i urojoną typu złożonego można uzyskać odpowiednio za pomocą atrybutów real i imag. Oba typy są typami zmiennoprzecinkowymi float.

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'>

Jest ona tylko do odczytu i nie można jej zmienić.

# c.real = 5.5
# AttributeError: readonly attribute

Uzyskaj koniugację liczb zespolonych: conjugate()

Aby otrzymać koniugaty liczb zespolonych, należy użyć metody conjugate().

c = 3 + 4j

print(c.conjugate())
# (3-4j)

Uzyskanie wartości bezwzględnej (wielkości) liczby złożonej: abs()

Aby uzyskać wartość bezwzględną (wielkość) liczby złożonej, należy użyć wbudowanej funkcji abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Uzyskaj deklinację (fazę) liczby złożonej: math, cmathmoduł

Aby uzyskać deklinację (fazę) liczby złożonej, należy użyć modułu math lub cmath.

Moduł cmath jest modułem funkcji matematycznych dla liczb zespolonych.

Można ją obliczyć za pomocą funkcji odwrotności tangensa math.atan2() zgodnie z definicją lub użyć funkcji cmath.phase(), która zwraca deklinację (fazę).

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

W obu przypadkach jednostką kąta, którą można uzyskać, są radiany. Aby przeliczyć kąt na stopnie, należy użyć funkcji math.degrees().

print(math.degrees(cmath.phase(c)))
# 45.0

Polarna transformacja współrzędnych liczb zespolonych (formalna reprezentacja biegunowa): math, cmathmoduł

Jak wspomniano powyżej, można uzyskać wartość bezwzględną (magnitudę) i deklinację (fazę) liczby zespolonej, ale używając funkcji cmath.polar(), można je uzyskać razem jako tuple (wartość bezwzględna, deklinacja).

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

Konwersji ze współrzędnych biegunowych na kartezjańskie dokonuje się za pomocą funkcji cmath.rect(). cmath.rect(wartość bezwzględna, odchylenie) i podobnych argumentów można użyć do uzyskania wartości równoważnych typowi złożonemu complex.

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)

Części rzeczywista i urojona są równoważne wynikom obliczonym za pomocą funkcji cosinus math.cos() i sinus math.sin() na podstawie wartości bezwzględnych i kątów deklinacji.

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

Obliczanie liczb zespolonych (kwadratura, potęgi, pierwiastki kwadratowe)

Można wykonać cztery operacje arytmetyczne i obliczenia potęgowe przy użyciu zwykłych operatorów arytmetycznych.

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)

Pierwiastek kwadratowy można obliczyć za pomocą **0,5, ale wprowadza to błąd. Do obliczenia dokładnej wartości można użyć funkcji 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

Może również wykonywać operacje arytmetyczne na typach złożonych, typach int i float.

print(c1 + 3)
# (6+4j)

print(c1 * 0.5)
# (1.5+2j)