gpt4 book ai didi

python - 简化 SymPy 中的条件积分

转载 作者:太空狗 更新时间:2023-10-30 02:12:20 24 4
gpt4 key购买 nike

在 SymPy 中,如果我通过以下方式整合一般高斯:

x = Symbol("x", real=True)
y = Symbol("y", real=True)
s = Symbol("s", real=True)

gaussian = exp(-((x-y)**2)/(2*(s**2)))
nfactor = simplify(integrate(gaussian, (x,-oo,oo)))

我得到 nfactor 作为 Piecewise 依赖于 periodic_argumentpolar_lift。与以下人员制作的相同的对象:

Abs(periodic_argument(polar_lift(s)**(-2), oo))
对于我想要的解决方案,

必须小于 pi/2。有没有一种很好的方法来只满足这个条件——在 Mathematica 中可能会使用 AssumingRefineSimplify,但我是 sympy 的新手我不知道该怎么办。

最佳答案

s 设置为正数应该就足够了。真的,我认为答案应该根据 Abs(s),因为对于真正的 ssqrt(s**2) = Abs(s) (不过我对此并不肯定)。

在 SymPy 的 git master 分支中,你可以使用 refine 来手动假设你想要的确切条件

In [6]: refine(nfactor, Q.is_true(Abs(periodic_argument(1/polar_lift(s)**2, oo)) <= pi/2))
Out[6]:
___ ___
╲╱ 2 ⋅╲╱ π ⋅s

另一种方式,如果你知道你的积分满足条件,但你不能让它们简化(因为不幸的是,SymPy 中这种条件的简化很差),你可以只使用 integrate(conds ='none'),或 integrate(conds='separate')(这不需要 git 版本即可工作。

In [8]: integrate(gaussian, (x,-oo,oo), conds='none')
Out[8]:
___ ___
╲╱ 2 ⋅╲╱ π ⋅s

In [9]: integrate(gaussian, (x,-oo,oo), conds='separate')
Out[9]:
⎛ ___ ___ │ ⎛ 1 ⎞│ π⎞
⎜╲╱ 2 ⋅╲╱ π ⋅s, │periodic_argument⎜──────────────, ∞⎟│ ≤ ─⎟
⎜ │ ⎜ 2 ⎟│ 2⎟
⎝ │ ⎝polar_lift (s) ⎠│ ⎠

您也可以直接将其从 Piecewise 中拉出

In [10]: nfactor.args[0][0]
Out[10]:
___ ___
╲╱ 2 ⋅╲╱ π ⋅s

当然,首选方法是使用refine,但不幸的是,使用新假设系统的东西(任何使用Q的东西)仍在开发中,所以可能还不能工作,或者只能在 SymPy 开发版本中工作。

关于python - 简化 SymPy 中的条件积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com