cmath --- Hàm toán học cho số phức


Mô-đun này cung cấp quyền truy cập vào các hàm toán học cho số phức. Các hàm trong mô-đun này chấp nhận số nguyên, số dấu phẩy động hoặc số phức làm đối số. Họ cũng sẽ chấp nhận bất kỳ đối tượng Python nào có phương thức __complex__() hoặc __float__(): các phương thức này được sử dụng để chuyển đổi đối tượng thành số phức hoặc số dấu phẩy động tương ứng và sau đó hàm này được áp dụng cho kết quả của chuyển đổi.

Ghi chú

Đối với các hàm liên quan đến việc cắt nhánh, chúng ta gặp vấn đề trong việc quyết định cách xác định các hàm đó trên chính vết cắt. Theo bài viết "Cắt nhánh cho các hàm cơ bản phức tạp" của Kahan, cũng như Phụ lục G của các tiêu chuẩn C99 và C sau này, chúng tôi sử dụng dấu bằng 0 để phân biệt một bên của nhánh được cắt với bên kia: đối với một nhánh cắt dọc theo (một phần) trục thực, chúng ta xem xét dấu của phần ảo, trong khi đối với nhánh cắt dọc theo trục ảo, chúng ta xem xét dấu của phần thực.

Ví dụ: hàm cmath.sqrt() có một nhánh cắt dọc theo trục thực âm. Một đối số của -2-0j được xử lý như thể nó nằm ở below nhánh bị cắt và do đó đưa ra kết quả trên trục ảo âm:

>>> cmath.sqrt(-2-0j)
-1.4142135623730951j

Nhưng một đối số của -2+0j được xử lý như thể nó nằm phía trên nhánh cut:

>>> cmath.sqrt(-2+0j)
1.4142135623730951j

Conversions to and from polar coordinates

phase(z)

Trả lại pha của z

polar(z)

Trả về biểu diễn của z theo tọa độ cực

rect(r, phi)

Trả về số phức z có tọa độ cực rphi

Power and logarithmic functions

exp(z)

Trả về e được nâng lên lũy thừa z

log(z[, base])

Trả về logarit của z cho base đã cho (e theo mặc định)

log10(z)

Trả về logarit cơ số 10 của z

sqrt(z)

Trả về căn bậc hai của z

Trigonometric functions

acos(z)

Trả về cung cosin của z

asin(z)

Trả về sin cung của z

atan(z)

Trả về tiếp tuyến cung của z

cos(z)

Trả về cosin của z

sin(z)

Trả về sin của z

tan(z)

Trả về tang của z

Hyperbolic functions

acosh(z)

Trả về cosin hyperbol nghịch đảo của z

asinh(z)

Trả về sin hyperbol nghịch đảo của z

atanh(z)

Trả về tang hyperbol nghịch đảo của z

cosh(z)

Trả về cosin hyperbol của z

sinh(z)

Trả về sin hyperbol của z

tanh(z)

Trả về tang hyperbol của z

Classification functions

isfinite(z)

Kiểm tra xem tất cả các thành phần của z có hữu hạn không

isinf(z)

Kiểm tra xem có thành phần nào của z là vô hạn không

isnan(z)

Kiểm tra xem có thành phần nào của z là NaN không

isclose(a, b, *, rel_tol, abs_tol)

Kiểm tra xem các giá trị ab có gần nhau không

Constants

pi

π = 3,141592...

e

e = 2,718281...

tau

τ = 2π = 6,283185...

inf

dương vô cùng

infj

Sự vô cùng tưởng tượng thuần khiết

nan

"Không phải số" (NaN)

nanj

NaN tưởng tượng thuần túy

Chuyển đổi sang và từ tọa độ cực

Số phức z của Python được lưu trữ nội bộ bằng cách sử dụng tọa độ rectangular hoặc Cartesian. Nó hoàn toàn được xác định bởi real part z.realimaginary part z.imag của nó.

Polar coordinates đưa ra một cách khác để biểu diễn số phức. Trong tọa độ cực, số phức z được xác định bởi mô đun r và góc pha phi. Mô đun r là khoảng cách từ z đến gốc tọa độ, trong khi pha phi là góc ngược chiều kim đồng hồ, được đo bằng radian, từ trục x dương đến đoạn thẳng nối gốc tọa độ với z.

Các hàm sau có thể được sử dụng để chuyển đổi từ tọa độ hình chữ nhật gốc sang tọa độ cực và ngược lại.

cmath.phase(z)

Trả về pha của z (còn được gọi là argument của z), dưới dạng float. phase(z) tương đương với math.atan2(z.imag, z.real). Kết quả nằm trong phạm vi [-π, π] và việc cắt nhánh cho thao tác này nằm dọc theo trục thực âm. Dấu của kết quả giống với dấu của z.imag, ngay cả khi z.imag bằng 0:

>>> pha(-1+0j)
3.141592653589793
>>> pha(-1-0j)
-3.141592653589793

Ghi chú

Mô đun (giá trị tuyệt đối) của số phức z có thể được tính bằng hàm abs() tích hợp. Không có chức năng mô-đun cmath riêng biệt cho hoạt động này.

cmath.polar(z)

Trả về biểu diễn của z theo tọa độ cực. Trả về một cặp (r, phi) trong đó r là mô đun của zphi là pha của z. polar(z) tương đương với (abs(z), phase(z)).

cmath.rect(r, phi)

Trả về số phức z với tọa độ cực rphi. Tương đương với complex(r * math.cos(phi), r * math.sin(phi)).

Hàm lũy thừa và hàm logarit

cmath.exp(z)

Trả về e được nâng lên lũy thừa z, trong đó e là cơ số của logarit tự nhiên.

cmath.log(z[, base])

Trả về logarit của z cho base đã cho. Nếu base không được chỉ định, trả về logarit tự nhiên của z. Có một nhánh bị cắt, từ 0 dọc theo trục thực âm đến -∞.

cmath.log10(z)

Trả về logarit cơ số 10 của z. Cái này có cùng nhánh cắt với log().

cmath.sqrt(z)

Trả về căn bậc hai của z. Cái này có cùng nhánh cắt với log().

Hàm lượng giác

cmath.acos(z)

Trả về cung cosin của z. Có hai đường cắt nhánh: Một đường cắt nhánh phải từ 1 dọc theo trục thực đến ∞. Phần còn lại kéo dài sang trái từ -1 dọc theo trục thực đến -∞.

cmath.asin(z)

Trả về sin cung của z. Cái này có các nhánh cắt giống như acos().

cmath.atan(z)

Trả về tang tiếp tuyến của z. Có hai đường cắt nhánh: Một nhánh kéo dài từ 1j dọc theo trục ảo đến ∞j. Cái còn lại kéo dài từ -1j dọc theo trục ảo đến -∞j.

cmath.cos(z)

Trả về cosin của z.

cmath.sin(z)

Trả về sin của z.

cmath.tan(z)

Trả về tang của z.

Hàm hyperbol

cmath.acosh(z)

Trả về cosin hyperbol nghịch đảo của z. Có một nhánh bị cắt, kéo dài sang trái từ 1 dọc theo trục thực đến -∞.

cmath.asinh(z)

Trả về sin hyperbol nghịch đảo của z. Có hai đường cắt nhánh: Một nhánh kéo dài từ 1j dọc theo trục ảo đến ∞j. Cái còn lại kéo dài từ -1j dọc theo trục ảo đến -∞j.

cmath.atanh(z)

Trả về tang hyperbol nghịch đảo của z. Có hai đường cắt nhánh: Một nhánh kéo dài từ 1 dọc theo trục thực đến . Cái còn lại kéo dài từ -1 dọc theo trục thực đến -∞.

cmath.cosh(z)

Trả về cosin hyperbol của z.

cmath.sinh(z)

Trả về sin hyperbol của z.

cmath.tanh(z)

Trả về tang hyperbol của z.

Chức năng phân loại

cmath.isfinite(z)

Trả về True nếu cả phần thực và phần ảo của z đều hữu hạn và False nếu ngược lại.

Added in version 3.2.

cmath.isinf(z)

Trả về True nếu phần thực hoặc phần ảo của z là vô cùng và False nếu ngược lại.

cmath.isnan(z)

Trả về True nếu phần thực hoặc phần ảo của z là NaN và False nếu ngược lại.

cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

Trả về True nếu các giá trị ab gần nhau và False nếu ngược lại.

Việc hai giá trị có được coi là gần nhau hay không được xác định theo dung sai tuyệt đối và tương đối đã cho. Nếu không có lỗi xảy ra thì kết quả sẽ là: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol).

rel_tol là dung sai tương đối -- đó là chênh lệch tối đa được phép giữa ab, so với giá trị tuyệt đối lớn hơn của a hoặc b. Ví dụ: để đặt dung sai 5%, hãy chuyển rel_tol=0.05. Dung sai mặc định là 1e-09, đảm bảo rằng hai giá trị giống nhau trong khoảng 9 chữ số thập phân. rel_tol phải không âm và nhỏ hơn 1.0.

abs_tol là dung sai tuyệt đối; nó mặc định là 0.0 và nó phải không âm. Khi so sánh x với 0.0, isclose(x, 0) được tính là abs(x) <= rel_tol  * abs(x), tức là False đối với mọi x và rel_tol nhỏ hơn 1.0. Vì vậy, hãy thêm đối số abs_tol tích cực thích hợp vào cuộc gọi.

Các giá trị đặc biệt IEEE 754 của NaN, inf-inf sẽ được xử lý theo quy tắc IEEE. Cụ thể, NaN không được coi là gần với bất kỳ giá trị nào khác, kể cả NaN. inf-inf chỉ được coi là gần gũi với nhau.

Added in version 3.5.

Xem thêm

PEP 485 -- Một hàm để kiểm tra sự bằng nhau gần đúng

Hằng số

cmath.pi

Hằng số toán học π, dưới dạng số float.

cmath.e

Hằng số toán học e, dưới dạng số float.

cmath.tau

Hằng số toán học τ, dưới dạng số float.

Added in version 3.6.

cmath.inf

Điểm nổi dương vô cực. Tương đương với float('inf').

Added in version 3.6.

cmath.infj

Số phức có phần thực bằng 0 và phần ảo vô cực dương. Tương đương với complex(0.0, float('inf')).

Added in version 3.6.

cmath.nan

Giá trị dấu phẩy động "không phải số" (NaN). Tương đương với float('nan'). Xem thêm math.nan.

Added in version 3.6.

cmath.nanj

Số phức có phần thực bằng 0 và phần ảo NaN. Tương đương với complex(0.0, float('nan')).

Added in version 3.6.

Lưu ý rằng việc lựa chọn các chức năng tương tự, nhưng không giống hệt với chức năng trong mô-đun math. Lý do có hai mô-đun là vì một số người dùng không quan tâm đến số phức và thậm chí có thể không biết chúng là gì. Họ thà yêu cầu math.sqrt(-1) đưa ra một ngoại lệ hơn là trả về một số phức. Cũng lưu ý rằng các hàm được xác định trong cmath luôn trả về số phức, ngay cả khi câu trả lời có thể được biểu thị dưới dạng số thực (trong trường hợp đó số phức có phần ảo bằng 0).

Lưu ý khi cắt nhánh: Chúng là những đường cong dọc theo đó hàm số đã cho không liên tục. Chúng là một tính năng cần thiết của nhiều chức năng phức tạp. Giả sử rằng nếu bạn cần tính toán các hàm phức tạp, bạn sẽ hiểu về việc cắt nhánh. Hãy tham khảo hầu hết mọi cuốn sách (không quá cơ bản) về các biến số phức tạp để hiểu rõ hơn. Để biết thông tin về việc lựa chọn các cành cắt phù hợp cho mục đích số học, bạn nên tham khảo những thông tin sau:

Xem thêm

Kahan, W: Cắt nhánh cho các hàm cơ bản phức tạp; hoặc, Nhiều lời phàn nàn về việc không có gì đáng chú ý. Trong Iserles, A., và Powell, M. (eds.), Trạng thái tiên tiến trong phân tích số. Nhà xuất bản Clarendon (1987) trang165--211.