Số phức được tạo từ các số thực. Python complex number có thể được tạo bằng câu lệnh gán trực tiếp hoặc bằng hàm complex().
Số phức chủ yếu dùng ở nơi chúng ta sử dụng hai số thực. Ví dụ, mạch điện được định nghĩa bởi điện áp (V) và dòng điện (C) được dùng trong hình học, tính toán khoa học và giải tích.
Cú pháp
complex([real[, imag]])
Tạo số phức đơn giản trong Python
>>> c = 3 + 6j
>>> print(type(c))
>>> print(c)
(3+6j)
>>>
>>> c1 = complex(3, 6)
>>> print(type(c1))
>>> print(c1)
(3+6j)
Từ kết quả trên, ta thấy số phức Python thuộc kiểu complex. Mỗi số phức bao gồm một phần thực và một phần ảo.
Số phức Python - Thuộc tính và Hàm
>>> # Số phức:
>>> c = (3 + 6j)
>>>
>>> # Phần thực của số phức
>>> print('Số phức: Phần thực = ', c.real)
Số phức: Phần thực = 3.0
>>>
>>> # Phần ảo của số phức
>>> print('Số phức: Phần ảo = ', c.imag)
Số phức: Phần ảo = 6.0
>>>
>>> # Số phức liên hợp (conjugate)
>>> print('Số phức: Phần liên hợp = ', c.conjugate())
Số phức: Phần liên hợp = (3-6j)
Các phép tính Toán học trên Số phức
Chúng ta có thể thực hiện các phép tính đơn giản trên số phức:
>>> # Số phức thứ nhất
>>> c1 = 3 + 6j
>>> # Số phức thứ hai
>>> c2 = 6 + 15j
>>>
>>> # Cộng
>>> print("Cộng hai số phức =", c1 + c2)
Cộng hai số phức = (9+21j)
>>>
>>> # Trừ
>>> print("Trừ hai số phức =", c1 - c2)
Trừ hai số phức = (-3-9j)
>>>
>>> # Nhân
>>> print("Nhân hai số phức =", c1 * c2)
Nhân hai số phức = (-72+81j)
>>>
>>> # Chia
>>> print("Chia hai số phức =", c1 / c2)
Chia hai số phức = (0.4137931034482759-0.03448275862068964j)
Tuy nhiên, số phức không hỗ trợ các toán tử so sánh như <, >, <=, >= và sẽ ném TypeError:
>>> c2 <= c2
Traceback (most recent call last):
File "", line 1, in
c2 <= c2
TypeError: '<=' not supported between instances of 'complex' and 'complex'
Module cmath của Python
Module cmath của Python cung cấp truy cập các hàm toán học cho số phức. Hãy xem một số tính năng quan trọng của số phức dùng hàm module math.
Pha (Phase) của số phức
Pha của một số phức là góc giữa trục thực và vectơ biểu diễn phần ảo.
Pha được trả về bởi module math và cmath tính bằng radian và chúng ta dùng hàm numpy.degrees() để chuyển sang độ.
import cmath, math, numpy
c = 4 + 4j
# phase
phase = cmath.phase(c)
print('4+ 4j Phase =', phase)
print('Phase in Degrees =', numpy.degrees(phase))
print('-4-4j Phase =', cmath.phase(-4-4j), 'radians. Degrees =', numpy.degrees(cmath.phase(-4-4j)))
# Có thể lấy phase dùng math.atan2() nữa
print('Pha số phức dùng math.atan2() =', math.atan2(2, 1))
Kết quả
4+ 4j Phase = 0.7853981633974483
Phase in Degrees = 45.0
-4-4j Phase = -2.356194490192345 radians. Degrees = -135.0
Pha số phức dùng math.atan2() = 1.1071487177940904
Các hằng số của module cmath
Có một vài hằng số trong module cmath dùng trong tính toán số phức:
import cmath
print('π =', cmath.pi)
print('e =', cmath.e)
print('tau =', cmath.tau)
print('Positive infinity =', cmath.inf)
print('Positive Complex infinity =', cmath.infj)
print('NaN =', cmath.nan)
print('NaN Complex =', cmath.nanj)
Kết quả
π = 3.141592653589793
e = 2.718281828459045
tau = 6.283185307179586
Positive infinity = inf
Positive Complex infinity = infj
NaN = nan
NaN Complex = nanj
Hàm Lũy thừa và Logarit
Module cmath() cung cấp một số hàm hữu ích cho phép toán logarit và lũy thừa:
import cmath
c = 1 + 2j
print('e^c =', cmath.exp(c))
print('log2(c) =', cmath.log(c, 2))
print('log10(c) =', cmath.log10(c))
print('sqrt(c) =', cmath.sqrt(c))
Kết quả
e^c = (-1.1312043837568135+2.4717266720048188j)
log2(c) = (1.1609640474436813+1.5972779646881088j)
log10(c) = (0.3494850021680094+0.480828578784234j)
sqrt(c) = (1.272019649514069+0.7861513777574233j)
Hàm Lượng giác
import cmath
c = 2 + 4j
print('arc sine value:\n ', cmath.asin(c))
print('arc cosine value :\n', cmath.acos(c))
print('arc tangent value of complex number c :\n', cmath.atan(c))
print('sine value:\n', cmath.sin(c))
print('cosine value:\n', cmath.cos(c))
print('tangent value:\n', cmath.tan(c))
Kết quả
arc sine value: (0.4538702099631225+2.198573027920936j)
arc cosine value: (1.1169261168317741-2.198573027920936j)
arc tangent value of complex number c: (1.4670482135772953+0.20058661813123432j)
sine value: (24.83130584894638-11.356612711218174j)
cosine value: (-11.36423470640106-24.814651485634187j)
tangent value: (-0.0005079806234700387+1.0004385132020523j)
Hàm Hyperbolic
import cmath
c = 2 + 4j
print('Inverse hyperbolic sine value: \n', cmath.asinh(c))
print('Inverse hyperbolic cosine value: \n', cmath.acosh(c))
print('Inverse hyperbolic tangent value: \n', cmath.atanh(c))
print('Hyperbolic sine value: \n', cmath.sinh(c))
print('Hyperbolic cosine value: \n', cmath.cosh(c))
print('Hyperbolic tangent value: \n', cmath.tanh(c))
Kết quả
Inverse hyperbolic sine value: (2.183585216564564+1.096921548830143j)
Inverse hyperbolic cosine value: (2.198573027920936+1.1169261168317741j)
Inverse hyperbolic tangent value: (0.09641562020299617+1.3715351039616865j)
Hyperbolic sine value: (-2.370674169352002-2.8472390868488278j)
Hyperbolic cosine value: (-2.4591352139173837-2.744817006792154j)
Hyperbolic tangent value: (1.0046823121902348+0.03642336924740368j)