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 |
|
Trả lại pha của z |
|
Trả về biểu diễn của z theo tọa độ cực |
|
Trả về số phức z có tọa độ cực r và phi |
|
Power and logarithmic functions |
|
Trả về e được nâng lên lũy thừa z |
|
Trả về logarit của z cho base đã cho (e theo mặc định) |
|
Trả về logarit cơ số 10 của z |
|
Trả về căn bậc hai của z |
|
Trigonometric functions |
|
Trả về cung cosin của z |
|
Trả về sin cung của z |
|
Trả về tiếp tuyến cung của z |
|
Trả về cosin của z |
|
Trả về sin của z |
|
Trả về tang của z |
|
Hyperbolic functions |
|
Trả về cosin hyperbol nghịch đảo của z |
|
Trả về sin hyperbol nghịch đảo của z |
|
Trả về tang hyperbol nghịch đảo của z |
|
Trả về cosin hyperbol của z |
|
Trả về sin hyperbol của z |
|
Trả về tang hyperbol của z |
|
Classification functions |
|
Kiểm tra xem tất cả các thành phần của z có hữu hạn không |
|
Kiểm tra xem có thành phần nào của z là vô hạn không |
|
Kiểm tra xem có thành phần nào của z là NaN không |
|
Kiểm tra xem các giá trị a và b có gần nhau không |
|
Constants |
|
π = 3,141592... |
|
e = 2,718281... |
|
τ = 2π = 6,283185... |
|
dương vô cùng |
|
Sự vô cùng tưởng tượng thuần khiết |
|
"Không phải số" (NaN) |
|
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.real và imaginary 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ớimath.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ủaz.imag, ngay cả khiz.imagbằ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 z và phi 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 r và phi. 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 -∞.
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.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ừ
1jdọc theo trục ảo đến∞j. Cái còn lại kéo dài từ-1jdọ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ừ
1jdọc theo trục ảo đến∞j. Cái còn lại kéo dài từ-1jdọ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ừ
1dọc theo trục thực đến∞. Cái còn lại kéo dài từ-1dọ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ề
Truenếu cả phần thực và phần ảo của z đều hữu hạn vàFalsenếu ngược lại.Added in version 3.2.
- cmath.isinf(z)¶
Trả về
Truenếu phần thực hoặc phần ảo của z là vô cùng vàFalsenếu ngược lại.
- cmath.isnan(z)¶
Trả về
Truenếu phần thực hoặc phần ảo của z là NaN vàFalsenếu ngược lại.
- cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)¶
Trả về
Truenếu các giá trị a và b gần nhau vàFalsenế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 a và b, 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ơn1.0.abs_tol là dung sai tuyệt đối; nó mặc định là
0.0và nó phải không âm. Khi so sánhxvới0.0,isclose(x, 0)được tính làabs(x) <= rel_tol * abs(x), tức làFalseđối với mọixvà rel_tol nhỏ hơn1.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,infvà-infsẽ được xử lý theo quy tắc IEEE. Cụ thể,NaNkhông được coi là gần với bất kỳ giá trị nào khác, kể cảNaN.infvà-infchỉ đượ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êmmath.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.