Hướng dẫn sympy tutorial python - hướng dẫn sympy python

>>> from sympy import *
>>> init_printing(use_unicode=True)

Nội phân Chính showShow

  • Hoạt động cơ bản#
  • Truy cập hàng và cột#
  • Xóa và chèn các hàng và cột#
  • Phương pháp cơ bản#
  • Trình xây dựng ma trận#
  • Phương pháp nâng cao#
  • Determinant#
  • Columnspace#
  • Giá trị riêng, hàm riêng và đường chéo#
  • Các vấn đề có thể xảy ra#
  • Không kiểm tra#

Để tạo ma trận trong Sympy, hãy sử dụng đối tượng

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5. Một ma trận được xây dựng bằng cách cung cấp một danh sách các vectơ hàng tạo nên ma trận. Ví dụ, để xây dựng ma trận

\]

sử dụng

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦

Để dễ dàng tạo các vectơ cột, một danh sách các phần tử được coi là một vectơ cột.

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦

Ma trận được thao tác giống như bất kỳ đối tượng nào khác trong Sympy hoặc Python.

>>> M = Matrix([[1, 2, 3], [3, 2, 1]])
>>> N = Matrix([0, 1, 1])
>>> M*N
⎡5⎤
⎢ ⎥
⎣3⎦

Một điều quan trọng cần lưu ý về ma trận Sympy là, không giống như mọi đối tượng khác trong Sympy, chúng có thể thay đổi. Điều này có nghĩa là chúng có thể được sửa đổi tại chỗ, như chúng ta sẽ thấy dưới đây. Nhược điểm của điều này là

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5 không thể được sử dụng ở những nơi cần tính bất biến, chẳng hạn như bên trong các biểu thức sympy khác hoặc là chìa khóa cho từ điển. Nếu bạn cần một phiên bản bất biến của
>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5, hãy sử dụng
>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
8.

Hoạt động cơ bản#

Dưới đây là một số hoạt động cơ bản trên

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5.

Shape#

Để có được hình dạng của một ma trận, hãy sử dụng hàm

>>> M = Matrix([[1, 2, 3], [3, 2, 1]])
>>> N = Matrix([0, 1, 1])
>>> M*N
⎡5⎤
⎢ ⎥
⎣3⎦
0.

>>> from sympy import shape
>>> M = Matrix([[1, 2, 3], [-2, 0, 4]])
>>> M
⎡1   2  3⎤
⎢        ⎥
⎣-2  0  4⎦
>>> shape(M)
(2, 3)

Truy cập hàng và cột#

Xóa và chèn các hàng và cột#

>>> M.row(0)
[1  2  3]
>>> M.col(-1)
⎡3⎤
⎢ ⎥
⎣4⎦

Xóa và chèn các hàng và cột#

Phương pháp cơ bản#in place.

>>> M.col_del(0)
>>> M
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>> M.row_del(1)
>>> M
[2  3]

Trình xây dựng ma trận#do not operate in place.

>>> M
[2  3]
>>> M = M.row_insert(1, Matrix([[0, 4]]))
>>> M
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>> M = M.col_insert(0, Matrix([1, -2]))
>>> M
⎡1   2  3⎤
⎢        ⎥
⎣-2  0  4⎦

Phương pháp nâng cao#

Phương pháp cơ bản#

Trình xây dựng ma trận#

>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.

Phương pháp nâng cao#

>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦

Trình xây dựng ma trận#

Phương pháp nâng cao#\(n\times n\) identity matrix.

Giá trị riêng, hàm riêng và đường chéo#

Các vấn đề có thể xảy ra#\(n\times m\) matrix of \(0\)s.

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
1

Không kiểm tra#

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
2

Để tạo ma trận trong Sympy, hãy sử dụng đối tượng

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5. Một ma trận được xây dựng bằng cách cung cấp một danh sách các vectơ hàng tạo nên ma trận. Ví dụ, để xây dựng ma trận\(1\times 1\) matrix. The matrices are stacked diagonally. The remaining elements are filled with \(0\)s.

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
3

Phương pháp nâng cao#

Determinant#

Giá trị riêng, hàm riêng và đường chéo#

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
4

RREF#

Các vấn đề có thể xảy ra#

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
5

Không kiểm tra#

Để tạo ma trận trong Sympy, hãy sử dụng đối tượng

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5. Một ma trận được xây dựng bằng cách cung cấp một danh sách các vectơ hàng tạo nên ma trận. Ví dụ, để xây dựng ma trận

Nullspace#

\]

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
6

Columnspace#

sử dụng

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
7

Giá trị riêng, hàm riêng và đường chéo#

Các vấn đề có thể xảy ra#roots).

>>> Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2 ⎦
8

Không kiểm tra#

Để tạo ma trận trong Sympy, hãy sử dụng đối tượng

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
5. Một ma trận được xây dựng bằng cách cung cấp một danh sách các vectơ hàng tạo nên ma trận. Ví dụ, để xây dựng ma trận

\]

sử dụng

Để dễ dàng tạo các vectơ cột, một danh sách các phần tử được coi là một vectơ cột.\((P, D)\), where \(D\) is diagonal and \(M = PDP^{-1}\).

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
0

Ma trận được thao tác giống như bất kỳ đối tượng nào khác trong Sympy hoặc Python.

Nếu tất cả những gì bạn muốn là đa thức đặc trưng, ​​hãy sử dụng

>>> M
[2  3]
>>> M = M.row_insert(1, Matrix([[0, 4]]))
>>> M
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>> M = M.col_insert(0, Matrix([1, -2]))
>>> M
⎡1   2  3⎤
⎢        ⎥
⎣-2  0  4⎦
8. Điều này hiệu quả hơn
>>> M.col_del(0)
>>> M
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>> M.row_del(1)
>>> M
[2  3]
5, bởi vì đôi khi rễ biểu tượng có thể tốn kém để tính toán.

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
1

Các vấn đề có thể xảy ra#

Không kiểm tra#

Nếu các hoạt động ma trận của bạn không thành công hoặc trả về câu trả lời sai, các lý do phổ biến có thể sẽ là từ thử nghiệm bằng không. Nếu có một biểu thức không được thử nghiệm bằng không, nó có thể mang lại các vấn đề trong việc tìm kiếm các trụ để loại bỏ Gaussian hoặc quyết định liệu ma trận có thể không có được hay không có chức năng cấp cao nào dựa trên các quy trình trước đó.

Hiện tại, phương pháp kiểm tra 0 mặc định của Sympy

>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
0 chỉ được đảm bảo là chính xác trong một số miền hạn chế của số và ký hiệu, và bất kỳ biểu thức phức tạp nào ngoài khả năng quyết định của nó được coi là
>>> from sympy import shape
>>> M = Matrix([[1, 2, 3], [-2, 0, 4]])
>>> M
⎡1   2  3⎤
⎢        ⎥
⎣-2  0  4⎦
>>> shape(M)
(2, 3)
0, hoạt động tương tự như logic
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
2.

Danh sách các phương pháp sử dụng các quy trình kiểm tra bằng không như sau:

>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
3,
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
4,
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
5,
>>> M.row(0)
[1  2  3]
>>> M.col(-1)
⎡3⎤
⎢ ⎥
⎣4⎦
4,
>>> M.row(0)
[1  2  3]
>>> M.col(-1)
⎡3⎤
⎢ ⎥
⎣4⎦
9,
>>> M.col_del(0)
>>> M
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>> M.row_del(1)
>>> M
[2  3]
9,
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
9,
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
0,
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
1,
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
2,
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
3,
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
4

Họ có thuộc tính

>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
5 đã mở ra cho người dùng để chỉ định phương thức kiểm tra bằng không, có thể chấp nhận bất kỳ chức năng nào có đầu vào và đầu ra boolean đơn, trong khi được mặc định với
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])
>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦
>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦
>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦
>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦
>>> M**-1
⎡1/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦
>>> N**-1
Traceback (most recent call last):
...
NonInvertibleMatrixError: Matrix det == 0; not invertible.
0.

Dưới đây là một ví dụ về việc giải quyết một vấn đề gây ra bởi số không. Mặc dù đầu ra cho ma trận cụ thể này đã được cải thiện, kỹ thuật dưới đây vẫn được quan tâm. [1] [2] [3][1] [2] [3]

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
2

Bạn có thể theo dõi biểu thức nào đang bị thiếu hụt, bằng cách tiêm một bài kiểm tra số 0 tùy chỉnh với các cảnh báo được bật.

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
3

Trong trường hợp này,

>>> M = Matrix([[1, 2, 3], [4, 5, 6]])
>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦
>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6⎦
7 sẽ mang lại bằng không, nhưng thử nghiệm bằng không đã không bắt được. Có thể có nghĩa là một bài kiểm tra không mạnh hơn nên được giới thiệu. Đối với ví dụ cụ thể này, việc viết lại cho các cấp số nhân và áp dụng đơn giản hóa sẽ làm cho thử nghiệm bằng không mạnh hơn đối với các hyperbolics, trong khi vô hại đối với các đa thức khác hoặc các hàm siêu việt.

>>> Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
4

Bạn có thể thấy rõ

>>> M.row(0)
[1  2  3]
>>> M.col(-1)
⎡3⎤
⎢ ⎥
⎣4⎦
9 trả về kết quả thích hợp, sau khi tiêm một bài kiểm tra không thay thế.

Lưu ý rằng phương pháp này chỉ có giá trị đối với một số trường hợp giới hạn của ma trận chỉ chứa số, cường điệu và số mũ. Đối với các ma trận khác, bạn nên sử dụng phương pháp khác nhau đã chọn cho các miền của chúng.

Các đề xuất có thể sẽ là tận dụng việc viết lại và đơn giản hóa, với sự đánh đổi tốc độ [4] hoặc sử dụng kiểm tra số ngẫu nhiên, với sự đánh đổi độ chính xác [5].[4] , or using random numeric testing, with tradeoff of accuracy [5] .

Nếu bạn tự hỏi tại sao không có thuật toán chung để kiểm tra bằng không có thể hoạt động với bất kỳ thực thể tượng trưng nào, thì đó là do vấn đề liên tục nói rằng thử nghiệm bằng không là không thể giải quyết được [6], và không chỉ là sympy, mà cả các hệ thống đại số máy tính khác [7 ] [8] sẽ phải đối mặt với cùng một vấn đề cơ bản.[6] , and not only the SymPy, but also other computer algebra systems [7] [8] would face the same fundamental issue.

Tuy nhiên, việc phát hiện ra bất kỳ thất bại kiểm tra bằng không nào có thể cung cấp một số ví dụ tốt để cải thiện Sympy, vì vậy nếu bạn gặp phải một người, bạn có thể báo cáo vấn đề cho Trình theo dõi vấn đề Sympy [9] để nhận được sự giúp đỡ chi tiết từ cộng đồng.[9] to get detailed help from the community.

Chú thích