読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(13) 留数定理を使った複素積分

複数の極を持つがそれ以外では正則な函数の単純閉曲線上の積分は留数定理を使って計算することができます。
留数定理を活用した複素積分の計算をMaximaでやってみましょう。
例は、を以下の経路で積分した場合です。


外周の積分は極限では0になりますから、実軸上をマイナス無限大からプラス無限大までの積分と同じです。留数定理を使う前に、Maximaが解いてくれるか見ておきましょう。

assume(a > 0)$
integrate(%e^(%i*a*z)/(1 + z^2), z, -inf, inf);

Maximaは留数定理を知っているようです。


極の留数を計算し、寄与する留数の和を計算することで、積分値を計算することができます。

/* 4.2.20m */
n(z) := exp(%i*a*z)$
d(z) := 1 + z^2$
f(z) := n(z)/d(z)$
encompassed(z) := imagpart(z) > 0$
poleList : solve(d(z) = 0, z)$
zero : makelist(at(z, poleList[j]), j, 1, length(poleList))$
residueList : makelist(limit((z - zero[j])*f(z), z, zero[j]), j, 1, length(zero))$
result : 2*%pi*%i*sum(if encompassed(ev(z, poleList[j])) then residueList[j] else 0, j, 1, length(residueList))$

使用した機能


外周の積分は極限では0になりますから、以下の積分を求めたことになります。