Python té un tipus estàndard per manejar nombres complexos, el tipus COMPLEX. Si només voleu fer càlculs senzills, no cal que importeu cap mòdul, però si importeu la biblioteca estàndard cmath, també podeu utilitzar funcions matemàtiques (exponencial, logarítmica, trigonomètrica, etc.) corresponents a nombres complexos.
Els continguts següents s’expliquen aquí amb codi d’exemple.
- Generar variables complexes
- Obteniu parts reals i imaginàries:
real
,imag
atribut - Obtenir nombres complexos conjugats:
conjugate()
mètode - Obteniu el valor absolut (magnitud):
abs()
funció (per exemple, matemàtiques, programació, programació) - Obtenir la declinació (fase):
math
,cmath
mòdul - Transformació de coordenades polars (representació de forma polar):
math
,cmath
mòdul - Càlcul de nombres complexos (quadratura, potències, arrels quadrades)
- Generar variables complexes
- Obtenir parts reals i imaginàries de nombres complexos:real,imagatribut
- Obtenir nombres complexos conjugats:conjugate()
- Obtenir el valor absolut (magnitud) d’un nombre complex:abs()
- Obtenir la declinació (fase) d’un nombre complex:math,cmathmòdul
- Transformació de coordenades polars de nombres complexos (representació formal polar):math,cmathmòdul
- Càlcul de nombres complexos (quadratura, potències, arrels quadrades)
Generar variables complexes
Denota la unitat imaginària amb j i escriu el següent, observa que no és i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Si la part imaginària és 1, ometre-la provoca un NameError. Si es defineix primer una variable anomenada j, es considera que és aquesta variable.
1j
S’hauria d’expressar d’aquesta manera.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Si la part real és 0, es pot ometre.
c = 3j
print(c)
# 3j
Si voleu definir un valor amb una part imaginària de 0 com a tipus complex complex, escriviu 0 explícitament. Tal com es descriu a continuació, es poden realitzar operacions entre el tipus complex i el tipus enter o el tipus de coma flotant.
c = 3 + 0j
print(c)
# (3+0j)
Les parts reals i imaginàries es poden especificar com a tipus flotant de coma flotant. La notació exponencial també és acceptable.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
També pot ser generat per un constructor de tipus “complex”, com en “complex(part real, part imaginària)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Obtenir parts reals i imaginàries de nombres complexos:real,imagatribut
Les parts real i imaginària d’un tipus complex complex es poden obtenir amb els atributs real i imatge, respectivament. Tots dos són tipus flotant de coma flotant.
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'>
És només de lectura i no es pot canviar.
# c.real = 5.5
# AttributeError: readonly attribute
Obtenir nombres complexos conjugats:conjugate()
Per obtenir nombres complexos conjugats, utilitzeu el mètode conjugate().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Obtenir el valor absolut (magnitud) d’un nombre complex:abs()
Per obtenir el valor absolut (magnitud) d’un nombre complex, utilitzeu la funció incorporada abs().
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Obtenir la declinació (fase) d’un nombre complex:math,cmathmòdul
Per obtenir la declinació (fase) d’un nombre complex, utilitzeu el mòdul matemàtic o cmath.
El mòdul cmath és un mòdul de funcions matemàtiques per a nombres complexos.
Es pot calcular amb la funció de tangent inversa math.atan2() tal com es defineix, o utilitzar cmath.phase(), que retorna la declinació (fase).
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
En ambdós casos, la unitat d’angle que es pot obtenir són els radians. Per convertir en graus, utilitzeu math.degrees().
print(math.degrees(cmath.phase(c)))
# 45.0
Transformació de coordenades polars de nombres complexos (representació formal polar):math,cmathmòdul
Com s’ha esmentat anteriorment, es poden obtenir el valor absolut (magnitud) i la declinació (fase) d’un nombre complex, però utilitzant cmath.polar(), es poden obtenir junts com una tupla (valor absolut, declinació).
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
La conversió de coordenades polars a coordenades cartesianes es fa mitjançant cmath.rect(). cmath.rect(valor absolut, desviació) i arguments similars es poden utilitzar per obtenir valors del tipus complex complex complex equivalent.
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)
Les parts real i imaginària són equivalents als resultats calculats per cosinus math.cos() i sinus math.sin() a partir de valors absoluts i angles de declinació.
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
Càlcul de nombres complexos (quadratura, potències, arrels quadrades)
Es poden realitzar quatre operacions aritmètiques i càlculs de potència utilitzant els operadors aritmètics habituals.
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)
L’arrel quadrada es pot calcular amb **0,5, però introdueix error. cmath.sqrt() es pot utilitzar per calcular el valor exacte.
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
També pot realitzar operacions aritmètiques amb tipus complexos, tipus int i tipus float.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)