Python, tipos complejos para trabajar con números complejos (valores absolutos, declinación, transformaciones polares, etc.)

Negocio

Python tiene un tipo estándar para manejar números complejos, el tipo COMPLEX. Si sólo quieres hacer cálculos sencillos, no necesitas importar ningún módulo, pero si importas la librería estándar cmath, también puedes usar funciones matemáticas (exponenciales, logarítmicas, trigonométricas, etc.) correspondientes a números complejos.

Los siguientes contenidos se explican aquí con un código de ejemplo.

  • Generar variables complejas
  • Obtener partes reales e imaginarias:real,imagatributo
  • Obtener números complejos conjugados:conjugate()método
  • Obtener el valor absoluto (magnitud):abs()función (por ejemplo, matemáticas, programación, programación)
  • Obtener la declinación (fase):math,cmathmódulo
  • Transformación de coordenadas polares (representación en forma polar):math,cmathmódulo
  • Cálculo de números complejos (cuadratura, potencias, raíces cuadradas)

Generar variables complejas

Denote la unidad imaginaria por j y escriba lo siguiente, observe que no es i.

c = 3 + 4j

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

Si la parte imaginaria es 1, al omitirla se produce un NameError. Si se define primero una variable llamada j, se considera que es esa variable.

1j
Debería ser declarado explícitamente de esta manera.

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

c = 3 + 1j

print(c)
# (3+1j)

Si la parte real es 0, se puede omitir.

c = 3j

print(c)
# 3j

Si desea definir un valor con una parte imaginaria de 0 como un tipo complejo, escriba 0 explícitamente. Como se describe a continuación, se pueden realizar operaciones entre el tipo complejo y el tipo entero o el tipo de punto flotante.

c = 3 + 0j

print(c)
# (3+0j)

Las partes real e imaginaria pueden especificarse como tipo float de punto flotante. También se acepta la notación exponencial.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

También puede ser generado por un constructor de tipo «complejo», como en «complejo(parte real, parte imaginaria)».

c = complex(3, 4)

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

Obtener las partes reales e imaginarias de los números complejos: real, imagatributo

Las partes real e imaginaria de un tipo complejo pueden obtenerse con los atributos real e imag, respectivamente. Ambos son tipos flotantes de punto flotante.

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

Es de sólo lectura y no se puede modificar.

# c.real = 5.5
# AttributeError: readonly attribute

Obtener números complejos conjugados: conjugate()

Para obtener números complejos conjugados, utilice el método conjugate().

c = 3 + 4j

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

Obtener el valor absoluto (magnitud) de un número complejo: abs()

Para obtener el valor absoluto (magnitud) de un número complejo, utilice la función incorporada abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Obtener la declinación (fase) de un número complejo: math, cmathmódulo

Para obtener la declinación (fase) de un número complejo, utilice el módulo math o cmath.

El módulo cmath es un módulo de funciones matemáticas para números complejos.

Se puede calcular con la función de tangente inversa math.atan2() como se ha definido, o utilizar cmath.phase(), que devuelve la declinación (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 ambos casos, la unidad de ángulo que se puede obtener es el radio. Para convertir a grados, utilice math.degrees().

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

Transformación en coordenadas polares de los números complejos (representación formal polar): math, cmathmódulo

Como se ha mencionado anteriormente, se puede obtener el valor absoluto (magnitud) y la declinación (fase) de un número complejo, pero utilizando cmath.polar(), se pueden obtener juntos como una tupla (valor absoluto, declinación).

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ón de coordenadas polares a coordenadas cartesianas se realiza mediante cmath.rect(). cmath.rect(valor absoluto, desviación) y argumentos similares pueden utilizarse para obtener valores del tipo complejo equivalente.

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)

Las partes real e imaginaria son equivalentes a los resultados calculados por coseno math.cos() y seno math.sin() a partir de valores absolutos y ángulos de declinación.

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álculo de números complejos (cuadratura, potencias, raíces cuadradas)

Se pueden realizar cuatro operaciones aritméticas y cálculos de potencia con los operadores aritméticos habituales.

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)

La raíz cuadrada se puede calcular con **0,5, pero introduce un error. Se puede utilizar cmath.sqrt() para calcular el valor exacto.

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

También puede realizar operaciones aritméticas con tipos complejos, tipos int y tipos float.

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

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