Hướng dẫn mod complex number python - mod python số phức
Hầu hết các ngôn ngữ lập trình đa năng không có hỗ trợ hoặc hỗ trợ hạn chế cho các số phức. Các tùy chọn điển hình của bạn là học một số công cụ chuyên dụng như MATLAB hoặc tìm thư viện của bên thứ ba. Python là một ngoại lệ hiếm hoi vì nó đi kèm với những con số phức tạp được tích hợp.complex numbers. Your typical options are learning some specialized tool like MATLAB or finding a third-party library. Python is a rare exception because it comes with complex numbers built in. Show
Mặc dù tên, những con số phức tạp không phải là phức tạp! Họ thuận tiện trong việc giải quyết các vấn đề thực tế mà bạn sẽ nhận được một hương vị trong hướng dẫn này. Youllll khám phá đồ họa vector và phân tích tần số âm thanh, nhưng các số phức tạp cũng có thể giúp vẽ các fractals, chẳng hạn như bộ Mandelbrot.vector graphics and sound frequency analysis, but complex numbers can also help in drawing fractals, such as the Mandelbrot set. Trong hướng dẫn này, bạn sẽ học cách:
Nếu bạn cần một sự bồi dưỡng nhanh hoặc giới thiệu nhẹ nhàng về lý thuyết về các số phức tạp, thì bạn có thể xem loạt video Khan Academy. Để tải xuống mã mẫu được sử dụng trong suốt hướng dẫn này, nhấp vào liên kết bên dưới: Tạo các số phức tạp trong PythonTạo và thao tác các số phức trong Python không khác nhiều so với các loại dữ liệu tích hợp khác, đặc biệt là các loại số. Nó có thể vì ngôn ngữ coi họ là công dân hạng nhất. Điều này có nghĩa là bạn có thể thể hiện các công thức toán học liên quan đến các số phức tạp với rất ít chi phí. Python cho phép bạn sử dụng các số phức tạp trong các biểu thức số học và các hàm gọi trên chúng giống như bạn làm với các số khác trong Python. Nó dẫn đến cú pháp thanh lịch đọc gần giống như một cuốn sách giáo khoa toán học. Số phức theo nghĩa đenCách nhanh nhất để xác định một số phức trong Python là bằng cách nhập trực tiếp theo nghĩa đen của nó vào mã nguồn: Mặc dù điều này trông giống như một công thức đại số, biểu thức ở bên phải của dấu bằng đã là một giá trị cố định không cần đánh giá thêm. Khi bạn kiểm tra loại của nó, bạn sẽ xác nhận rằng nó thực sự là một số phức tạp: >>>
Làm thế nào khác với việc thêm hai số với toán tử cộng? Một giveaway rõ ràng là chữ 1 dán vào số thứ hai, điều này thay đổi hoàn toàn ý nghĩa của biểu thức. Nếu bạn xóa chữ cái, thay vào đó, bạn sẽ nhận được kết quả số nguyên quen thuộc: thay vào đó:>>>
Làm thế nào khác với việc thêm hai số với toán tử cộng? Một giveaway rõ ràng là chữ 1 dán vào số thứ hai, điều này thay đổi hoàn toàn ý nghĩa của biểu thức. Nếu bạn xóa chữ cái, thay vào đó, bạn sẽ nhận được kết quả số nguyên quen thuộc: thay vào đó:>>>
Làm thế nào khác với việc thêm hai số với toán tử cộng? Một giveaway rõ ràng là chữ 1 dán vào số thứ hai, điều này thay đổi hoàn toàn ý nghĩa của biểu thức. Nếu bạn xóa chữ cái, thay vào đó, bạn sẽ nhận được kết quả số nguyên quen thuộc: thay vào đó:standard form, the algebraic form, or sometimes the canonical form, of a complex number. In Python, you can use either lowercase 1 or uppercase 3 in those literals.Nhân tiện, bạn cũng có thể sử dụng các số điểm nổi để tạo các số phức tạp: Các chữ số phức tạp trong Python bắt chước ký hiệu toán học, còn được gọi là dạng tiêu chuẩn, dạng đại số hoặc đôi khi là dạng chính tắc, của một số phức. Trong Python, bạn có thể sử dụng chữ thường 1 hoặc chữ hoa 3 trong các nghĩa đen đó.imaginary unit. You might feel a slight discomfort with Python’s convention if you have a mathematical background. However, there are a few reasons that can justify Python’s controversial choice:
Trong tính toán, chữ 4 thường được sử dụng cho biến lập chỉ mục trong các vòng lặp.
Điều này đã được đưa lên trên trình theo dõi lỗi Python, hơn một thập kỷ trước, và người tạo ra Python, chính Guido Van Rossum, đã đóng vấn đề này với nhận xét này: Điều này sẽ không được sửa chữa. Đối với một điều, chữ cái ‘I, hoặc trường hợp trên Tôi trông quá giống như các chữ số. Cách các số được phân tích cú pháp bởi trình phân tích cú pháp ngôn ngữ (trong mã nguồn) hoặc theo các hàm tích hợp (int, float, phức tạp) không nên được định hình hoặc có thể định cấu hình theo bất kỳ cách nào; Điều đó yêu cầu những thất vọng lớn xuống đường. Nếu bạn muốn phân tích các số phức tạp bằng cách sử dụng ‘I, thay vì‘ J, bạn đã có sẵn rất nhiều giải pháp. (Nguồn) >>>
Tương tự, bạn có thể thay thế bổ sung cho phép trừ trong một số phức tạp theo nghĩa đen vì dấu trừ chỉ là một ký hiệu tốc ký cho một dạng tương đương: >>>
Có một số phức tạp theo nghĩa đen trong Python luôn phải bao gồm hai số? Nó có thể có nhiều hơn? Họ được đặt hàng? Để trả lời những câu hỏi này, hãy để Lừa điều hành một số thí nghiệm. Không có gì đáng ngạc nhiên, nếu bạn chỉ định chỉ một số, không có chữ cái 1, thì bạn sẽ kết thúc với một số nguyên thông thường hoặc số điểm nổi:>>>
Mặt khác, việc thêm chữ cái 1 vào một chữ số sẽ ngay lập tức biến nó thành một số phức:>>>
Nói đúng ra, từ quan điểm toán học, bạn đã tạo ra một số tưởng tượng thuần túy, nhưng Python có thể đại diện cho nó như một loại dữ liệu độc lập. Do đó, không có phần khác, nó chỉ là một số phức.imaginary number, but Python can’t represent it as a stand-alone data type. Therefore, without the other part, it’s just a complex number . Làm thế nào về điều ngược lại? Để tạo một số phức mà không có phần tưởng tượng, bạn có thể tận dụng 0 và thêm hoặc trừ nó như vậy: >>>
Trong thực tế, cả hai phần của số phức luôn luôn ở đó. Khi bạn không thấy một, điều đó có nghĩa là nó có giá trị bằng không. Hãy để kiểm tra những gì xảy ra khi bạn thử nhét nhiều thuật ngữ vào tổng hơn trước: >>>
Lần này, biểu hiện của bạn không còn là một nghĩa đen vì Python đã đánh giá nó thành một số phức chỉ bao gồm hai phần. Hãy nhớ rằng các quy tắc cơ bản của đại số chuyển sang các số phức tạp, vì vậy nếu bạn nhóm các thuật ngữ tương tự và áp dụng bổ sung theo thành phần, thì bạn sẽ kết thúc với 8.Lưu ý cách Python hiển thị các số phức theo mặc định. Biểu diễn văn bản của họ chứa một cặp dấu ngoặc đơn, chữ thường 1 và không có khoảng trắng. Ngoài ra, phần tưởng tượng đứng thứ hai.Những con số phức tạp cũng là những con số tưởng tượng thuần túy xuất hiện mà không có dấu ngoặc đơn và chỉ tiết lộ phần tưởng tượng của chúng: >>>
Điều này giúp phân biệt các số tưởng tượng với hầu hết các số phức tạp được tạo thành từ các phần thực và tưởng tượng. >>> z = 3 + 2
>>> type(z)
|
Xoay vòng 90 ° | Tổng góc | Công thức | Số mũ | Giá trị |
---|---|---|---|---|
0 | 0 ° | z | 10 | 1 |
1 | 90 ° | Z × 1 | 11 | 1 |
2 | 180 ° | Z × 1 × 1 | 12 | -1 |
3 | 270 ° | Z × 1 × 1 × 1 | 13 | -________ 81 |
4 | 360 ° | Z × 1 × 1 × 1 × 1 | 14 | 1 |
5 | 450 ° | Z × 1 × 1 × 1 × 1 × 1 | 15 | 1 |
6 | 180 ° | Z × 1 × 1 | 12 | -1 |
7 | 270 ° | Z × 1 × 1 × 1 | 13 | -________ 81 |
8 | 360 ° | Z × 1 × 1 × 1 × 1 | 14 | 1 |
450 °
Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1
>>> 2 + 3j + 4 + 5j
(6+8j)
15>>> 3 - 2j == 3 + (-2j)
True
9540 °exponential form to make the calculations more straightforward:
Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1>>> z = 3.14
>>> type(z)
0>>> 2 + 3j + 4 + 5j
(6+8j)
16630 °
Z × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1 × >>> 2 + 3j + 4 + 5j (6+8j) 1
>>> 2 + 3j + 4 + 5j
(6+8j)
17720 °
>>> z = 3.14
>>> type(z)
1Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1trigonometric, hyperbolic, or logarithmic functions are available in the standard library. Sadly, even if you know everything about the Python >>> z = 3 + 2
>>> type(z)
47
module, it won’t help because none of its functions support complex numbers. You’ll need to combine it with the >>> 2 + 3j + 4 + 5j
(6+8j)
0 module, which defines corresponding functions for complex numbers.>>> 2 + 3j + 4 + 5j
(6+8j)
18720 °
>>> z = 3.14
>>> type(z)
2Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1720 °
>>> z = 3.14
>>> type(z)
3Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1 × >>> 2 + 3j + 4 + 5j
(6+8j)
1>>> 2 + 3j + 4 + 5j (6+8j) 18
Khi bạn thể hiện phép nhân lặp đi lặp lại bằng
>>> 2 + 3j + 4 + 5j
(6+8j)
1 về mặt số mũ dương, thì một mẫu xuất hiện. Lưu ý cách nâng đơn vị tưởng tượng lên các quyền hạn tiếp theo khiến nó đi qua cùng một giá trị nhiều lần. Bạn có thể ngoại suy điều này lên các số mũ phân đoạn và mong đợi chúng tương ứng với các góc trung gian.rectangular coordinates comprising the real and imaginary parts.Ví dụ, số mũ giữa vòng quay đầu tiên bằng 0,5 và biểu thị góc 45 °:polar coordinates that also let you find it unambiguously with two distances:
- Vì vậy, nếu bạn biết rằng một sức mạnh của một đại diện cho góc phù hợp và bất cứ điều gì ở giữa các thang đo theo tỷ lệ, thì bạn có thể lấy được công thức chung này cho các vòng quay tùy ý: is the length of the radius measured from the origin.
- Lưu ý rằng việc xoay trở nên tự nhiên hơn khi bạn thể hiện các số phức tạp của bạn trong tọa độ cực, đã mô tả góc. Sau đó, bạn có thể tận dụng hình thức theo cấp số nhân để làm cho các tính toán đơn giản hơn: is the angle measured between the horizontal axis and the radius.
Có hai cách để xoay một số bằng tọa độ cực:radius, also known as the modulus, corresponds to the complex number’s magnitude, or the vector’s length. The angle is commonly referred to as the phase or argument of a complex number. It’s useful to express the angle in radians rather than degrees when working with trigonometric functions.
Bạn có thể tổng hợp các góc hoặc nhân số phức của bạn với một vectơ đơn vị.
Bạn sẽ tìm hiểu thêm về những người trong phần tiếp theo.
Việc chuyển đổi giữa hai hệ tọa độ được thực hiện với một vài chức năng bị chôn vùi trong mô -đun
>>> 2 + 3j + 4 + 5j
(6+8j)
0. Cụ thể, để có được tọa độ cực của một số phức, bạn phải chuyển nó đến >>> z = 3.14 + 2.71j
>>> type(z)
18:>>>
>>> z = 3.14
>>> type(z)
4Nó sẽ trả lại một tuple, trong đó phần tử thứ nhất là bán kính và phần tử thứ hai là góc trong radian. Lưu ý rằng bán kính có cùng giá trị với độ lớn mà bạn có thể tính toán bằng cách gọi
>>> z = 3 + 2
>>> type(z)
52 trên số phức của bạn. Ngược lại, nếu bạn chỉ quan tâm đến việc lấy góc của một số phức, thì bạn có thể gọi >>> z = 3.14 + 2.71j
>>> type(z)
20:>>>
>>> z = 3.14
>>> type(z)
5Nó sẽ trả lại một tuple, trong đó phần tử thứ nhất là bán kính và phần tử thứ hai là góc trong radian. Lưu ý rằng bán kính có cùng giá trị với độ lớn mà bạn có thể tính toán bằng cách gọi
>>> z = 3 + 2
>>> type(z)
52 trên số phức của bạn. Ngược lại, nếu bạn chỉ quan tâm đến việc lấy góc của một số phức, thì bạn có thể gọi >>> z = 3.14 + 2.71j
>>> type(z)
20:Góc có thể thu được bằng cách sử dụng lượng giác cơ bản vì phần thực, phần tưởng tượng và độ lớn cùng nhau tạo thành một tam giác vuông:arcsine, either from
>>> z = 3 + 2
>>> type(z)
47 or >>> 2 + 3j + 4 + 5j
(6+8j)
0, but the latter will produce complex values with
the imaginary part equal to zero:>>>
>>> z = 3.14
>>> type(z)
6Nó sẽ trả lại một tuple, trong đó phần tử thứ nhất là bán kính và phần tử thứ hai là góc trong radian. Lưu ý rằng bán kính có cùng giá trị với độ lớn mà bạn có thể tính toán bằng cách gọi
>>> z = 3 + 2
>>> type(z)
52 trên số phức của bạn. Ngược lại, nếu bạn chỉ quan tâm đến việc lấy góc của một số phức, thì bạn có thể gọi >>> z = 3.14 + 2.71j
>>> type(z)
20:arctangent function, though, which led many programming languages to develop an alternative implementation called >>> z = 3.14 + 2.71j
>>> type(z)
23. Calculating the ratio between the imaginary and the real part can sometimes produce a
singularity due to, for instance, division by zero. Moreover, the individual signs of the two values are lost in the process, making it impossible to tell the angle with certainty:>>>
>>> z = 3.14
>>> type(z)
7Nó sẽ trả lại một tuple, trong đó phần tử thứ nhất là bán kính và phần tử thứ hai là góc trong radian. Lưu ý rằng bán kính có cùng giá trị với độ lớn mà bạn có thể tính toán bằng cách gọi
>>> z = 3 + 2
>>> type(z)
52 trên số phức của bạn. Ngược lại, nếu bạn chỉ quan tâm đến việc lấy góc của một số phức, thì bạn có thể gọi >>> z = 3.14 + 2.71j
>>> type(z)
20:Góc có thể thu được bằng cách sử dụng lượng giác cơ bản vì phần thực, phần tưởng tượng và độ lớn cùng nhau tạo thành một tam giác vuông:
>>>
>>> z = 3.14
>>> type(z)
8Nó sẽ trả lại một tuple, trong đó phần tử thứ nhất là bán kính và phần tử thứ hai là góc trong radian. Lưu ý rằng bán kính có cùng giá trị với độ lớn mà bạn có thể tính toán bằng cách gọi
>>> z = 3 + 2
>>> type(z)
52 trên số phức của bạn. Ngược lại, nếu bạn chỉ quan tâm đến việc lấy góc của một số phức, thì bạn có thể gọi >>> z = 3.14 + 2.71j
>>> type(z)
20:>>>
>>> z = 3.14
>>> type(z)
9Góc có thể thu được bằng cách sử dụng lượng giác cơ bản vì phần thực, phần tưởng tượng và độ lớn cùng nhau tạo thành một tam giác vuông:
>>>
>>> z = 3.14j
>>> type(z)
0Bạn có thể sử dụng các hàm lượng giác nghịch đảo, chẳng hạn như arcsine, từ
>>> z = 3 + 2
>>> type(z)
47 hoặc >>> 2 + 3j + 4 + 5j
(6+8j)
0, nhưng phần sau sẽ tạo ra các giá trị phức tạp với phần tưởng tượng bằng 0:>>>
>>> z = 3.14j
>>> type(z)
1Tuy nhiên, có một chi tiết nhỏ để cẩn thận khi sử dụng hàm Arctangent, điều này đã khiến nhiều ngôn ngữ lập trình phát triển một triển khai thay thế gọi là
>>> z = 3.14 + 2.71j
>>> type(z)
23. Tính tỷ lệ giữa phần tưởng tượng và phần thực đôi khi có thể tạo ra một điểm kỳ dị do, ví dụ, phân chia theo 0. Hơn nữa, các dấu hiệu riêng lẻ của hai giá trị bị mất trong quá trình, khiến cho không thể nói góc một cách chắc chắn:Lưu ý cách >>> z = 3.14 + 2.71j
>>> type(z)
24 không nhận ra hai điểm khác nhau nằm trong các góc phần tư đối diện của hệ tọa độ. Mặt khác, >>> z = 3.14 + 2.71j
>>> type(z)
23 mong đợi hai đối số thay vì một để bảo tồn các dấu hiệu riêng lẻ trước khi chia cho nhau và cũng tránh các vấn đề khác.
Để có được độ thay vì radian, bạn có thể thực hiện chuyển đổi cần thiết bằng cách sử dụng mô -đun
>>> z = 3 + 2
>>> type(z)
47:- Đảo ngược quá trình, đó là, chuyển đổi cực sang tọa độ hình chữ nhật trên các chức năng khác. Tuy nhiên, bạn có thể chỉ cần vượt qua cùng một tuple mà bạn có được từ
18 kể từ khi>>> z = 3.14 + 2.71j >>> type(z)
28 mong đợi hai đối số riêng biệt:>>> z = 3.14 + 2.71j >>> type(z)
- Đó là một ý tưởng tốt để giải nén bộ tuple trước tiên khi thực hiện một bài tập và đưa ra các yếu tố đó nhiều tên mô tả hơn. Bây giờ bạn có thể gọi
28 chính xác:>>> z = 3.14 + 2.71j >>> type(z)
- Bạn có thể gặp lỗi làm tròn trên đường đi trong khi Python thực hiện các tính toán. Đằng sau hậu trường, nó gọi các hàm lượng giác để truy xuất các phần thực và tưởng tượng:
- Một lần nữa, không quan trọng cho dù bạn sử dụng
47 hay>>> z = 3 + 2 >>> type(z)
0 trong trường hợp này vì kết quả sẽ giống hệt nhau.>>> 2 + 3j + 4 + 5j (6+8j)
Đại diện cho các số phức tạp khác nhau
Bất kể hệ tọa độ, bạn có thể diễn đạt cùng một số phức trong một vài hình thức tương đương về mặt toán học:
Đại số (Tiêu chuẩn)
Hình học | Lượng giác | số mũ |
---|---|---|
Danh sách này không đầy đủ vì có nhiều đại diện hơn, chẳng hạn như biểu diễn ma trận của các số phức. | Có sự lựa chọn cho phép bạn chọn một người thuận tiện nhất để giải quyết một vấn đề nhất định. Ví dụ, bạn sẽ cần hình thức theo cấp số nhân để tính toán biến đổi Fourier rời rạc trong một phần sắp tới. Sử dụng hình thức này cũng phù hợp để nhân và chia số phức. | Dưới đây, một danh sách nhanh chóng của các biểu mẫu số phức và tọa độ của chúng: |
Hình thức | Hình hộp chữ nhật | Cực |
Đại số | z = x + y 1 | - |
Hình học | z = (x, y) | z = (r, φ) |
Lượng giác
z = | z | (cos (x/| z |) + ________ 81Sin (y/| z |)))
>>>
>>> z = 3.14j
>>> type(z)
2z = r (cos (φ) + ________ 81sin (φ)))
số mũ
Phân tích một số phức trong Python
Bạn đã học được một loạt về các con số phức tạp Python và đã thấy các ví dụ sơ bộ. Tuy nhiên, trước khi di chuyển xa hơn, nó có giá trị để bao gồm một số chủ đề cuối cùng. Trong phần này, bạn sẽ xem xét so sánh các số phức tạp, định dạng các chuỗi có chứa chúng và hơn thế nữa.
Kiểm tra bình đẳng của các số phức tạp
Về mặt toán học, hai số phức là bằng nhau khi chúng có các giá trị giống hệt nhau bất kể hệ tọa độ được thông qua. Tuy nhiên, việc chuyển đổi giữa các tọa độ phân cực và hình chữ nhật thường đưa ra các lỗi làm tròn trong Python, vì vậy bạn cần coi chừng sự khác biệt nhỏ khi so sánh chúng.
Ví dụ, khi bạn xem xét một điểm trên một vòng tròn đơn vị có bán kính bằng một và được nghiêng ở 60 °, thì lượng giác hoạt động độc đáo, làm cho việc chuyển đổi bằng bút và giấy đơn giản:
>>>
>>> z = 3.14j
>>> type(z)
3Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
Mặc dù bạn biết rằng>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>> z = 3.14j
>>> type(z)
4Hãy nhớ luôn luôn sử dụng chúng khi so sánh các số phức tạp! Nếu dung sai mặc định không đủ tốt cho các tính toán của bạn, bạn có thể thay đổi nó bằng cách chỉ định các đối số bổ sung.
Đặt hàng số phức
>>>
>>> z = 3.14j
>>> type(z)
5Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
>>> z = 3.14j
>>> type(z)
6Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
>>> z = 3.14j
>>> type(z)
7Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:key function, such as >>> z = 3 + 2
>>> type(z)
52:>>>
>>> z = 3.14j
>>> type(z)
8Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>> z = 3.14j
>>> type(z)
4
Hãy nhớ luôn luôn sử dụng chúng khi so sánh các số phức tạp! Nếu dung sai mặc định không đủ tốt cho các tính toán của bạn, bạn có thể thay đổi nó bằng cách chỉ định các đối số bổ sung.
Đặt hàng số phức
>>>
>>> z = 3.14j
>>> type(z)
9Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
>>> z = 3.14 + 0j
>>> type(z)
0Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
>>> z = 3.14 + 0j
>>> type(z)
1Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:positional or keyword arguments
to it:>>>
>>> z = 3.14 + 0j
>>> type(z)
2Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>>
>>> z = 3.14 + 0j
>>> type(z)
3Mặc dù bạn biết rằng
>>> z = 3.14 + 2.71j
>>> type(z)
42 và >>> z = 3.14 + 2.71j
>>> type(z)
43 là cùng một điểm, Python có thể xác định rằng vì các lỗi làm tròn. May mắn thay, tài liệu PEP 485 được xác định các chức năng cho sự bình đẳng gần đúng, có sẵn trong các mô -đun >>> z = 3 + 2
>>> type(z)
47 và >>> 2 + 3j + 4 + 5j
(6+8j)
0:>>> z = 3.14j
>>> type(z)
4
Hãy nhớ luôn luôn sử dụng chúng khi so sánh các số phức tạp! Nếu dung sai mặc định không đủ tốt cho các tính toán của bạn, bạn có thể thay đổi nó bằng cách chỉ định các đối số bổ sung.bound vectors. You might calculate their dot product and do some trigonometry. Alternatively, you can take advantage of complex numbers.
Đặt hàng số phức
>>> z = 3.14 + 0j
>>> type(z)
4Nếu bạn quen thuộc với Tuples, thì bạn sẽ biết rằng Python có thể sắp xếp chúng:
Theo mặc định, các bộ dữ liệu riêng lẻ được so sánh bên trái:
>>> z = 3.14 + 0j
>>> type(z)
5Trong trường hợp đầu tiên, số
>>> z = 3.14 + 2.71j
>>> type(z)
46 lớn hơn >>> z = 3.14 + 2.71j
>>> type(z)
47, do đó, các tên hành tinh không được xem xét. Họ có thể giúp giải quyết một cà vạt, mặc dù. Tuy nhiên, đó không phải là trường hợp với các số phức tạp vì họ không xác định mối quan hệ đặt hàng tự nhiên. Ví dụ: bạn sẽ gặp lỗi nếu bạn cố gắng so sánh hai số phức tạp:delegation when you call the global >>> z = 3 + 2
>>> type(z)
00 on a vector instance:>>>
>>> z = 3.14 + 0j
>>> type(z)
6Trong một số trường hợp, bạn không phải thực hiện loại loại này tự đúc. Hãy cùng xem một ví dụ trong thực tế:
>>>
>>> z = 3.14 + 0j
>>> type(z)
7Bạn đã có hai vectơ được xác định bởi bốn điểm riêng biệt. Tiếp theo, bạn chuyển chúng trực tiếp đến
>>> z = 3.14 + 2.71j
>>> type(z)
20, việc chuyển đổi thành một số phức cho bạn và trả về pha. Sự khác biệt pha là góc giữa hai vectơ.Có phải là người đẹp không? Bạn đã tự cứu mình khỏi việc gõ rất nhiều mã dễ bị lỗi bằng cách cõng những con số phức tạp và một chút ma thuật Python.
Tính toán biến đổi Fourier rời rạc với các số phức
Mặc dù bạn có thể sử dụng các số thực để tính toán các hệ số sin và cosine của một hàm định kỳ tần số với biến đổi Fourier, nhưng nó thường thuận tiện hơn để đối phó với chỉ một hệ số phức tạp trên mỗi tần số. Biến đổi Fourier rời rạc trong miền phức tạp được đưa ra bởi công thức sau:discrete Fourier transform in the complex domain is given by the following formula:
Đối với mỗi Tần số Bin K, nó đo được mối tương quan của tín hiệu và một sóng hình sin cụ thể được biểu thị bằng một số phức ở dạng hàm mũ. .frequency bin k, it measures the correlation of the signal and a particular sine wave expressed as a complex number in the exponential form. (Thank you, Leonhard Euler!) The angular frequency of the wave can be calculated by multiplying the round angle, which is 2π radians, by k over the number of discrete samples:
Mã hóa điều này trong Python trông khá gọn gàng khi bạn tận dụng kiểu dữ liệu
>>> z = 3 + 2
>>> type(z)
03:>>> z = 3.14 + 0j
>>> type(z)
8Hàm này là một phiên mã theo nghĩa đen của các công thức ở trên. Bây giờ bạn có thể chạy phân tích tần số trên âm thanh mà bạn tải từ tệp âm thanh bằng mô -đun Python, ____ ____262 hoặc bạn tổng hợp từ đầu. Một trong những máy tính xách tay Jupyter đi kèm với hướng dẫn này cho phép bạn chơi với tổng hợp và phân tích âm thanh một cách tương tác.
Để vẽ phổ tần số với matplotlib, bạn phải biết tần số lấy mẫu, xác định độ phân giải thùng tần số cũng như giới hạn Nyquist:frequency spectrum with Matplotlib, you must know the sampling frequency, which determines your frequency bin resolution as well as the Nyquist limit:
>>> z = 3.14 + 0j
>>> type(z)
9Số lượng thùng tần số trong phổ bằng một nửa các mẫu, trong khi tần số Nyquist giới hạn tần số cao nhất bạn có thể đo. Biến đổi trả về một số phức có cường độ tương ứng với biên độ của sóng hình sin ở tần số đã cho, trong khi góc của nó là pha.amplitude of a sine wave at the given frequency, whereas its angle is the phase.
Ở đây, một biểu đồ tần số mẫu của sóng âm bao gồm ba âm 440 Hz, 1,5 kHz và 5 kHz, có biên độ bằng nhau:
Biểu đồ phổ tần sốLưu ý đây là một ví dụ hoàn toàn học thuật vì tính toán biến đổi Fourier rời rạc với các lần lặp lồng nhau có độ phức tạp thời gian O (N2), khiến nó không thể sử dụng được trong thực tế. Đối với các ứng dụng thực tế, bạn muốn sử dụng thuật toán Fast Fourier Transform (FFT) được triển khai tốt nhất trong thư viện C, chẳng hạn như FFT trong SCIPY.fast Fourier transform (FFT) algorithm best implemented in a C library, such as the FFT in SciPy.
Sự kết luận
Sự dễ dàng của việc sử dụng các số phức tạp trong Python làm cho chúng trở thành một công cụ thực tế và thú vị đáng ngạc nhiên. Bạn đã thấy các vectơ hai chiều được triển khai thực tế miễn phí và bạn đã có thể phân tích tần số âm thanh nhờ chúng. Các số phức cho phép bạn thể hiện một cách tao nhã các công thức toán học trong mã mà không có nhiều cú pháp tự nhiên cản trở.vectors implemented practically for free, and you were able to analyze sound frequencies thanks to them. Complex numbers let you elegantly express mathematical formulas in code without much boilerplate syntax standing in the way.
Trong hướng dẫn này, bạn đã học được cách:
- Xác định các số phức tạp với nghĩa đen trong Pythonliterals in Python
- Biểu thị các số phức trong tọa độ hình chữ nhật và cựcrectangular and polar coordinates
- Sử dụng các số phức tạp trong các biểu thức số họcarithmetic expressions
- Tận dụng mô-đun
0 tích hợp>>> 2 + 3j + 4 + 5j (6+8j)
0 module>>> 2 + 3j + 4 + 5j (6+8j)
- Dịch các công thức toán học trực tiếp sang mã Pythonmathematical formulas directly to Python code
Kinh nghiệm của bạn là gì với những con số phức tạp Python cho đến nay? Bạn đã bao giờ bị họ đe dọa? Những vấn đề thú vị khác mà bạn nghĩ rằng họ sẽ cho phép bạn giải quyết?
Bạn có thể nhấp vào liên kết bên dưới để lấy mã nguồn đầy đủ cho hướng dẫn này: