Hướng dẫn complex to real python - trăn phức tạp đến thật

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:

  • 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
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    0 tích hợp
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    0 module
  • Dịch các công thức toán học trực tiếp sang mã Pythonmathematical formulas directly to Python code

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 Python

Tạ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 đen

Cá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:

>>>

>>> type(z)
<class 'complex'>

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ữ

>>> 2 + 3j + 4 + 5j
(6+8j)
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 đó:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>

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ữ

>>> 2 + 3j + 4 + 5j
(6+8j)
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 đó:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>

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ữ

>>> 2 + 3j + 4 + 5j
(6+8j)
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
>>> 2 + 3j + 4 + 5j
(6+8j)
1 or uppercase
>>> 2 + 3j + 4 + 5j
(6+8j)
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

>>> 2 + 3j + 4 + 5j
(6+8j)
1 hoặc chữ hoa
>>> 2 + 3j + 4 + 5j
(6+8j)
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:

  • Nếu bạn đã tìm hiểu về các số phức tạp trong lớp toán học, bạn có thể đã thấy chúng được thể hiện bằng cách sử dụng
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    4 thay vì
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    1. Nếu bạn tò mò về lý do tại sao Python sử dụng
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    1 thay vì
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    4, thì bạn có thể mở rộng phần thu gọn bên dưới để tìm hiểu thêm.
  • Ký hiệu truyền thống cho các số phức tạp sử dụng chữ cái
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    4 thay vì
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    1 vì nó là viết tắt của đơn vị tưởng tượng. Bạn có thể cảm thấy một sự khó chịu nhỏ với quy ước Python, nếu bạn có một nền tảng toán học. Tuy nhiên, có một vài lý do có thể biện minh cho sự lựa chọn gây tranh cãi của Python:
  • Đó là một quy ước đã được các kỹ sư thông qua để tránh các vụ va chạm tên với dòng điện, được biểu thị bằng chữ
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    4.

Trong tính toán, chữ

>>> 2 + 3j + 4 + 5j
(6+8j)
4 thường được sử dụng cho biến lập chỉ mục trong các vòng lặp.

Chữ

>>> 2 + 3j + 4 + 5j
(6+8j)
4 có thể dễ dàng bị nhầm lẫn với
>>> 3 + 0j
(3+0j)
>>> 0 + 3j
3j
3 hoặc
>>> 3 + 0j
(3+0j)
>>> 0 + 3j
3j
4 trong mã nguồn.

Đ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)

>>>

>>> 3 + 2j == 2j + 3
True

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:

>>>

>>> 3 - 2j == 3 + (-2j)
True

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

>>> 2 + 3j + 4 + 5j
(6+8j)
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:

>>>

>>> z = 3.14
>>> type(z)
<class 'float'>

Mặt khác, việc thêm chữ cái

>>> 2 + 3j + 4 + 5j
(6+8j)
1 vào một chữ số sẽ ngay lập tức biến nó thành một số phức:

>>>

>>> z = 3.14j
>>> type(z)
<class 'complex'>

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:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>

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:

>>>

>>> 2 + 3j + 4 + 5j
(6+8j)

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

>>> 3 + 0j
(3+0j)
>>> 0 + 3j
3j
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

>>> 2 + 3j + 4 + 5j
(6+8j)
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:

>>>

>>> 3 + 0j
(3+0j)
>>> 0 + 3j
3j

Đ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) <class 'int'> 00 Chức năng nhà máy

Python có chức năng tích hợp,

>>> z = 3 + 2

>>> type(z)
<class 'int'>
00, mà bạn có thể sử dụng thay thế cho số lượng phức tạp theo nghĩa đen:

Trong hình thức này, nó giống như một tuple hoặc một cặp số thông thường được đặt hàng. Sự tương tự là rất xa. Các số phức tạp có một cách giải thích hình học trong hệ tọa độ Cartesian mà bạn sẽ khám phá một chút. Bạn có thể nghĩ về những con số phức tạp là hai chiều.Cartesian coordinate system that you’ll explore in a bit. You can think of complex numbers as two-dimensional.

Hàm nhà máy số phức tạp chấp nhận hai tham số số. Phần đầu tiên đại diện cho phần thực, trong khi phần thứ hai đại diện cho phần tưởng tượng được biểu thị bằng chữ cái

>>> 2 + 3j + 4 + 5j
(6+8j)
1 trong chữ cái mà bạn đã thấy trước đó:real part, while the second one represents the imaginary part denoted with the letter
>>> 2 + 3j + 4 + 5j
(6+8j)
1 in the literal you saw earlier:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
0

Cả hai tham số đều là tùy chọn, với các giá trị mặc định bằng 0, điều này làm cho việc xác định các số phức hơn mà không có phần tưởng tượng hoặc cả phần thực và phần tưởng tượng:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
1

Phiên bản đơn lẻ có thể hữu ích trong việc đúc loại. Ví dụ: bạn có thể vượt qua một giá trị không phải là một chuỗi theo nghĩa đen để có được một đối tượng

>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 tương ứng. Lưu ý rằng chuỗi có thể chứa bất kỳ khoảng trắng nào, mặc dù:type casting. For example, you can pass a nonnumeric value like a string literal to obtain a corresponding
>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 object. Note that the string can’t contain any whitespace, though:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
2

Sau đó, bạn sẽ tìm ra cách làm cho các lớp học của bạn tương thích với cơ chế đúc loại này. Thật thú vị, khi bạn chuyển một số phức lên

>>> z = 3 + 2

>>> type(z)
<class 'int'>
00, bạn sẽ nhận lại được thể hiện tương tự:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
3

Điều đó phù hợp với cách các loại số khác trong Python hoạt động bởi vì tất cả chúng đều bất biến. Để tạo một bản sao riêng biệt của một số phức, bạn phải gọi lại chức năng với cả hai đối số hoặc khai báo một biến khác với số phức theo nghĩa đen:immutable. To make a distinct copy of a complex number, you must call the function with both arguments again or declare another variable with the complex number literal:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
4

Khi bạn cung cấp hai đối số cho hàm, chúng phải luôn là số, chẳng hạn như

>>> z = 3 + 2

>>> type(z)
<class 'int'>
05,
>>> z = 3 + 2

>>> type(z)
<class 'int'>
06 hoặc
>>> z = 3 + 2

>>> type(z)
<class 'int'>
03. Nếu không, bạn sẽ nhận được một lỗi thời gian chạy. Về mặt kỹ thuật,
>>> z = 3 + 2

>>> type(z)
<class 'int'>
08 là một lớp con của
>>> z = 3 + 2

>>> type(z)
<class 'int'>
05, vì vậy nó cũng hoạt động:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
5

Mọi thứ dường như kỳ lạ hơn khi bạn cung cấp chức năng nhà máy

>>> z = 3 + 2

>>> type(z)
<class 'int'>
00 với các số phức tạp như đối số. Tuy nhiên, nếu bạn chỉ cung cấp đối số đầu tiên, nó sẽ hoạt động như một proxy như trước:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
6

Tuy nhiên, khi có hai đối số có mặt và ít nhất một trong số chúng là một số phức, bạn sẽ nhận được kết quả có thể khó giải thích từ cái nhìn đầu tiên:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
7

Để có được câu trả lời, hãy để Lừa xem qua chức năng của nhà máy, tài liệu trực tuyến hoặc tài liệu trực tuyến, điều này giải thích những gì diễn ra dưới mui xe khi bạn gọi

>>> z = 3 + 2

>>> type(z)
<class 'int'>
11:

Trả về một số phức với giá trị real + hình ảnh*1j hoặc chuyển đổi một chuỗi hoặc số thành một số phức. (Nguồn)

Trong giải thích này,

>>> z = 3 + 2

>>> type(z)
<class 'int'>
12 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
13 là tên của các đối số chức năng. Đối số thứ hai được nhân với đơn vị tưởng tượng
>>> 2 + 3j + 4 + 5j
(6+8j)
1 và kết quả được thêm vào đối số đầu tiên. Don Tiết lo lắng nếu nó vẫn không có ý nghĩa gì. Bạn có thể quay lại phần này khi bạn đọc về số học phức tạp. Các quy tắc mà bạn sẽ tìm hiểu về sẽ làm cho điều này đơn giản.

Khi nào bạn muốn sử dụng chức năng nhà máy

>>> z = 3 + 2

>>> type(z)
<class 'int'>
00 qua nghĩa đen? Nó phụ thuộc, nhưng việc gọi hàm có thể thuận tiện hơn khi bạn xử lý dữ liệu được tạo động, chẳng hạn.

Làm quen với các số phức tạp Python

Trong toán học, các số phức là một siêu số thực, điều đó có nghĩa là mỗi số thực cũng là một số phức tạp có phần tưởng tượng bằng không. Các mô hình Python mối quan hệ này thông qua một khái niệm gọi là tháp số, được mô tả trong PEP 3141:numeric tower, described in PEP 3141:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
8

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:abstract classes that can be used for type checking and classifying numbers. For example, to determine if a value belongs to a specific set of numbers, you can call
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 on it:

>>>

>>> z = 3 + 2

>>> type(z)
<class 'int'>
9

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
0

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

Hướng dẫn complex to real python - trăn phức tạp đến thật
Giá trị điểm nổi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
18 là một số thực cũng là một số phức nhưng không phải là một tích phân. Lưu ý rằng bạn có thể sử dụng các loại tích hợp trực tiếp trong một thử nghiệm như vậy:

Sự khác biệt giữa

>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 là chúng thuộc về các nhánh riêng biệt trong cây phân cấp loại và sau là một lớp cơ sở trừu tượng mà không có bất kỳ việc thực hiện nào:

Nhập phân cấp cho các số trong Python

Các lớp cơ sở trừu tượng, được biểu thị bằng màu đỏ trên sơ đồ trên, có thể bỏ qua cơ chế kiểm tra kế thừa thông thường bằng cách đăng ký các lớp không liên quan làm các lớp con ảo của chúng. Đó là lý do tại sao một giá trị điểm nổi trong ví dụ dường như là một ví dụ là

>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 nhưng không phải
>>> z = 3 + 2

>>> type(z)
<class 'int'>
03.

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
1

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:read-only because complex numbers are immutable, so trying to assign a new value to either of them will fail:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
2

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
3

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

Giá trị điểm nổi >>> z = 3 + 2 >>> type(z) <class 'int'> 18 là một số thực cũng là một số phức nhưng không phải là một tích phân. Lưu ý rằng bạn có thể sử dụng các loại tích hợp trực tiếp trong một thử nghiệm như vậy:

Sự khác biệt giữa

>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 là chúng thuộc về các nhánh riêng biệt trong cây phân cấp loại và sau là một lớp cơ sở trừu tượng mà không có bất kỳ việc thực hiện nào:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
4

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
5

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
6

Mô-đun

>>> z = 3 + 2

>>> type(z)
<class 'int'>
16 tích hợp xác định một hệ thống phân cấp của các loại số thông qua các lớp trừu tượng có thể được sử dụng để kiểm tra loại và phân loại số. Ví dụ: để xác định xem một giá trị có thuộc về một tập hợp số cụ thể hay không, bạn có thể gọi
>>> z = 3 + 2

>>> type(z)
<class 'int'>
17 trên đó:

Giá trị điểm nổi >>> z = 3 + 2 >>> type(z) <class 'int'> 18 là một số thực cũng là một số phức nhưng không phải là một tích phân. Lưu ý rằng bạn có thể sử dụng các loại tích hợp trực tiếp trong một thử nghiệm như vậy:

Sự khác biệt giữa

>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 là chúng thuộc về các nhánh riêng biệt trong cây phân cấp loại và sau là một lớp cơ sở trừu tượng mà không có bất kỳ việc thực hiện nào:arithmetic expressions and call many of the built-in functions on them. More advanced functions for complex numbers are defined in the
>>> 2 + 3j + 4 + 5j
(6+8j)
0 module, which is part of the standard library. You’ll get an introduction to it in a later part of this tutorial.

Nhập phân cấp cho các số trong Pythonimaginary unit, which satisfies the following equation:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Các lớp cơ sở trừu tượng, được biểu thị bằng màu đỏ trên sơ đồ trên, có thể bỏ qua cơ chế kiểm tra kế thừa thông thường bằng cách đăng ký các lớp không liên quan làm các lớp con ảo của chúng. Đó là lý do tại sao một giá trị điểm nổi trong ví dụ dường như là một ví dụ là

>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 nhưng không phải
>>> z = 3 + 2

>>> type(z)
<class 'int'>
03.

Truy cập các phần thực và tưởng tượng

Để có được các phần thực và tưởng tượng của một số phức trong Python, bạn có thể đạt được các thuộc tính

>>> z = 3 + 2

>>> type(z)
<class 'int'>
23 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
24 tương ứng:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
7

Cả hai thuộc tính đều chỉ đọc được vì các số phức là bất biến, vì vậy cố gắng gán một giá trị mới cho một trong số chúng sẽ thất bại:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Vì mỗi số trong Python là một loại cụ thể hơn của một số phức, các thuộc tính và phương thức được xác định trong

>>> z = 3 + 2

>>> type(z)
<class 'int'>
20 cũng có sẵn trong tất cả các loại số, bao gồm
>>> z = 3 + 2

>>> type(z)
<class 'int'>
05 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
06:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
8

Phần tưởng tượng của những con số như vậy luôn luôn bằng không.

Tính toán liên hợp của một số phức

Các con số phức tạp Python chỉ có ba thành viên công cộng. Ngoài các thuộc tính

>>> z = 3 + 2

>>> type(z)
<class 'int'>
23 và
>>> z = 3 + 2

>>> type(z)
<class 'int'>
24, chúng phơi bày phương pháp
>>> z = 3 + 2

>>> type(z)
<class 'int'>
30, lật dấu hiệu của phần tưởng tượng:

>>>

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
9

Đối với các số có phần tưởng tượng bằng 0, nó đã giành được bất kỳ hiệu ứng nào:

>>>

>>> 3 + 2j == 2j + 3
True
0

Bạn cũng có thể sử dụng toán tử Minus Min (-) để tạo âm của một số phức:unary minus operator (-) to make the negative of a complex number:

>>>

>>> 3 + 2j == 2j + 3
True
1

Điều này đảo ngược cả phần thực và phần tưởng tượng của số phức.

Phép nhân

Sản phẩm của hai hoặc nhiều số phức tạp trở nên thú vị hơn:

>>>

>>> 3 + 2j == 2j + 3
True
2

Làm thế nào trên trái đất bạn kết thúc với một số âm chỉ trong số các số tích cực? Để trả lời câu hỏi này, bạn phải nhớ lại định nghĩa của đơn vị tưởng tượng và viết lại biểu thức theo các phần thực và tưởng tượng:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Quan sát chính để thực hiện là

>>> 2 + 3j + 4 + 5j
(6+8j)
1 lần
>>> 2 + 3j + 4 + 5j
(6+8j)
1 cung cấp
>>> 2 + 3j + 4 + 5j
(6+8j)
1
>>> z = 3 + 2

>>> type(z)
<class 'int'>
35, có thể được thay thế bằng
>>> z = 3 + 2

>>> type(z)
<class 'int'>
36. Điều này đảo ngược dấu hiệu của một trong các bản tóm tắt, trong khi phần còn lại của các quy tắc vẫn giống hệt như trước đây.

Phân công

Chia các số phức tạp có thể trông đáng sợ ở cuộc gặp gỡ đầu tiên:

>>>

>>> 3 + 2j == 2j + 3
True
3

Dù bạn có tin hay không, bạn có thể nhận được kết quả tương tự bằng cách sử dụng không có gì ngoài bút và giấy! .

Hướng dẫn complex to real python - trăn phức tạp đến thật

Mẫu số trở thành một mô đun bình phương của ước số. Bạn sẽ tìm hiểu thêm về mô đun của các số phức tạp sau này. Khi bạn tiếp tục lấy công thức, đây là những gì bạn sẽ nhận được:modulus of the divisor. You’ll learn more about the modulus of complex numbers later. When you continue deriving the formula, this is what you’ll get:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Lưu ý rằng các số phức tạp không hỗ trợ phân chia sàn, còn được gọi là phân chia số nguyên:

>>>

>>> 3 + 2j == 2j + 3
True
4

Điều này được sử dụng để làm việc trong Python 2.x nhưng sau đó đã được gỡ bỏ để tránh sự mơ hồ.

Số mũ

Bạn có thể nâng các số phức lên một nguồn sử dụng toán tử số liệu nhị phân (

>>> z = 3 + 2

>>> type(z)
<class 'int'>
45) hoặc
>>> z = 3 + 2

>>> type(z)
<class 'int'>
46 tích hợp nhưng không phải là định nghĩa trong mô-đun
>>> z = 3 + 2

>>> type(z)
<class 'int'>
47, chỉ hỗ trợ các giá trị dấu phẩy động:exponentiation operator (
>>> z = 3 + 2

>>> type(z)
<class 'int'>
45)
or the built-in
>>> z = 3 + 2

>>> type(z)
<class 'int'>
46 but not the one defined in the
>>> z = 3 + 2

>>> type(z)
<class 'int'>
47 module, which only supports floating-point values:

>>>

>>> 3 + 2j == 2j + 3
True
5

Cả cơ sở và số mũ có thể thuộc bất kỳ loại số nào, bao gồm số nguyên, điểm nổi, tưởng tượng hoặc phức tạp:base and the exponent can be of any numeric types, including integer, floating-point, imaginary, or complex:

>>>

>>> 3 + 2j == 2j + 3
True
6

Số lượng nhân thủ công của các số phức tạp trở nên rất khó khăn khi chúng được thể hiện ở dạng tiêu chuẩn. Nó thuận tiện hơn nhiều để viết lại số ở dạng lượng giác và tính năng lượng bằng cách sử dụng một số lượng giác cơ bản. Nếu bạn quan tâm đến toán học liên quan, hãy xem công thức De Moivre, cho phép bạn làm điều đó.trigonometric form and calculate the power using some basic trigonometry. If you’re interested in the math involved, check out De Moivre’s formula, which lets you do that.

Sử dụng các số phức python làm vectơ 2D

Bạn có thể hình dung các số phức tạp dưới dạng điểm hoặc vectơ trên mặt phẳng Euclide trong hệ tọa độ Cartesian hoặc hình chữ nhật:points or vectors on a Euclidean plane in the Cartesian or rectangular coordinate system:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Trục X trên mặt phẳng phức, còn được gọi là mặt phẳng Gauss hoặc sơ đồ Argand, đại diện cho phần thực của một số phức, trong khi trục y đại diện cho phần tưởng tượng của nó.Gauss plane or Argand diagram, represents the real part of a complex number, while the Y-axis represents its imaginary part.

Thực tế này dẫn đến một trong những tính năng thú vị nhất của loại dữ liệu ____103 trong Python, thể hiện sự triển khai thô sơ của một vectơ hai chiều miễn phí. Mặc dù không phải tất cả các hoạt động đều hoạt động theo cùng một cách trong cả hai, các vectơ và số phức đều có chung nhiều điểm tương đồng.

Nhận tọa độ

Tam giác Bermuda là một khu vực huyền thoại được biết đến với các hiện tượng huyền bí trải dài trên khắp mũi phía nam của Florida, Puerto Rico và hòn đảo nhỏ của Bermuda. Các đỉnh của nó được chỉ định xấp xỉ bởi ba thành phố lớn có tọa độ địa lý như sau:

  1. Miami: 25 ° 45, 42.054 N N, 80 ° 11, 30.438 25° 45’ 42.054” N, 80° 11’ 30.438” W
  2. San Juan: 18 ° 27, 58,8 N, 66 ° 6, 20.598 18° 27’ 58.8” N, 66° 6’ 20.598” W
  3. Hamilton: 32 ° 17, 41,64 N N, 64 ° 46, 58.908 32° 17’ 41.64” N, 64° 46’ 58.908” W

Sau khi chuyển đổi các tọa độ này thành các độ thập phân, bạn sẽ kết thúc với hai số điểm nổi cho mỗi thành phố. Bạn có thể sử dụng kiểu dữ liệu

>>> z = 3 + 2

>>> type(z)
<class 'int'>
03 để lưu trữ các cặp số đã đặt hàng. Vì vĩ độ là tọa độ dọc và kinh độ là chiều ngang, nên có thể thuận tiện hơn khi chuyển chúng xung quanh để tuân theo thứ tự truyền thống của tọa độ Cartesian:latitude is the vertical coordinate and the longitude is the horizontal one, it might be more convenient to switch them around to follow the traditional order of the Cartesian coordinates:

>>> 3 + 2j == 2j + 3
True
7

Các giá trị kinh độ âm đại diện cho bán cầu tây, trong khi các giá trị vĩ độ dương đại diện cho bán cầu bắc.

Hãy nhớ rằng đây là những tọa độ hình cầu. Để chiếu chính xác chúng lên một mặt phẳng phẳng, bạn cần phải tính đến độ cong của Trái đất. Một trong những phép chiếu bản đồ đầu tiên được sử dụng trong bản đồ là phép chiếu Mercator, giúp các thủy thủ điều hướng tàu của họ. Nhưng hãy để Lừa bỏ qua tất cả những điều đó và cho rằng các giá trị đã được thể hiện trong hệ tọa độ hình chữ nhật.spherical coordinates. To correctly project them onto a flat plane, you’d need to account for the curvature of Earth. One of the first map projections used in cartography was the Mercator projection, which helped sailors navigate their ships. But let’s ignore all that and assume that values are already expressed in the rectangular coordinate system.

Khi bạn vẽ các số trên một mặt phẳng phức tạp, bạn sẽ nhận được một mô tả sơ bộ về tam giác Bermuda:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Trong các tài liệu đồng hành, bạn sẽ tìm thấy một cuốn sổ tay Jupyter tương tác vẽ hình tam giác Bermuda bằng thư viện Matplotlib. Để tải xuống mã nguồn và tài liệu cho hướng dẫn này, nhấp vào liên kết bên dưới:

Nếu bạn không thích gọi chức năng nhà máy

>>> z = 3 + 2

>>> type(z)
<class 'int'>
00, bạn có thể tạo một bí danh loại có tên phù hợp hơn hoặc sử dụng dạng theo nghĩa đen của một số phức để lưu một vài tổ hợp phím:

>>> 3 + 2j == 2j + 3
True
8

Nếu bạn cần đóng gói nhiều thuộc tính hơn trên một thành phố, bạn có thể sử dụng một tuple có tên hoặc một lớp dữ liệu hoặc tạo một lớp tùy chỉnh.

Tính độ lớn

Độ lớn, còn được gọi là mô đun hoặc bán kính của một số phức, là chiều dài của vectơ mô tả nó trên một mặt phẳng phức tạp:magnitude, also known as the modulus or radius of a complex number, is the length of the vector that depicts it on a complex plane:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Bạn có thể tính toán nó từ Định lý Pythagore bằng cách lấy căn bậc hai của tổng của phần thực bình phương và phần tưởng tượng bình phương:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Bạn sẽ nghĩ rằng Python sẽ cho phép bạn tính toán độ dài của một vectơ như vậy với

>>> z = 3 + 2

>>> type(z)
<class 'int'>
51 tích hợp, nhưng đó không phải là trường hợp. Để có được độ lớn của một số phức, bạn phải gọi một hàm toàn cầu khác có tên
>>> z = 3 + 2

>>> type(z)
<class 'int'>
52, thường được sử dụng để tính giá trị tuyệt đối của một số:

>>>

>>> 3 + 2j == 2j + 3
True
9

Hàm này loại bỏ dấu hiệu từ các số nguyên mà bạn chuyển vào, nhưng đối với các số phức, nó trả về độ lớn hoặc chiều dài vectơ:

>>>

>>> 3 - 2j == 3 + (-2j)
True
0

Hàm này loại bỏ dấu hiệu từ các số nguyên mà bạn chuyển vào, nhưng đối với các số phức, nó trả về độ lớn hoặc chiều dài vectơ:

Bạn có thể nhớ từ một phần trước đó rằng một số phức được nhân với liên hợp của nó tạo ra bình phương cường độ của nó.

Tìm khoảng cách giữa hai điểmgeometric center and the distances to it from the three cities that form its boundaries. First, you need to sum all coordinates and divide the result by their count to take the average:

>>> 3 - 2j == 3 + (-2j)
True
1

Hãy cùng tìm thấy trung tâm hình học của Tam giác Bermuda và khoảng cách với nó từ ba thành phố tạo thành ranh giới của nó. Đầu tiên, bạn cần tổng hợp tất cả các tọa độ và chia kết quả cho số lượng của họ để lấy trung bình:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Điều này sẽ cung cấp cho bạn một điểm nằm ở Đại Tây Dương, ở đâu đó trong Tam giác:

>>> 3 - 2j == 3 + (-2j)
True
2

Bây giờ bạn có thể tạo các vectơ neo ở các thành phố và hướng về trung tâm hình học của tam giác. Các vectơ được tạo bằng cách trừ nguồn từ điểm đích:

>>>

>>> 3 - 2j == 3 + (-2j)
True
3

Hàm này loại bỏ dấu hiệu từ các số nguyên mà bạn chuyển vào, nhưng đối với các số phức, nó trả về độ lớn hoặc chiều dài vectơ:

Bạn có thể nhớ từ một phần trước đó rằng một số phức được nhân với liên hợp của nó tạo ra bình phương cường độ của nó.

Tìm khoảng cách giữa hai điểmtranslated by the length of the vector indicated by the geometric center but in the opposite direction:

>>> 3 - 2j == 3 + (-2j)
True
4

Hãy cùng tìm thấy trung tâm hình học của Tam giác Bermuda và khoảng cách với nó từ ba thành phố tạo thành ranh giới của nó. Đầu tiên, bạn cần tổng hợp tất cả các tọa độ và chia kết quả cho số lượng của họ để lấy trung bình:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Điều này sẽ cung cấp cho bạn một điểm nằm ở Đại Tây Dương, ở đâu đó trong Tam giác:flip it horizontally, you’ll have to use the negative of the real part, which corresponds to the horizontal direction. To flip it vertically, you’ll take the negative of the imaginary part:

>>> 3 - 2j == 3 + (-2j)
True
5

Bây giờ bạn có thể tạo các vectơ neo ở các thành phố và hướng về trung tâm hình học của tam giác. Các vectơ được tạo bằng cách trừ nguồn từ điểm đích:

>>> 3 - 2j == 3 + (-2j)
True
6

Vì bạn trừ các số phức, mỗi vectơ cũng là một số phức tạp được tạo thành từ hai phần. Để có được khoảng cách của bạn, hãy tính độ lớn của từng vectơ:

>>> 3 - 2j == 3 + (-2j)
True
7

Những chiều dài vector này không phản ánh khoảng cách có ý nghĩa nhưng là xấp xỉ tốt cho một ví dụ đồ chơi như thế này. Để thể hiện kết quả chính xác trong các đơn vị hữu hình, bạn phải chuyển đổi tọa độ từ hình cầu sang hình chữ nhật trước hoặc tính khoảng cách bằng phương pháp vòng tròn lớn thay thế.

Hướng dẫn complex to real python - trăn phức tạp đến thật

Dịch, lật, mở rộng và xoay is similar to translating, but instead of adding an offset, you’re going to multiply each vertex by a constant factor, which must be a real number:

>>> 3 - 2j == 3 + (-2j)
True
8

Có thể làm phiền bạn rằng tam giác xuất hiện trong phần tư thứ hai của hệ tọa độ Cartesian. Hãy để di chuyển nó để trung tâm hình học của nó phù hợp với nguồn gốc. Tất cả ba đỉnh sẽ được dịch theo chiều dài của vectơ được biểu thị bởi trung tâm hình học nhưng theo hướng ngược lại:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Lưu ý rằng bạn có thể thêm hai số phức tạp lại với nhau, thực hiện bổ sung yếu tố của chúng. Đây là một phép biến đổi affine vì nó không thay đổi hình dạng của tam giác hoặc vị trí tương đối của các đỉnh của nó:rotating it around the coordinate system’s origin. That’s vastly different from how you’d typically multiply vectors by each other. For example, a dot product of two vectors will result in a scalar, while their cross product returns a new vector in three-dimensional space, which is perpendicular to the surface they define.

Một phản xạ gương của tam giác xung quanh trục thực hoặc tưởng tượng đòi hỏi phải đảo ngược thành phần tương ứng trong các đỉnh của nó. Ví dụ, để lật nó theo chiều ngang, bạn sẽ phải sử dụng âm của phần thực, tương ứng với hướng ngang. Để lật nó theo chiều dọc, bạn sẽ lấy phần tiêu cực của phần tưởng tượng:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Làm thế nào để bạn tìm thấy một số phức tạp cụ thể sẽ xoay một số phức khác theo bất kỳ góc mong muốn nào khi cả hai được nhân? Đầu tiên, hãy xem bảng sau, tóm tắt các vòng quay liên tiếp bằng 90 °:

Xoay vòng 90 °Tổng gócCông thứcSố mũGiá trị
0 0 °z
>>> 2 + 3j + 4 + 5j
(6+8j)
10
1
1 90 °Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1
>>> 2 + 3j + 4 + 5j
(6+8j)
11
>>> 2 + 3j + 4 + 5j
(6+8j)
1
2 180 °Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1
>>> 2 + 3j + 4 + 5j
(6+8j)
12
-1
3 270 °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)
13
-________ 81
4 360 °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)
14
1
5 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
>>> 2 + 3j + 4 + 5j
(6+8j)
1
6 180 °Z ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1 ×
>>> 2 + 3j + 4 + 5j
(6+8j)
1
>>> 2 + 3j + 4 + 5j
(6+8j)
12
-1
7 270 °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)
13
-________ 81
8 360 °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)
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

Hướng dẫn complex to real python - trăn phức tạp đến thật

>>> 2 + 3j + 4 + 5j
(6+8j)
15

>>> 3 - 2j == 3 + (-2j)
True
9

540 °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)
<class 'float'>
0

>>> 2 + 3j + 4 + 5j
(6+8j)
16

630 °

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)
17

720 °

>>> z = 3.14
>>> type(z)
<class 'float'>
1

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)
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)
<class 'int'>
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)
18

720 °

>>> z = 3.14
>>> type(z)
<class 'float'>
2

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)
1

720 °

>>> z = 3.14
>>> type(z)
<class 'float'>
3

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)
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:

  1. 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.
  2. 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ị.

Hướng dẫn complex to real python - trăn phức tạp đến thật

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)
<class 'complex'>
18:

>>>

>>> z = 3.14
>>> type(z)
<class 'float'>
4

Nó 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)
<class 'int'>
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)
<class 'complex'>
20:

>>>

>>> z = 3.14
>>> type(z)
<class 'float'>
5

Nó 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)
<class 'int'>
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)
<class 'complex'>
20:

Hướng dẫn complex to real python - trăn phức tạp đến thật

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)
<class 'int'>
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)
<class 'float'>
6

Nó 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)
<class 'int'>
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)
<class 'complex'>
20:arctangent function, though, which led many programming languages to develop an alternative implementation called
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'float'>
7

Nó 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)
<class 'int'>
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)
<class 'complex'>
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)
<class 'float'>
8

Nó 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)
<class 'int'>
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)
<class 'complex'>
20:

>>>

>>> z = 3.14
>>> type(z)
<class 'float'>
9

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.14j
>>> type(z)
<class 'complex'>
0

Bạ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)
<class 'int'>
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)
<class 'complex'>
1

Tuy 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)
<class 'complex'>
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) <class 'complex'> 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) <class 'complex'> 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)
<class 'int'>
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ừ
    >>> z = 3.14 + 2.71j
    >>> type(z)
    <class 'complex'>
    
    18 kể từ khi
    >>> z = 3.14 + 2.71j
    >>> type(z)
    <class 'complex'>
    
    28 mong đợi hai đối số riêng biệt:
  • Đó 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
    >>> z = 3.14 + 2.71j
    >>> type(z)
    <class 'complex'>
    
    28 chính xác:
  • 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
    >>> z = 3 + 2
    
    >>> type(z)
    <class 'int'>
    
    47 hay
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    0 trong trường hợp này vì kết quả sẽ giống hệt nhau.

Đạ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ọcLượng giácsố 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ứcHình hộp chữ nhậtCực
Đại sốz = x + y
>>> 2 + 3j + 4 + 5j
(6+8j)
1
-
Hình họcz = (x, y)z = (r, φ)

Lượng giác

z = | z | (cos (x/| z |) + ________ 81Sin (y/| z |)))

>>>

>>> z = 3.14j
>>> type(z)
<class 'complex'>
2

z = 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)
<class 'complex'>
3

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
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)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>> z = 3.14j
>>> type(z)
<class 'complex'>
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)
<class 'complex'>
5

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>>

>>> z = 3.14j
>>> type(z)
<class 'complex'>
6

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>>

>>> z = 3.14j
>>> type(z)
<class 'complex'>
7

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:key function, such as
>>> z = 3 + 2

>>> type(z)
<class 'int'>
52:

>>>

>>> z = 3.14j
>>> type(z)
<class 'complex'>
8

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>> z = 3.14j >>> type(z) <class 'complex'> 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)
<class 'complex'>
9

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
0

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
1

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:positional or keyword arguments to it:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
2

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
3

Mặc dù bạn biết rằng

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
42 và
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
47 và
>>> 2 + 3j + 4 + 5j
(6+8j)
0:

>>> z = 3.14j >>> type(z) <class 'complex'> 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)
<class 'complex'>
4

Nế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)
<class 'complex'>
5

Trong trường hợp đầu tiên, số

>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
46 lớn hơn
>>> z = 3.14 + 2.71j
>>> type(z)
<class 'complex'>
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)
<class 'int'>
00 on a vector instance:

>>>

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
6

Trong 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)
<class 'complex'>
7

Bạ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)
<class 'complex'>
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:

Hướng dẫn complex to real python - trăn phức tạp đến thật

Đố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:

Hướng dẫn complex to real python - trăn phức tạp đến thật

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)
<class 'int'>
03:

>>> z = 3.14 + 0j
>>> type(z)
<class 'complex'>
8

Hà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)
<class 'complex'>
9

Số 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:

Hướng dẫn complex to real python - trăn phức tạp đến thật
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
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    0 tích hợp
    >>> 2 + 3j + 4 + 5j
    (6+8j)
    
    0 module
  • 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: