9

Trong sympy tôi có tích phân trả về một đối tượng Piecewise, ví dụ:Xử lý các phương trình piecewise được trả về bởi sympy tích hợp

In [2]: from sympy.abc import x,y,z 

In [3]: test = exp(-x**2/z**2) 

In [4]: itest = integrate(test,(x,0,oo)) 

In [5]: itest 
Out[5]: 
⎧ ___             
⎪ ╲╱ π ⋅z  │     ⎛  1   ⎞│ π 
⎪ ─────── for │periodic_argument⎜──────────────, ∞⎟│ ≤ ─ 
⎪ 2   │     ⎜   2  ⎟│ 2 
⎪    │     ⎝polar_lift (z) ⎠│  
⎪               
⎪∞               
⎪⌠               
⎨⎮ 2             
⎪⎮ -x              
⎪⎮ ───             
⎪⎮ 2             
⎪⎮ z              
⎪⎮ ℯ dx     otherwise     
⎪⌡               
⎪0               
⎩  

Tôi muốn trích xuất chỉ là chi nhánh đầu tiên của phương trình piecewise này, nói cách khác, tôi muốn để có thể làm điều gì đó như itest.parts(0) để trích xuất đơn giản sqrt(pi)*z/2. Tôi dường như không thể tìm thấy bất kỳ cách nào để làm điều này, nhưng có lẽ tôi đang sử dụng các thuật ngữ tìm kiếm sai trong tài liệu. Bất kỳ ý tưởng?

Sửa

Poking xung quanh một chút, tôi đã quản lý để thấy rằng nếu tôi làm itest.args[0][0] tôi có thể trích xuất biểu hiện này. Điều này có vẻ như một chút của một hack, tuy nhiên. Có cách tiếp cận tốt hơn không?

Trả lời

10

Nói chung, việc sử dụng .args là cách chính xác để truy cập các phần của biểu thức.

Trong trường hợp này, tuy nhiên, có một tùy chọn để integrate mà sẽ cho phép bạn bỏ qua điều kiện hội tụ

In [39]: integrate(test, (x, 0, oo), conds='none') 
Out[39]: 
    ___ 
╲╱ π ⋅z 
─────── 
    2 

Ngoài ra, nếu bạn thiết lập một cách rõ ràng các giả định rằng bạn biết trên các biến của bạn, thường là điều kiện hội tụ quyết tâm bản thân nó (nó dường như không xảy ra trong trường hợp này cho bất kỳ giả định đơn giản nào trên z, mặc dù). Ví dụ: nếu bạn biết rằng z là có thật, hãy sử dụng z = Symbol('z', real=True). Thường giả định rằng mọi thứ là có thật, hoặc thậm chí tốt hơn, khi bạn biết nó sẽ giúp ích rất nhiều trong việc đảm bảo sự hội tụ.

Các vấn đề liên quan