Работа с кусочными уравнениями, возвращаемыми Simpy integrate
В Симпи у меня есть интеграл, который возвращает кусочный объект, например
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]
Я могу извлечь это выражение. Однако это похоже на взлом. Есть ли лучший подход?
1 ответ
В общем, используя .args
правильный способ доступа к частям выражения.
В этом случае, однако, есть возможность integrate
это позволит вам игнорировать условия сходимости
In [39]: integrate(test, (x, 0, oo), conds='none')
Out[39]:
___
╲╱ π ⋅z
───────
2
Кроме того, если вы явно устанавливаете для своих переменных предположения, которые вы знаете, часто условия сходимости разрешаются сами собой (в данном случае, похоже, не происходит никаких простых предположений о z
, хоть). Например, если вы знали, что z
было реально, использовать z = Symbol('z', real=True)
, Обычно предполагая, что все реально, или даже лучше, если вы знаете, это очень поможет в сближении.