Python, komplex típusok a komplex számokkal való munkához (abszolút értékek, deklináció, poláris transzformációk stb.)

Üzleti

A Python rendelkezik egy szabványos típussal a komplex számok kezelésére, a COMPLEX típussal. Ha csak egyszerű számításokat szeretnénk végezni, nem kell semmilyen modult importálnunk, de ha a cmath szabványos könyvtárat importáljuk, akkor a komplex számoknak megfelelő matematikai függvényeket (exponenciális, logaritmikus, trigonometrikus stb.) is használhatjuk.

A következő tartalmakat itt példakóddal magyarázzuk el.

  • Komplex változók generálása
  • Valós és képzeletbeli részek beszerzése:real,imagattribútum
  • Konjugált komplex számok kinyerése:conjugate()módszer
  • Abszolút érték (nagyságrend) lekérdezése:abs()funkció (pl. matematika, programozás, programozás)
  • Deklináció (fázis) beszerzése:math,cmathmodul
  • Polárkoordináta-transzformáció (poláris alakú ábrázolás):math,cmathmodul
  • Komplex számok számítása (kvadratúra, hatványok, négyzetgyök)

Komplex változók generálása

Jelöljük a képzeletbeli egységet j-vel, és írjuk fel a következőket, vegyük észre, hogy nem i.

c = 3 + 4j

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

Ha az imaginárius rész 1, a kihagyása NameError-t eredményez. Ha egy j nevű változót definiáltunk először, akkor azt a változót tekintjük annak.

1j
Ezt kifejezetten így kell megfogalmazni.

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

c = 3 + 1j

print(c)
# (3+1j)

Ha a valós rész 0, akkor elhagyható.

c = 3j

print(c)
# 3j

Ha olyan értéket akarsz definiálni, amelynek képzetes része 0, mint komplex komplex típus, akkor írd ki explicit módon a 0-t. Az alábbiakban leírtak szerint a komplex típus és az integer típus vagy a lebegőpontos típus között végezhetünk műveleteket.

c = 3 + 0j

print(c)
# (3+0j)

A valós és képzetes részek lebegőpontos lebegő típusúak lehetnek. Az exponenciális jelölés is elfogadható.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Egy “complex” típusú konstruktorral is létrehozható, mint a “complex(valós rész, képzetes rész)”.

c = complex(3, 4)

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

Komplex számok valós és képzetes részeinek kinyerése: real, imagattribútum

A komplex komplex típus valós és imaginárius részei a real és imag attribútumokkal kaphatók meg. Mindkettő lebegőpontos lebegőpontos típus.

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

Csak olvasható, és nem módosítható.

# c.real = 5.5
# AttributeError: readonly attribute

Konjugált komplex számok kinyerése: conjugate()

A konjugált komplex számok előállításához használjuk a conjugate() módszert.

c = 3 + 4j

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

Egy komplex szám abszolút értékének (nagyságának) kiszámítása: abs()

Egy komplex szám abszolút értékének (nagyságának) kiszámításához használja a beépített abs() függvényt.

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Egy komplex szám deklinációjának (fázisának) kiszámítása: math, cmathmodul

Egy komplex szám deklinációjának (fázisának) meghatározásához használja a math vagy a cmath modult.

A cmath modul egy matematikai függvénymodul a komplex számokhoz.

Kiszámítható a math.atan2() inverz érintő függvénnyel, vagy a cmath.phase() függvénnyel, amely a deklinációt (fázist) adja vissza.

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

Mindkét esetben a kapott szög mértékegysége radián. A fokokra való átváltáshoz használjuk a math.degrees() függvényt.

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

A komplex számok polárkoordináta-transzformációja (poláris alaki ábrázolás): math, cmathmodul

Mint fentebb említettük, egy komplex szám abszolút értéke (nagysága) és deklinációja (fázisa) is megkapható, de a cmath.polar() segítségével ezek együttesen (abszolút érték, deklináció) tupliként kaphatók.

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

A polárkoordinátákból kartéziánus koordinátákba való átalakítás a cmath.rect() segítségével történik. cmath.rect(abszolút érték, eltérés) és hasonló argumentumokkal az egyenértékű komplex komplex komplex típusú értékeket kaphatjuk.

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)

A valós és képzetes részek egyenértékűek a cosinus math.cos() és a sine math.sin() abszolút értékekből és deklinációs szögekből számított eredményekkel.

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

Komplex számok számítása (kvadratúra, hatványok, négyzetgyök)

Négy aritmetikai művelet és hatványszámítás végezhető a szokásos aritmetikai operátorokkal.

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)

A négyzetgyök kiszámítható **0.5 segítségével, de ez hibát okoz. cmath.sqrt() segítségével kiszámítható a pontos érték.

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

Aritmetikai műveletek elvégzésére is képes komplex típusokkal, int típusokkal és float típusokkal.

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

print(c1 * 0.5)
# (1.5+2j)
Copied title and URL