5

tôi có các biểu hiện sau:SymPy, đơn giản hóa/thay thế sử dụng các mẫu nổi tiếng hoặc tiểu biểu

from sympy import pi, sin, cos, var, simplify 
var('j,u,v,w,vt,wt,a2,t,phi') 

u0 = v*a2*sin(pi*j/2 + pi*j*t*phi**(-1)/2) + pi*vt*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1)/2 + pi*w*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1) 

Mà có thể được đơn giản hóa:

print simplify(u0) 
#a2*(pi*j*vt*cos(pi*j*(phi + t)/(2*phi)) + 2*pi*j*w*cos(pi*j*(phi + t)/(2*phi)) + 2*phi*v*sin(pi*j*(phi + t)/(2*phi)))/(2*phi) 

Với tiểu biểu:

bj = pi*j*(phi + t)/(2*phi) 
cj = j*pi/(2*phi) 

Hiện tại tôi thay thế bằng tay bjcj trong sim được biểu thị u0 biểu thức để nhận được:

u0 = a2*(v*sin(bj) + cj*vt*cos(bj) + 2*cj*w*cos(bj)) 

Có thể sử dụng SymPy để đạt được điều đó, tránh thay thế thủ công không?

Trả lời

8

Tôi đoán những gì bạn đang thiếu là subs sẽ thay thế biểu thức tùy ý, không chỉ là những biểu tượng

>>> print simplify(u0).subs({pi*j*(phi + t)/(2*phi): bj, j*pi/(2*phi): cj}) 
a2*(pi*j*vt*cos(bj) + 2*pi*j*w*cos(bj) + 2*phi*v*sin(bj))/(2*phi) 

(tôi đã sử dụng simplify vì đó là những gì dẫn đến pi*j*(phi + t)/(2*phi) thay vì pi*j/2 + pi*j*t/(2*phi), nhưng nó không phải là trường hợp cần thiết)

Đọc http://docs.sympy.org/0.7.3/tutorial/basic_operations.html#substitution để biết thêm thông tin về thay thế và thay thế. Nếu bạn muốn thực hiện thay thế nâng cao hơn, hãy xem phương thức replace.

+1

đó là tuyệt vời! Cảm ơn bạn! –

1

Bạn có thể tìm thấy các biểu thức phụ phổ biến với quy trình cse.

+0

có thể chuyển sang 'cse' các biểu thức con mà nó cần tìm không? –

+0

Điểm của 'cse' là tìm các biểu thức cho bạn. Nếu bạn biết các biểu thức con phổ biến, tại sao bạn cần phải tìm kiếm chúng? Nếu mặt khác, câu hỏi của bạn là thay thế các biểu thức, chỉ cần sử dụng 'subs' hoặc bất kỳ thói quen nào khác được đề cập trong' subs' docstring. Kiểm tra hướng dẫn sympy http://docs.sympy.org/0.7.3/tutorial/index.html – Krastanov

+0

Tôi phải tìm kiếm chúng vì đôi khi chúng không hiển thị rõ ràng, nếu không tôi chỉ có thể thay thế trong trình chỉnh sửa văn bản hoặc tương tự . Xem ví dụ 'cj', biểu thức con của nó nằm bên trong' u0' nhưng không được phân cách rõ ràng ... –