Python, komplekse typer til at arbejde med komplekse tal (absolutte værdier, deklination, polære transformationer osv.)

Forretning

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,imagattribut
  • Få konjugerede komplekse tal:conjugate()metode
  • Få den absolutte værdi (størrelsesorden):abs()funktion (f.eks. matematik, programmering, programmering)
  • Opnå deklination (fase):math,cmathmodul
  • Polar koordinattransformation (repræsentation i polarform):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)