複素数の積分¶

複素数関数の積分は複素平面上での積分となるため、線積分として計算します。

Sympy 上で線積分を計算する場合、媒介変数で実部・虚部を表し計算します。

次の積分は、x 軸上の線分[0,1]上の複素数関数 $f(z)=z$ の線積分です。

In [ ]:
from sympy import symbols, integrate, I, diff

x, y, t = symbols("x y t", real=True)

x = t
y = 0
z = x + I * y
dzdt = diff(z, t)
integrate(z, (t, 0, 1))
Out[ ]:
$\displaystyle \frac{1}{2}$

同じ関数を閉曲線上で計算してみましょう。

In [ ]:
# x=1 上の線積分
x = 1
y = t
z = x + I * y
dzdt = diff(z, t)
integrate(z * dzdt, (t, 0, 1))
Out[ ]:
$\displaystyle - \frac{1}{2} + i$
In [ ]:
# y=1 上での線積分
x = t
y = 1
z = x + I * y
dzdt = diff(z, t)
integrate(z * dzdt, (t, 1, 0))
Out[ ]:
$\displaystyle - \frac{1}{2} - i$
In [ ]:
# x=0 上での線積分
x = 0
y = t
z = x + I * y
dzdt = diff(z, t)
integrate(z * dzdt, (t, 1, 0))
Out[ ]:
$\displaystyle \frac{1}{2}$

この複素関数は領域内で正則なので、コーシーの積分定理より閉曲線上の積分を足し合わせると0となります。

正則でない場合も計算してみましょう。以下の関数を (1,0)を中心とする半径1の円上で積分します。 $$ f(z)={1\over z-1} $$ 円は$z=1+e^{i\theta}$で表せるので、${dz\over d\theta}=i e^{i\theta}$から、 $$ \begin{align*} \oint_C {1\over z-1} dz&=\int_0^{2\pi} {1\over z-1} i e^{i\theta} d\theta\\ &=\int_0^{2\pi} {1\over e^{i\theta}} i e^{i\theta} d\theta\\ &=2i\pi \end{align*} $$

In [ ]:
from sympy import exp, pi

r,theta=symbols("r theta")
z=1+r*exp(theta*I)
dzdtheta=diff(z,theta)
f=1/(z-1)
integrate(f*dzdtheta, (theta, 0, 2*pi))
Out[ ]:
$\displaystyle 2 i \pi$

この結果とコーシーの積分公式を使って $f(z)=1$ が計算できます。

コーシーの積分公式 $$ f(z)={1\over 2\pi i}\oint_C {f(\zeta)\over \zeta-z}d\zeta $$

ですので上記の計算結果 $$ \oint_C {1\over z-1}dz = 2\pi i $$ から $$ f(1)={2\pi i\over 2\pi i}=1 $$ が計算できます。

In [ ]:
a = 1
z = a + r * exp(theta * I)
dzdtheta = diff(z, theta)
f = 1 / (z - a)
integrate(f * dzdtheta, (theta, 0, 2 * pi)) / (2 * pi * I)
Out[ ]:
$\displaystyle 1$

同じ形式で $f(-1)$ も計算できます。

In [ ]:
a = -1
z = a + r * exp(theta * I)
dzdtheta = diff(z, theta)
f = 1 / (z - a)
integrate(f * dzdtheta, (theta, 0, 2 * pi)) / (2 * pi * I)
Out[ ]:
$\displaystyle 1$