Python, komplekssed tüübid kompleksarvudega töötamiseks (absoluutväärtused, deklinatsioon, polaarmuutused jne).

Äri

Pythonil on standardne tüüp kompleksarvude käsitlemiseks, tüüp COMPLEX. Kui soovite teha vaid lihtsaid arvutusi, ei ole vaja importida ühtegi moodulit, kuid kui importite standardraamatukogu cmath, saate kasutada ka kompleksarvudele vastavaid matemaatilisi funktsioone (eksponentsiaal-, logaritm-, trigonomeetrilisi jne).

Järgnevat sisu selgitatakse siin koos näidiskoodiga.

  • Komplekssete muutujate genereerimine
  • Saada reaal- ja kujuteldavad osad:real,imagatribuut
  • Hangi konjugatiivsed kompleksarvud:conjugate()meetod
  • Saada absoluutväärtus (suurus):abs()funktsioon (nt matemaatika, programmeerimine, programmeerimine)
  • Saada deklinatsioon (faas):math,cmathmoodul
  • Polaarkoordinaatide teisendamine (polaarvormi esitus):math,cmathmoodul
  • Kompleksarvude arvutamine (kvadratuurid, potensid, ruutjuured)

Komplekssete muutujate genereerimine

Tähistage kujuteldavat ühikut j-ga ja kirjutage järgmine, märkige, et see ei ole i.

c = 3 + 4j

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

Kui kujuteldav osa on 1, siis selle ärajätmine annab NameError. Kui muutuja nimega j on defineeritud esimesena, loetakse seda muutujat selliseks.

1j
See tuleks selgesõnaliselt välja öelda.

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

c = 3 + 1j

print(c)
# (3+1j)

Kui reaalosa on 0, võib selle ära jätta.

c = 3j

print(c)
# 3j

Kui soovite defineerida väärtust, mille imaginaarne osa on 0, kompleksse kompleksse tüübina, kirjutage selgesõnaliselt 0. Nagu allpool kirjeldatud, saab teha operatsioone kompleksse tüübi ja täisarvu tüübi või ujukoma tüübi vahel.

c = 3 + 0j

print(c)
# (3+0j)

Reaal- ja imaginaarosa saab määrata ujukoma-tüüpi ujukoma. Lubatud on ka eksponentsiaalne märkimine.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Seda saab genereerida ka konstruktoriga, mille tüüp on “complex”, nagu näiteks “complex(reaalosa, kujuteldav osa)”.

c = complex(3, 4)

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

Kompleksarvude reaal- ja imaginaarosa hankimine: real, imagatribuut

Kompleksse kompleksse tüübi reaal- ja imaginaarosa saab vastavalt reaal- ja imaginaartribuutidega. Mõlemad on ujukoma-tüübid.

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

See on ainult loetav ja seda ei saa muuta.

# c.real = 5.5
# AttributeError: readonly attribute

Hangi konjugatiivsed kompleksarvud: conjugate()

Konjueeritud kompleksarvude saamiseks kasutage meetodit conjugate().

c = 3 + 4j

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

Kompleksarvu absoluutväärtuse (suuruse) saamine: abs()

Kompleksarvu absoluutväärtuse (suurus) saamiseks kasutage sisseehitatud funktsiooni abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Kompleksarvu deklinatsiooni (faasi) saamine: math, cmathmoodul

Kompleksarvu deklinatsiooni (faasi) saamiseks kasutage moodulit math või cmath.

Moodul cmath on matemaatiline funktsioonimoodul kompleksarvude jaoks.

Seda saab arvutada pöördtangensi funktsiooni math.atan2() abil, nagu on määratletud, või kasutada funktsiooni cmath.phase(), mis tagastab deklinatsiooni (faasi).

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

Mõlemal juhul on saadava nurga ühikuks radiaan. Kraadideks teisendamiseks kasutage funktsiooni math.degrees().

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

Kompleksarvude polaarkoordinaattransformatsioon (polaarformaalne esitus): math, cmathmoodul

Nagu eespool mainitud, on võimalik saada kompleksarvu absoluutväärtus (suurus) ja deklinatsioon (faas), kuid kasutades cmath.polar(), saab neid koos (absoluutväärtus, deklinatsioon) tuplina.

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

Konverteerimine polaarkoordinaatidest kartesiaanlikesse koordinaatidesse toimub kasutades cmath.rect(). cmath.rect(absoluutväärtus, kõrvalekalle) ja sarnaseid argumente saab kasutada ekvivalentse komplekskompleksi tüübi väärtuste saamiseks.

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)

Reaal- ja kujuteldav osa on võrdväärsed tulemustega, mis arvutatakse absoluutväärtuste ja deklinatsiooninurkade abil cosinus math.cos() ja 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

Kompleksarvude arvutamine (kvadratuurid, potensid, ruutjuured)

Neli aritmeetilist operatsiooni ja võimsusarvutusi saab teha tavaliste aritmeetiliste operaatorite abil.

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)

Ruutjuure saab arvutada **0,5 abil, kuid see tekitab vea. cmath.sqrt() saab kasutada täpse väärtuse arvutamiseks.

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

Samuti saab ta sooritada aritmeetilisi operatsioone komplekssete tüüpide, int-tüüpide ja float-tüüpidega.

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

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