Mở rộng đa thức python

  • 20 Tháng hai, 2018
  • #1

bối rối_kỹ sư

392

chào mọi người

Trong Python có một thư viện gọi là hỗn loạn. Một lệnh hữu ích là cp. orth_ttr tạo ra khai triển đa thức, e. g. một loạt các đa thức trực giao hoặc thứ tự không, một, hai. cho một biến ngẫu nhiên e. g bình thường, thống nhất

Để biết thêm thông tin xem https. //pypi. con trăn. org/pypi/hỗn loạn/2. 0

Tôi sử dụng nó như trong hình đính kèm

Ai đó có thể cho tôi biết liệu có cách nào để có được những kết quả tương tự trong Mathicala không?https. //Ibb. co/dEuFQx

Chỉnh sửa. vì có vẻ như hình ảnh không hoạt động bình thường, tôi cũng cung cấp một liên kết https. //Ibb. co/cm2Vsc

 

Hồi đáp

  • 27 Tháng hai, 2018
  • #2

đánh dấu44

Người hướng dẫn

thông tin chi tiết tác giả

36,6318,629

Không chắc câu hỏi của bạn là gì. Liên kết tới hình ảnh không hoạt động [như bạn đã biết] -- trình duyệt của tôi nói rằng trang đó không tồn tại. Trong liên kết khác của bạn, mã python của bạn bị lỗi, có thể do mô-đun matplotlib chưa được cài đặt

Nếu câu hỏi của bạn là về Mathematica, tôi không đủ kiến ​​thức để trả lời câu hỏi đó

 

Hồi đáp

Bây giờ chúng ta hãy nhảy vào và làm một số toán học thú vị. Một trong những tính năng hữu ích nhất của hệ thống thao tác ký hiệu là khả năng đơn giản hóa các biểu thức toán học. SymPy có hàng chục chức năng để thực hiện các loại đơn giản hóa khác nhau. Ngoài ra còn có một hàm chung được gọi là

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 cố gắng áp dụng tất cả các hàm này theo cách thông minh để đạt được dạng biểu thức đơn giản nhất. Dưới đây là một số ví dụ

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]

Đây,

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
1 là \[\Gamma[x]\] , hàm gamma. Chúng tôi thấy rằng
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 có khả năng xử lý một lớp biểu thức lớn.

Nhưng

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 có một cạm bẫy. Nó chỉ áp dụng tất cả các hoạt động đơn giản hóa chính trong SymPy và sử dụng phương pháp phỏng đoán để xác định kết quả đơn giản nhất. Nhưng “đơn giản nhất” không phải là một thuật ngữ được định nghĩa rõ ràng. Ví dụ: giả sử chúng ta muốn “đơn giản hóa” \[x^2 + 2x + 1\] thành \ . :

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1

Chúng tôi đã không nhận được những gì chúng tôi muốn. Có một chức năng để thực hiện việc đơn giản hóa này, được gọi là

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4, sẽ được thảo luận bên dưới

Một cạm bẫy khác đối với

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 là nó có thể chậm một cách không cần thiết, vì nó thử nhiều kiểu đơn giản hóa trước khi chọn ra cái tốt nhất. Nếu bạn đã biết chính xác mình đang theo đuổi loại đơn giản hóa nào, thì tốt hơn là áp dụng [các] hàm đơn giản hóa cụ thể để áp dụng những đơn giản hóa đó

Áp dụng các hàm đơn giản hóa cụ thể thay vì

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 cũng có lợi thế là các hàm cụ thể có những đảm bảo nhất định về dạng đầu ra của chúng. Những điều này sẽ được thảo luận với từng chức năng bên dưới. Ví dụ,
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4, khi được gọi trên một đa thức có hệ số hữu tỷ, được đảm bảo để phân tích đa thức thành các thừa số bất khả quy.
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 không có bảo đảm. Nó hoàn toàn mang tính phỏng đoán, và như chúng ta đã thấy ở trên, nó thậm chí có thể bỏ lỡ một kiểu đơn giản hóa khả thi mà SymPy có khả năng thực hiện

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 là tốt nhất khi được sử dụng tương tác, khi bạn chỉ muốn rút gọn một biểu thức thành một dạng đơn giản hơn. Sau đó, bạn có thể chọn áp dụng các hàm cụ thể sau khi bạn thấy kết quả mà
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0 trả về, để có được kết quả chính xác hơn. Nó cũng hữu ích khi bạn không biết một biểu thức sẽ ở dạng nào và bạn cần một hàm catchall để đơn giản hóa nó

Đơn giản hóa hàm đa thức/hữu tỷ

mở rộng

>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]
1 là một trong những chức năng đơn giản hóa phổ biến nhất trong SymPy. Mặc dù nó có rất nhiều phạm vi, nhưng bây giờ, chúng ta sẽ xem xét chức năng của nó trong việc mở rộng các biểu thức đa thức. Ví dụ

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6

Cho một đa thức,

>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]
1 sẽ đưa nó về dạng chính tắc của tổng các đơn thức

>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]
1 nghe có vẻ không giống chức năng đơn giản hóa. Xét cho cùng, đúng như tên gọi của nó, nó làm cho các biểu thức lớn hơn chứ không phải nhỏ hơn. Thông thường đây là trường hợp, nhưng thường thì một biểu thức sẽ trở nên nhỏ hơn khi gọi
>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]
1 trên đó do hủy bỏ

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2

hệ số

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4 lấy một đa thức và nhân nó thành thừa số bất khả qui trên các số hữu tỉ. Ví dụ

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]

Đối với đa thức,

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4 là số đối của
>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]
1.
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4 sử dụng một thuật toán phân tích thừa số đa biến hoàn chỉnh trên các số hữu tỉ, có nghĩa là mỗi thừa số được trả về bởi
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4 được đảm bảo là bất khả quy

Nếu bạn quan tâm đến bản thân các yếu tố, thì

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
0 sẽ trả về kết quả có cấu trúc hơn

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]

Lưu ý rằng đầu vào của

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
1 và
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
2 không nhất thiết phải là đa thức theo nghĩa chặt chẽ. Chúng sẽ phân tích thành nhân tử hoặc mở rộng bất kỳ loại biểu thức nào một cách thông minh [mặc dù lưu ý rằng các nhân tử có thể không phải là bất khả quy nếu đầu vào không còn là đa thức trên các hữu tỉ]

>>> expand[[cos[x] + sin[x]]**2]
   2                           2
sin [x] + 2⋅sin[x]⋅cos[x] + cos [x]
>>> factor[cos[x]**2 + 2*cos[x]*sin[x] + sin[x]**2]
                 2
[sin[x] + cos[x]]

sưu tầm

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
3 thu thập lũy thừa chung của một thuật ngữ trong một biểu thức. Ví dụ

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
3 đặc biệt hữu ích khi kết hợp với phương pháp
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
5.
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
6 đưa ra hệ số của
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
7 trong
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
8

>>> collected_expr.coeff[x, 2]
2 - z

sự hủy bỏ

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
9 sẽ lấy bất kỳ hàm hữu tỷ nào và đặt nó ở dạng chính tắc chuẩn, \[\frac{p}{q}\] . e. , là số nguyên]. \[p\] and \[q\] are expanded polynomials with no common factors, and the leading coefficients of \[p\] and \[q\] do not have denominators [i.e., are integers].

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
0

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
1

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
2

Lưu ý rằng vì

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4 sẽ phân tích hoàn toàn cả tử số và mẫu số của một biểu thức, nên nó cũng có thể được sử dụng để làm điều tương tự

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
3

Tuy nhiên, nếu bạn chỉ quan tâm đến việc đảm bảo rằng biểu thức ở dạng bị hủy, thì

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
9 sẽ hiệu quả hơn
>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
4

riêng biệt

>>> collected_expr.coeff[x, 2]
2 - z
3 thực hiện phép tách phân số từng phần trên một hàm hữu tỷ

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
4

Đơn giản hóa lượng giác

Ghi chú

SymPy tuân theo các quy ước đặt tên của Python cho các hàm lượng giác nghịch đảo, nghĩa là thêm một __

>>> collected_expr.coeff[x, 2]
2 - z
4 vào trước tên của hàm. Ví dụ, cosin nghịch đảo, hoặc cosin cung, được gọi là
>>> collected_expr.coeff[x, 2]
2 - z
5

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
5

trigsimp

Để đơn giản hóa các biểu thức bằng cách sử dụng các đồng nhất lượng giác, hãy sử dụng

>>> collected_expr.coeff[x, 2]
2 - z
6

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
6

>>> collected_expr.coeff[x, 2]
2 - z
6 cũng hoạt động với các hàm lượng giác hyperbolic

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
7

Giống như

>>> factor_list[x**2*z + 4*x*y*z + 4*y**2*z]
[1, [[z, 1], [x + 2⋅y, 2]]]
0,
>>> collected_expr.coeff[x, 2]
2 - z
6 áp dụng các đồng nhất lượng giác khác nhau cho biểu thức đầu vào, sau đó sử dụng phương pháp phỏng đoán để trả về giá trị "tốt nhất"

expand_trig

Để mở rộng các hàm lượng giác, nghĩa là áp dụng tổng hoặc đồng nhất hai góc, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
00

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
8

Bởi vì

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
00 có xu hướng làm cho các biểu thức lượng giác lớn hơn và
>>> collected_expr.coeff[x, 2]
2 - z
6 có xu hướng làm cho chúng nhỏ hơn, những đồng nhất này có thể được áp dụng ngược lại bằng cách sử dụng
>>> collected_expr.coeff[x, 2]
2 - z
6

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
9

quyền hạn

Trước khi chúng tôi giới thiệu các hàm đơn giản hóa lũy thừa, một cuộc thảo luận toán học về các đồng nhất được nắm giữ bởi các lũy thừa là theo thứ tự. Có ba loại danh tính thỏa mãn bởi số mũ

  1. \[x^ax^b = x^{a + b}\]

  2. \[x^ay^a = [xy]^a\]

  3. \[[x^a]^b = x^{ab}\]

Danh tính 1 luôn đúng

Danh tính 2 không phải lúc nào cũng đúng. Ví dụ: nếu \[x = y = -1\]\[a = \frac{1 . Tuy nhiên, danh tính 2 là đúng ít nhất nếu , then \[x^ay^a = \sqrt{-1}\sqrt{-1} = i\cdot i = -1\], whereas \[[xy]^a = \sqrt{-1\cdot-1} = \sqrt{1} = 1\]. However, identity 2 is true at least if \[x\]\[y\] are nonnegative and \[a\] is real [it may also be true under other conditions as well]. A common consequence of the failure of identity 2 is that \[\sqrt{x}\sqrt{y} \neq \sqrt{xy}\] .

Danh tính 3 không phải lúc nào cũng đúng. Ví dụ: nếu \[x = -1\] , \[a = 2\], and \[b = \frac{1}{2}\], then \[[x^a]^b = {\left[[-1]^2\right]}^{1/2} = \sqrt{1} = 1\] and \[x^{ab} = [-1]^{2\cdot1/2} = [-1]^1 = -1\]. However, identity 3 is true when \[b\] là một số nguyên [một lần nữa, nó cũng có thể đúng trong các trường hợp khác]. Hai hậu quả phổ biến của lỗi danh tính 3 là \[\sqrt{x^2}\neq x\]\[\sqrt{\frac{1}{x}} \neq \frac{1}{\sqrt{x}}\].

Để tóm tắt

Xác thực

Đủ điều kiện để nắm giữ

Phản ví dụ khi điều kiện không được đáp ứng

hậu quả quan trọng

  1. \[x^ax^b = x^{a + b}\]

Luôn luôn đúng

Không có

Không có

  1. \[x^ay^a = [xy]^a\]

\[x, y \geq 0\]\[a \in \mathbb{R}\]

\[[-1]^{1/2}[-1]^{1/2} \neq [-1\cdot-1]^{1/2}\]

\[\sqrt{x}\sqrt{y} \neq \sqrt{xy}\] nói chung

  1. \[[x^a]^b = x^{ab}\]

\[b \in \mathbb{Z}\]

\[{\left[[-1]^2\right]}^{1/2} \neq [-1]^{2\cdot1/2}\]

\[\sqrt{x^2}\neq x\]\[\sqrt{\frac{1}{x in general

Đây là điều quan trọng cần nhớ, bởi vì theo mặc định, SymPy sẽ không thực hiện đơn giản hóa nếu chúng không đúng về tổng thể

Để làm cho SymPy thực hiện các đơn giản hóa liên quan đến danh tính chỉ đúng theo một số giả định nhất định, chúng tôi cần đặt các giả định cho Biểu tượng của mình. Chúng ta sẽ thảo luận đầy đủ về hệ thống giả định sau, nhưng bây giờ, tất cả những gì chúng ta cần biết là những điều sau đây

  • Theo mặc định, Biểu tượng SymPy được coi là phức tạp [các phần tử của \[\mathbb{C}\] ]. Nghĩa là, một sự đơn giản hóa sẽ không được áp dụng cho một biểu thức với một Ký hiệu đã cho trừ khi nó đúng với tất cả các số phức.

  • Các biểu tượng có thể được đưa ra các giả định khác nhau bằng cách chuyển giả định tới

    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    04. Đối với phần còn lại của phần này, chúng tôi sẽ giả định rằng
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    05 và
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    06 là dương, và rằng
    >>> collected_expr.coeff[x, 2]
    2 - z
    
    4 và
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    08 là thực. Chúng tôi sẽ để lại
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    09,
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    10 và
    >>> simplify[sin[x]**2 + cos[x]**2]
    1
    >>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
    x - 1
    >>> simplify[gamma[x]/gamma[x - 2]]
    [x - 2]⋅[x - 1]
    
    11 dưới dạng các Ký hiệu phức tạp tùy ý để chứng minh điều gì xảy ra trong trường hợp đó

    >>> simplify[x**2 + 2*x + 1]
     2
    x  + 2⋅x + 1
    
    0

Ghi chú

Trong SymPy,

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
12 chỉ là lối tắt đến
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
13. Chúng chính xác là cùng một đối tượng

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
1

khoa trương

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14 áp dụng danh tính 1 và 2 từ trên xuống, từ trái sang phải

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
2

Lưu ý rằng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14 từ chối thực hiện việc đơn giản hóa nếu nó không hợp lệ

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
3

Nếu bạn biết rằng bạn muốn áp dụng sự đơn giản hóa này, nhưng bạn không muốn làm rối tung các giả định, bạn có thể chuyển cờ

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
16. Điều này sẽ buộc quá trình đơn giản hóa diễn ra, bất kể các giả định

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
4

Lưu ý rằng trong một số trường hợp, đặc biệt, khi số mũ là số nguyên hoặc số hữu tỉ và đẳng thức 2 được giữ, nó sẽ tự động được áp dụng

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
5

Điều này có nghĩa là sẽ không thể hoàn tác danh tính này với

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14, bởi vì ngay cả khi
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14 đặt các cơ sở lại với nhau, chúng sẽ tự động tách ra một lần nữa

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
6

expand_power_exp / expand_power_base

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
19 và
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
20 lần lượt áp dụng danh tính 1 và 2 từ phải sang trái

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
7

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
8

Như với

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14, danh tính 2 không được áp dụng nếu nó không hợp lệ

>>> simplify[x**2 + 2*x + 1]
 2
x  + 2⋅x + 1
9

Và cũng như với

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14, bạn có thể buộc quá trình mở rộng diễn ra mà không cần thay đổi các giả định bằng cách sử dụng
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
16

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
0

Như với danh tính 2, danh tính 1 được áp dụng tự động nếu lũy thừa là một số và do đó không thể hoàn tác với

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
19

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
1

bột mịn nhất

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
25 áp dụng danh tính 3, từ trái sang phải

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
2

Như trước đây, danh tính không được áp dụng nếu nó không đúng theo các giả định đã cho

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
3

Và như trước đây, điều này có thể được ghi đè thủ công bằng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
16

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
4

Hàm mũ và logarit

Ghi chú

Trong SymPy, cũng như trong Python và hầu hết các ngôn ngữ lập trình,

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
27 là logarit tự nhiên, còn được gọi là
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
28. SymPy tự động cung cấp bí danh
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
29 trong trường hợp bạn quên điều này

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
5

Logarit có những vấn đề tương tự như quyền hạn. Có hai danh tính chính

  1. \[\log{[xy]} = \log{[x]} + \log{[y]}\]

  2. \[\log{[x^n]} = n\log{[x]}\]

Không có danh tính nào đúng với phức tùy ý \[x\]\[y\] . Tuy nhiên, điều kiện đủ để giữ danh tính là nếu , due to the branch cut in the complex plane for the complex logarithm. However, sufficient conditions for the identities to hold are if \[x\]\[y\]< . are positive and \[n\] is real.

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
6

Như trước đây,

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
09 và
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
10 sẽ là Ký hiệu không có giả định bổ sung

Lưu ý rằng danh tính \[\log{\left[\frac{x}{y}\right]} = \log[x] - \log[y] . is a special case of identities 1 and 2 by \[\log{\left[\frac{x}{y}\right]} =\] \[\log{\left[x\cdot\frac{1}{y}\right]} =\] \[\log[x] + \log{\left[ y^{-1}\right]} =\] \[\log[x] - \log[y]\], and thus it also holds if \[x\] and \[y\] are positive, but may not hold in general.

Chúng ta cũng thấy rằng \[\log{\left[ e^x \right]} = x\] đến từ \[\log{\left[ e^x \right]} = x\log[e] = x\], and thus holds when \[x\] is real [and it can be verified that it does not hold in general for arbitrary complex \[x\], for example, \[\log{\left[e^{x + 2\pi i}\right]} = \log{\left[e^x\right]} = x \neq x + 2\pi i\]].

expand_log

Để áp dụng danh tính 1 và 2 từ trái sang phải, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
32. Như mọi khi, danh tính sẽ không được áp dụng trừ khi chúng hợp lệ

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
7

Như với

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
14 và
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
25,
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
32 có tùy chọn
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
36 có thể được sử dụng để bỏ qua các giả định

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
8

tổ hợp log

Để áp dụng danh tính 1 và 2 từ phải sang trái, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
37

>>> expand[[x + 1]**2]
 2
x  + 2⋅x + 1
>>> expand[[x + 2]*[x - 3]]
 2
x  - x - 6
9

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
37 cũng có tùy chọn
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
36 có thể được sử dụng để bỏ qua các giả định

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
0

Chức năng đặc biệt

SymPy thực hiện hàng chục chức năng đặc biệt, từ các chức năng trong tổ hợp đến vật lý toán học

Một danh sách đầy đủ các chức năng đặc biệt có trong SymPy và tài liệu của chúng có tại trang

Với mục đích của hướng dẫn này, hãy giới thiệu một số chức năng đặc biệt trong SymPy

Hãy xác định

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
05,
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
06 và
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
09 là các Ký hiệu thông thường, phức tạp, loại bỏ bất kỳ giả định nào chúng tôi đặt cho chúng trong phần trước. Chúng tôi cũng sẽ xác định
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
43,
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
44 và
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
45

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
1

Hàm giai thừa là

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
46.
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
47 đại diện cho \[n. = 1\cdot2\cdots[n - 1]\cdot n\] . \[n. \] đại diện cho số hoán vị của \[n\] mục riêng biệt.

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
2

Hàm hệ số nhị thức là

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
48.
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
49 đại diện cho \[\binom{n}{k}\] , số cách chọn \[ . Nó cũng thường được viết là items from a set of \[n\] distinct items. It is also often written as \[nCk\] , và được phát âm là “ \[n\] choose \[k\]”.

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
3

Hàm giai thừa có liên quan chặt chẽ với hàm gamma,

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
50.
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
51 đại diện cho \[\Gamma[z] = \int_0^\infty t^{z - 1}e^{-t}\,dt\], which for positive integer \[z\] is the same as \[[z - 1]!\] .

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
4

Hàm siêu hình tổng quát là

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
52.
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
53 đại diện cho \[{}_pF_q\left[\begin{matrix} a_1, \cdots, a_p \\ b_1, \cdots, b_q \end{matrix} \middle. z \right]\] . Trường hợp phổ biến nhất là \[{}_2F_1\] , thường được gọi là hàm siêu hình thông thường.

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
5

viết lại

Một cách phổ biến để giải quyết các chức năng đặc biệt là viết lại chúng theo cách của nhau. Điều này hoạt động với bất kỳ chức năng nào trong SymPy, không chỉ các chức năng đặc biệt. Để viết lại một biểu thức dưới dạng hàm, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
54. Ví dụ,

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
6

Để biết một số mẹo về việc áp dụng cách viết lại có mục tiêu hơn, hãy xem phần

expand_func

Để mở rộng các chức năng đặc biệt về một số danh tính, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
55. Ví dụ

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
7

siêu mở rộng

Để viết lại

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
52 dưới dạng các chức năng tiêu chuẩn hơn, hãy sử dụng
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
57

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
8

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
57 cũng hoạt động trên chức năng Meijer G tổng quát hơn [xem để biết thêm thông tin]

>>> expand[[x + 1]*[x - 2] - [x - 1]*x]
-2
9

lược

Để đơn giản hóa các biểu thức tổ hợp, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
60

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
0

gammasimp

Để đơn giản hóa các biểu thức có hàm gamma hoặc hàm tổ hợp với đối số không nguyên, hãy sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
61

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
1

Thí dụ. Phân Số Tiếp Tục

Hãy sử dụng SymPy để khám phá các phân số tiếp tục. Một phân số liên tục là một biểu thức của hình thức

\[a_0 + \cfrac{1}{a_1 + \cfrac{1}{a_2 + \cfrac{1}{ \ddots + \cfrac{1}{a_n} }}}\]

trong đó \[a_0, \ldots, a_n\] là số nguyên và \[a_1 . Một phân số liên tục cũng có thể là vô hạn, nhưng các đối tượng vô hạn khó biểu diễn hơn trong máy tính, vì vậy chúng ta sẽ chỉ xem xét trường hợp hữu hạn ở đây. are positive. A continued fraction can also be infinite, but infinite objects are more difficult to represent in computers, so we will only examine the finite case here.

Một phân số tiếp diễn của dạng trên thường được biểu diễn dưới dạng danh sách \[[a_0; a_1, \ldots, a_n]\] . Hãy viết một hàm đơn giản để chuyển đổi một danh sách như vậy sang dạng phân số tiếp tục của nó. Cách dễ nhất để xây dựng một phân số liên tục từ một danh sách là làm ngược lại. Lưu ý rằng bất chấp sự đối xứng rõ ràng của định nghĩa, phần tử đầu tiên, \[a_0\] , thường phải được xử lý khác với phần còn lại.

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
2

Chúng tôi sử dụng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
62 trong
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
63 để kết quả sẽ luôn là một đối tượng SymPy, ngay cả khi chúng tôi chỉ chuyển vào Python ints

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
3

Mỗi phân số tiếp tục hữu hạn là một số hữu tỷ, nhưng chúng tôi quan tâm đến các ký hiệu ở đây, vì vậy hãy tạo một phân số tiếp tục ký hiệu. Hàm

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
04 mà chúng tôi đang sử dụng có phím tắt để tạo các ký hiệu được đánh số.
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
65 sẽ tạo ra các ký hiệu
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
66,
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
67, …,
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
68

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
4

Biểu mẫu này rất hữu ích để hiểu các phân số liên tục, nhưng hãy đặt nó ở dạng hàm hữu tỉ tiêu chuẩn bằng cách sử dụng

>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
9

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
5

Bây giờ, giả sử chúng ta được cung cấp

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
70 ở dạng hủy bỏ ở trên. Trên thực tế, chúng ta có thể được cung cấp phân số ở bất kỳ dạng nào, nhưng chúng ta luôn có thể đặt nó ở dạng chính tắc ở trên với
>>> expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
 3    2        2
x  - x ⋅z + 2⋅x  + x⋅y + x - 3
>>> collected_expr = collect[expr, x]
>>> collected_expr
 3    2
x  + x ⋅[2 - z] + x⋅[y + 1] - 3
9. Giả sử rằng chúng ta biết rằng nó có thể được viết lại dưới dạng một phân số liên tục. Làm thế nào chúng ta có thể làm điều này với SymPy? . Nếu chúng ta có thể viết biểu thức ở dạng này, chúng ta có thể rút ra từng \[c + \frac{1}{f}\], where \[c\] is an integer and \[f\] is a [smaller] continued fraction. If we could write the expression in this form, we could pull out each \[c\] theo cách đệ quy và thêm nó vào danh sách. Sau đó, chúng ta có thể nhận được một phân số liên tục với hàm
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
72 của mình.

Quan sát chính ở đây là chúng ta có thể chuyển đổi một biểu thức sang dạng \[c + \frac{1}{f}\] by doing a partial fraction decomposition with respect to \[c\]. This is because \[f\] không chứa \[c\]. This means we need to use the

>>> collected_expr.coeff[x, 2]
2 - z
3 function. We use
>>> collected_expr.coeff[x, 2]
2 - z
3 to pull the term out, then subtract it from the expression, and take the reciprocal to get the \[f\] .

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
6

Bây giờ chúng tôi lặp lại quá trình này

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
7

Tất nhiên, bài tập này có vẻ vô nghĩa, bởi vì chúng ta đã biết rằng

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
70 của chúng ta là
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
76. Vì vậy, hãy thử bài tập sau. Lấy một danh sách các ký hiệu và ngẫu nhiên hóa chúng, đồng thời tạo phân số tiếp tục bị hủy và xem liệu bạn có thể tạo lại danh sách ban đầu không. Ví dụ

>>> factor[x**3 - x**2 + x - 1]
        ⎛ 2    ⎞
[x - 1]⋅⎝x  + 1⎠
>>> factor[x**2*z + 4*x*y*z + 4*y**2*z]
           2
z⋅[x + 2⋅y]
8

Trong SymPy, trong ví dụ trên, hãy thử tái tạo

>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
77 từ
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
70. Tôi đã xóa
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
77 ở cuối để loại bỏ sự cám dỗ nhìn trộm [bạn có thể kiểm tra câu trả lời của mình ở cuối bằng cách gọi
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
80 trong danh sách mà bạn tạo ở cuối và so sánh nó với
>>> simplify[sin[x]**2 + cos[x]**2]
1
>>> simplify[[x**3 + x**2 - x - 1]/[x**2 + 2*x + 1]]
x - 1
>>> simplify[gamma[x]/gamma[x - 2]]
[x - 2]⋅[x - 1]
81

Chủ Đề