9

В sympy У меня есть интеграл, который возвращает объект Piecewise, например.Работа с кусочными уравнениями, возвращаемыми интегралом sympy

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               
⎩  

Я хотел бы извлечь только первую ветвь этой кусочно уравнения, другими словами, я хотел бы быть в состоянии сделать что-то вроде itest.parts(0) извлечь просто sqrt(pi)*z/2. Я не могу найти способ сделать это, но, возможно, я использую неправильные условия поиска в документации. Есть идеи?

Редактировать

Покопавшись немного, мне удалось найти, что если я itest.args[0][0] я могу извлечь это выражение. Однако это похоже на хак. Есть ли лучший подход?

ответ

10

В общем случае использование .args - это правильный способ доступа к частям выражения.

В этом случае, однако, есть возможность integrate, что позволит вам игнорировать условие сходимости

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

Кроме того, если вы явно установить предположение, что вы знаете о своем переменных, часто условии сходимости решительности хотя, по-видимому, это не происходит при любых простых предположениях на z). Например, если вы знали, что z был реальным, используйте z = Symbol('z', real=True). Обычно, полагая, что вещи реальны или даже лучше позитивны, когда вы знаете, это поможет в обеспечении конвергенции.

 Смежные вопросы

  • Нет связанных вопросов^_^