条件积分的简化

2024-10-02 10:24:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在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_argument和{}。一个与下列物体相同的物体:

^{pr2}$

必须小于pi/2才能得到我想要的解决方案。有没有一个很好的方法来解决这个问题-在Mathematica中,可以使用AssumingRefine或{},但我对sympy不太熟悉,不知道该怎么做。在


Tags: 方法truegaussiansimplifysymbolargumentreal物体
2条回答

s设置为正值就足够了。实际上,我认为答案应该是Abs(s),因为对于real ssqrt(s**2) = Abs(s)(不过,我对此并不肯定)。在

在SymPy的gitmaster分支中,可以使用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'),或者{}(这不需要git版本来工作)。在

^{pr2}$

你也可以把它分片取出

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

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

答案涉及到Symbol的平方根,它绑定到s。在

声明s为正以使其正确简化。签署人:

s = Symbol('sigma', real=True, positive=True)

相关问题 更多 >

    热门问题