Python có một kiểu tiêu chuẩn để xử lý số phức, kiểu COMPLEX. Nếu bạn chỉ muốn thực hiện các phép tính đơn giản, bạn không cần nhập bất kỳ mô-đun nào, nhưng nếu bạn nhập cmath thư viện chuẩn, bạn cũng có thể sử dụng các hàm toán học (hàm mũ, logarit, lượng giác, v.v.) tương ứng với số phức.
Các nội dung sau đây được giải thích ở đây với mã mẫu.
- Tạo các biến phức tạp
- Nhận các phần thực và ảo:
real
,imag
thuộc tính - Nhận số phức liên hợp:
conjugate()
phương pháp - Nhận giá trị tuyệt đối (độ lớn):
abs()
hàm (ví dụ: toán học, lập trình, lập trình) - Có được độ nghiêng (pha):
math
,cmath
mô-đun - Phép biến đổi tọa độ cực (biểu diễn dạng cực):
math
,cmath
mô-đun - Tính toán các số phức (vuông góc, lũy thừa, căn bậc hai)
- Tạo các biến phức tạp
- Nhận các phần thực và ảo của số phức:real,imagthuộc tính
- Nhận số phức liên hợp:conjugate()
- Nhận giá trị tuyệt đối (độ lớn) của một số phức:abs()
- Nhận được số thập phân (pha) của một số phức:math,cmathmô-đun
- Phép biến đổi tọa độ cực của số phức (biểu diễn hình thức cực):math,cmathmô-đun
- Tính toán các số phức (vuông góc, lũy thừa, căn bậc hai)
Tạo các biến phức tạp
Kí hiệu đơn vị ảo bằng j và viết như sau, lưu ý rằng nó không phải là i.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Nếu phần ảo là 1, việc bỏ qua phần đó sẽ dẫn đến Lỗi tên. Nếu một biến có tên j được xác định trước, nó được coi là biến đó.
1j
Nó nên được nêu rõ ràng theo cách này.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Nếu phần thực là 0, nó có thể được bỏ qua.
c = 3j
print(c)
# 3j
Nếu bạn muốn xác định một giá trị có phần ảo của 0 là một kiểu phức phức hợp, hãy viết 0 một cách rõ ràng. Như mô tả bên dưới, các phép toán có thể được thực hiện giữa kiểu phức và kiểu số nguyên hoặc kiểu dấu phẩy động.
c = 3 + 0j
print(c)
# (3+0j)
Các phần thực và ảo có thể được chỉ định là kiểu dấu phẩy động. Ký hiệu theo cấp số nhân cũng được chấp nhận.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Nó cũng có thể được tạo bởi một hàm tạo kiểu “phức hợp”, như trong “phức hợp (phần thực, phần ảo)”.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Nhận các phần thực và ảo của số phức:real,imagthuộc tính
Phần thực và phần ảo của một kiểu phức hợp phức tạp có thể nhận được tương ứng với các thuộc tính thực và hình ảnh. Cả hai đều là loại dấu phẩy động.
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'>
Nó chỉ được đọc và không thể thay đổi.
# c.real = 5.5
# AttributeError: readonly attribute
Nhận số phức liên hợp:conjugate()
Để thu được số phức liên hợp, hãy sử dụng phương thức liên hợp ().
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Nhận giá trị tuyệt đối (độ lớn) của một số phức:abs()
Để nhận giá trị tuyệt đối (độ lớn) của một số phức, hãy sử dụng hàm abs () tích hợp sẵn.
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Nhận được số thập phân (pha) của một số phức:math,cmathmô-đun
Để có được độ nghiêng (pha) của một số phức, hãy sử dụng toán học hoặc mô-đun cmath.
Mô-đun cmath là một mô-đun hàm toán học cho các số phức.
Nó có thể được tính bằng hàm tiếp tuyến nghịch đảo math.atan2 () như được định nghĩa hoặc sử dụng cmath.phase (), trả về độ nghiêng (pha).
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
Trong cả hai trường hợp, đơn vị góc có thể nhận được là radian. Để chuyển đổi sang độ, hãy sử dụng math.degrees ().
print(math.degrees(cmath.phase(c)))
# 45.0
Phép biến đổi tọa độ cực của số phức (biểu diễn hình thức cực):math,cmathmô-đun
Như đã đề cập ở trên, có thể thu được giá trị tuyệt đối (độ lớn) và độ nghiêng (pha) của một số phức, nhưng bằng cách sử dụng cmath.polar (), chúng có thể thu được cùng nhau dưới dạng một bộ (giá trị tuyệt đối, độ nghiêng).
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
Việc chuyển đổi từ tọa độ cực sang tọa độ Descartes được thực hiện bằng cách sử dụng cmath.rect (). cmath.rect (giá trị tuyệt đối, độ lệch) và các đối số tương tự có thể được sử dụng để lấy các giá trị của kiểu phức phức tương đương.
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)
Phần thực và phần ảo tương đương với kết quả được tính toán bởi cosine math.cos () và sin math.sin () từ các giá trị tuyệt đối và góc nghiêng.
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
Tính toán các số phức (vuông góc, lũy thừa, căn bậc hai)
Bốn phép tính số học và phép tính lũy thừa có thể được thực hiện bằng cách sử dụng các toán tử số học thông thường.
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)
Căn bậc hai có thể được tính với ** 0,5, nhưng nó gây ra lỗi. cmath.sqrt () có thể được sử dụng để tính toán giá trị chính xác.
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
Nó cũng có thể thực hiện các phép toán số học với các kiểu phức tạp, kiểu int và kiểu float.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)