gpt4 book ai didi

python-3.x - 我应该如何处理 sympy 以获得积分的 'normal' 结果?

转载 作者:行者123 更新时间:2023-12-04 16:04:47 25 4
gpt4 key购买 nike

我的练习是将一些功能与 sympy 集成。第一个积分是(我打算把它加到图片上,因为我这里不能用latex,但你也可以在代码中看到):
enter image description here

enter image description here
a 是实常数。

这是我的代码:

%pylab inline
from sympy import *
init_printing()
v, a = symbols('v, a', real=True, nonzero=True)
f = sqrt(2/pi)*(v**2*exp((-v**2)/(2*a**2)))/(a**3)
print(integrate(v*f, (v, 0, oo)))

(注意:我只使用打印来获得这个可复制的结果)
但是结果真的很丑:
Piecewise((2*sqrt(2)*a/sqrt(pi), Abs(periodic_argument(polar_lift(a)**(-2), oo)) < pi/2), (Integral(sqrt(2)*v**3*exp(-v**2/(2*a**2))/(sqrt(pi)*a**3), (v, 0, oo)), True))

但是随着修改
v, a = symbols('v, a', positive=True)

或者
v, a = symbols('v, a', negative=True)

结果是
2*sqrt(2)*a/sqrt(pi)

但据我所知,唯一既不为负也不为正的实数是零——这应该用“非零=真”部分排除。

问:我可以用我的第一个代码做什么来获得“不错”的结果?

最佳答案

在当前的开发版本中,输出不那么难看:

Piecewise((2*sqrt(2)*a/sqrt(pi), pi/2 > 2*Abs(arg(a))), (Integral(sqrt(2)*v**3*exp(-v**2/(2*a**2))/(sqrt(pi)*a**3), (v, 0, oo)), True))

不过,仍有改进的余地。我建议在 issue tracker 提出问题.

解决方法

Piecewise 的原因是如果条件 pi/2 > 2*Abs(arg(a)),SymPy 不确定积分是否收敛。不成立。由于您知道它确实在您的上下文中收敛,您可以通过设置 conds="none" 告诉 SymPy 不要理会收敛条件。 :
>>> integrate(v*f, (v, 0, oo), conds="none") 
2*sqrt(2)*a/sqrt(pi)

或者,使用假设:在 a 上设置“积极”假设足够。您可以通过临时交换 a 来为积分步骤执行此操作。带有积极的符号。
>>> apos = symbols('apos', positive=True)
>>> integrate(v*f.subs(a, apos), (v, 0, oo)).subs(apos, a)
2*sqrt(2)*a/sqrt(pi)

这允许 a在更大的计算环境中保持原样。

解释

这是对为什么假设集(实数和非零)的影响小于(正)或(负)影响的非正式解释。
  • 如果a可以做某事已知是正数,它会产生很好的输出。
  • 如果 a 还可以做另一件事已知为负数,它会产生很好的输出。

  • 鉴于 a是实数且非零,SymPy 问:我可以做第一件事吗?不,因为不能保证 a是积极的。然后它问:我可以做第二件事吗?不,因为不能保证 a是否定的。所以,两者都没有完成。

    The core issue is that there are limitations to using Python logic to do symbolic logic. In Python logic, everything must be evaluated down to a single truth value. In symbolic logic, expressions may have unknown truth values. Another example of this is the law of the excluded middle. Python does not know that "stuff or not stuff" is always True without first evaluating "stuff". Symbolic logic can know this, even if the truth value of "stuff" is unknown. https://github.com/sympy/sympy/wiki/Assumptions-history

    关于python-3.x - 我应该如何处理 sympy 以获得积分的 'normal' 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245054/

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