Maxima でできる積分が SymPy でできないこともある

静電場を求める際に使った積分を SymPy で確認すると…

In [1]:
from sympy import *
from sympy.abc import *
from sympy import I, pi, E
In [2]:
pip show sympy
Name: sympy
Version: 1.10.1
Summary: Computer algebra system (CAS) in Python
Home-page: https://sympy.org
Author: SymPy development team
Author-email: sympy@googlegroups.com
License: BSD
Location: /usr/local/lib/python3.8/dist-packages
Requires: mpmath
Required-by: einsteinpy
Note: you may need to restart the kernel to use updated packages.

1

$$\int_{-\infty}^{\infty}
\frac{1}{\left(x^2 + y^2 + (z-z’)^2\right)^{3/2}} dz’ =  \frac{2}{x^2 + y^2}$$

の確認。

In [3]:
# from sympy.abc import * 済みなので,残りの変数のみを宣言

z1 = Symbol('z1')
In [4]:
integrate(1/(sqrt(x**2 + y**2 + (z-z1)**2)**3), (z1, -oo, oo))
Out[4]:
$\displaystyle \int\limits_{-\infty}^{\infty} \frac{1}{\left(x^{2} + y^{2} + \left(z – z_{1}\right)^{2}\right)^{\frac{3}{2}}}\, dz_{1}$

SymPy は計算できない。

2

$$\int_{-\infty}^{\infty}
\frac{z – z’}{\left(x^2 + y^2 + (z-z’)^2\right)^{3/2}} dz’ = \int_{-\infty}^{\infty}
\frac{Z}{\left(x^2 + y^2 + Z^2\right)^{3/2}} dZ =0$$

の確認。

In [5]:
integrate((z-z1)/(sqrt(x**2 + y**2 + (z-z1)**2)**3), (z1, -oo, oo))
Out[5]:
$\displaystyle 0$

これは SymPy でも計算できる。

3

$$\int_{-\infty}^{\infty} \int_{-\infty}^{\infty}\frac{x }{\left(x^2 + (y-y’)^2 + (z-z’)^2\right)^{3/2}}dy’ dz’ = 2 \pi \frac{x}{|x|}$$

の確認。

In [6]:
y1 = Symbol('y1')
In [7]:
integrate(
    integrate(x/(sqrt(x**2 + (y-y1)**2 + (z-z1)**2)**3), (y1, -oo, oo)), 
    (z1, -oo, oo))
Out[7]:
$\displaystyle 2 x \int\limits_{-\infty}^{\infty} \frac{1}{\operatorname{polar\_lift}{\left(x^{2} + \operatorname{polar\_lift}^{2}{\left(z – z_{1} \right)} \right)}}\, dz_{1}$

SymPy は polar_lift などという怪しげな文句を言いながら計算してくれない。

静磁場を求める際に使った積分を SymPy で確認すると…

In [1]:
from sympy import *
from sympy.abc import *
from sympy import I, pi, E
In [2]:
pip show sympy
Name: sympy
Version: 1.10.1
Summary: Computer algebra system (CAS) in Python
Home-page: https://sympy.org
Author: SymPy development team
Author-email: sympy@googlegroups.com
License: BSD
Location: /usr/local/lib/python3.8/dist-packages
Requires: mpmath
Required-by: einsteinpy
Note: you may need to restart the kernel to use updated packages.

1

$$\int_{-\infty}^{\infty}
\frac{1}{\left(x^2 + y^2 + (z-z’)^2\right)^{3/2}} dz’ =  \frac{2}{x^2 + y^2}$$

の確認。(電場を求めるときにも出ました。)

In [3]:
# from sympy.abc import * 済みなので,残りの変数のみを宣言

z1 = Symbol('z1')
In [4]:
integrate(1/(sqrt(x**2 + y**2 + (z-z1)**2)**3), (z1, -oo, oo))
Out[4]:
$\displaystyle \int\limits_{-\infty}^{\infty} \frac{1}{\left(x^{2} + y^{2} + \left(z – z_{1}\right)^{2}\right)^{\frac{3}{2}}}\, dz_{1}$

SymPy は計算できない。

2

$$\int_{-\infty}^{\infty}
\frac{z – z’}{\left((x-x’)^2 + (y-y’)^2 + (z-z’)^2\right)^{3/2}} dz’ =0$$

の確認。

In [5]:
x1, y1 = symbols('x1 y1')
In [6]:
integrate((z-z1)/(sqrt((x-x1)**2 + (y-y1)**2 + (z-z1)**2)**3), (z1, -oo, oo))
Out[6]:
$\displaystyle 0$

これは SymPy でも計算できる。

3

\begin{eqnarray}
\int_0^{2\pi}  \,d\phi’  \frac{ a^2  – a  y\sin\phi’ – a x\cos\phi’  }{x^2 + y^2 + a^2 – 2 a x \cos\phi’ – 2 a y \sin\phi’ } && \\
= \left\{
\begin{array}{ll}
2\pi  & (a > \sqrt{x^2 + y^2})\\
0 & (a < \sqrt{x^2 + y^2})
\end{array}
\right.
\end{eqnarray}

の確認。

上記のままだと固まるので,$y=0$ の場合にして解くと…

In [7]:
phi1=Symbol("phi1")
In [8]:
Integral((a**2 - a*x*cos(phi1))
          /(x**2 + a**2 - 2*a*x*cos(phi1)), 
         (phi1, 0, 2*pi))
Out[8]:
$\displaystyle \int\limits_{0}^{2 \pi} \frac{a^{2} – a x \cos{\left(\phi_{1} \right)}}{a^{2} – 2 a x \cos{\left(\phi_{1} \right)} + x^{2}}\, d\phi_{1}$
In [9]:
_.doit()
Out[9]:
$\displaystyle \pi$

SymPy は,上記のように間違った結果を出す。