当我使用函数f2时,积分被求解(相当快),但是包含一些浮点常量。函数f1不使用浮点指数,但无法计算积分。它宁愿重新显示要求解的积分(很长时间后)。

因此,作为SymPy的新用户,我想知道1)是否在f1中使用了错误的命令? 2)是否可以使SymPy的执行速度更快(因为它现在与Maple的速度没有真正的比较)。

from sympy import *
from IPython.display import display

init_printing(use_unicode=False, wrap_line=False, no_global=True)

def f1():
    x, y = symbols('x y')
    w, h = symbols('w h', real=True, nonzero=True, positive=True)
    result = Integral((1/sqrt(((y-x)**2 + h**2)**3)), (x,0,w), (y,0,w))
    display(result)
    result = integrate((1/sqrt(((y-x)**2 + h**2)**3)), (x,0,w), (y,0,w))
    display(result)

def f2():
    x, y = symbols('x y')
    w, h = symbols('w h', real=True, nonzero=True, positive=True)
    result = Integral(1/(((y-x)**2 + h**2)**1.5), (x,0,w), (y,0,w))
    display(result)
    result = integrate(1/(((y-x)**2 + h**2)**1.5), (x,0,w), (y,0,w))
    display(result)


Sympy版本

>>> sympy.__version__
>>> '0.7.6.1'

最佳答案

您编写的两个积分并不完全相同。你可以做

In [22]: integrate((1/sqrt(((y-x)**2 + h**2))**3), (x,0,w), (y,0,w))
Out[22]:
          ________
         ╱      2
        ╱      w
  2⋅   ╱   1 + ──
      ╱         2
    ╲╱         h     2
- ──────────────── + ─
         h           h


注意**3的位置不同。原因是

In [25]: sqrt(x**3)
Out[25]:
   ____
  ╱  3
╲╱  x

In [26]: sqrt(x)**3
Out[26]:
 3/2
x


对于一般x而言,两者并不相等。对于您的情况,它们实际上是相等的,因为根中的表达式为正,但是SymPy未能注意到这一点。

关于python - SymPy无法解决重写的积分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34064092/

10-15 10:22