Python har en standardtype til håndtering af komplekse tal, COMPLEX-typen. Hvis du blot ønsker at foretage simple beregninger, behøver du ikke importere nogen moduler, men hvis du importerer standardbiblioteket cmath, kan du også bruge matematiske funktioner (eksponentielle, logaritmiske, trigonometriske osv.), der svarer til komplekse tal.
Følgende indhold er forklaret her med kodeeksempler.
- Generering af komplekse variabler
- Få reelle og imaginære dele:
real
,imag
attribut - Få konjugerede komplekse tal:
conjugate()
metode - Få den absolutte værdi (størrelsesorden):
abs()
funktion (f.eks. matematik, programmering, programmering) - Opnå deklination (fase):
math
,cmath
modul - Polar koordinattransformation (repræsentation i polarform):
math
,cmath
modul - Beregning af komplekse tal (kvadratur, potenser, kvadratrødder)
- Generering af komplekse variabler
- Få reelle og imaginære dele af komplekse tal: real, imagattribut
- Få konjugerede komplekse tal: conjugate()
- Opnå den absolutte værdi (størrelsen) af et komplekst tal: abs()
- Opnå deklinationen (fasen) af et komplekst tal: math, cmathmodul
- Polar koordinattransformation af komplekse tal (polær formel repræsentation): math, cmathmodul
- Beregning af komplekse tal (kvadratur, potenser, kvadratrødder)
Generering af komplekse variabler
Betegn den imaginære enhed med j og skriv følgende, bemærk, at det ikke er i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Hvis den imaginære del er 1, resulterer udeladelse af den i en NameError. Hvis en variabel med navnet j er defineret først, anses den for at være den pågældende variabel.
1j
Det bør udtrykkeligt angives på denne måde.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Hvis den reelle del er 0, kan den udelades.
c = 3j
print(c)
# 3j
Hvis du ønsker at definere en værdi med en imaginær del på 0 som en kompleks kompleks type, skal du skrive 0 eksplicit. Som beskrevet nedenfor kan der udføres operationer mellem den komplekse type og en heltalstype eller en flydepunktstype.
c = 3 + 0j
print(c)
# (3+0j)
Real- og imaginærdelen kan angives som floating-point float-typen. Eksponentiel notation er også acceptabel.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Den kan også genereres af en konstruktor af typen “complex”, som i “complex(real part, imaginary part)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Få reelle og imaginære dele af komplekse tal: real, imagattribut
Real- og imaginærdelen af en kompleks kompleks type kan fås ved hjælp af henholdsvis real- og imag-attributterne. Begge er float-typer med flydende komma.
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'>
Den er skrivebeskyttet og kan ikke ændres.
# c.real = 5.5
# AttributeError: readonly attribute
Få konjugerede komplekse tal: conjugate()
For at få konjugerede komplekse tal skal du bruge metoden conjugate() for at få konjugerede komplekse tal.
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Opnå den absolutte værdi (størrelsen) af et komplekst tal: abs()
For at få den absolutte værdi (størrelsen) af et komplekst tal skal du bruge den indbyggede funktion abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Opnå deklinationen (fasen) af et komplekst tal: math, cmathmodul
For at få declinationen (fasen) af et komplekst tal skal du bruge math- eller cmath-modulet.
cmath-modulet er et matematisk funktionsmodul for komplekse tal.
Den kan beregnes med den omvendte tangentfunktion math.atan2() som defineret, eller man kan bruge cmath.phase(), som returnerer deklinationen (fasen).
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
I begge tilfælde er den enhed for den vinkel, der kan opnås, radianer. For at konvertere til grader skal du bruge math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Polar koordinattransformation af komplekse tal (polær formel repræsentation): math, cmathmodul
Som nævnt ovenfor kan man få den absolutte værdi (magnitude) og deklinationen (fase) af et komplekst tal, men ved hjælp af cmath.polar() kan de fås sammen som en (absolut værdi, deklination) tupel.
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
Konvertering fra polære koordinater til kartesiske koordinater sker ved hjælp af cmath.rect(). cmath.rect(absolut værdi, afvigelse) og lignende argumenter kan bruges til at opnå værdier af den tilsvarende komplekse komplekse komplekse type.
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)
De reelle og imaginære dele svarer til de resultater, der beregnes af cosinus math.cos() og sinus math.sin() ud fra absolutte værdier og deklinationer.
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
Beregning af komplekse tal (kvadratur, potenser, kvadratrødder)
Der kan udføres fire aritmetiske operationer og potensberegninger ved hjælp af de sædvanlige aritmetiske operatorer.
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)
Kvadratroden kan beregnes med **0,5, men det medfører fejl. cmath.sqrt() kan bruges til at beregne den nøjagtige værdi.
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
Den kan også udføre aritmetiske operationer med komplekse typer, int-typer og float-typer.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)