つれづれなる備忘録

日々の発見をあるがままに綴る

SymPyの使い方16 ~ ベクトルモジュール4

 今回はSymPyのベクトル演算を専門に扱うベクトルモジュールで前回紹介したベクトル積分の応用について紹介する。

1. ストークスの定理

 ストークスの定理電磁気学アンペールの法則の変形などに用いられる定理で

 \displaystyle \oint_{\Gamma} {\bf{F}} \cdot d{\bf{\Gamma}} = \iint_{S} \nabla \times {\bf{F}} \cdot d{\bf{S}}

これをSymPyのベクトルモジュールの機能で計算する。ベクトル積分の計算に必要な関数を以下のようにロードする。

from sympy import sin, cos, pi
from sympy.vector import CoordSys3D, ParametricRegion, vector_integrate,curl
from sympy.abc import r, theta, phi
C = CoordSys3D('C')

まず適当なベクトル関数を定義する。

F=C.y*C.i+C.z*C.k+C.x*C.k

ストークスの定理の左辺の線積分の計算は、ParametricRegionを用いて線積分の領域を定義してからvector_integrateを用いる。

curve=ParametricRegion((cos(theta),sin(theta)),(theta,0,pi/2))
vector_integrate(F,curve)
>-pi/4

右辺の面積分についてもParametricRegionを用いて面積分の領域を定義してからvector_integrateを用いる。

surface=ParametricRegion((r*cos(theta),r*sin(theta)),(r,0,1),(theta,0,pi/2))
vector_integrate(curl(F),surface)
>-pi/4

左辺と右辺の値が等しく、ストークスの定理が成り立っていることが確認できる。

2. 発散定理

 発散定理(ガウス定理とも呼ばれる)も電磁気学によく用いれれる定理で、

\displaystyle \iint_{S} {\bf{F}}\cdot {\bf{n}} dS = \iiint_{V} {\rm{div}}  {\bf{F}} dV

が成立する。

divergenceを扱うためベクトルモジュールから以下のようにロードする。

from sympy.vector import divergence

次に適当なベクトル関数を定義する。

 field = C.x**3*C.i + C.y**3*C.j + C.z**3*C.k

今回は体積分として半径4の球を想定する。面積分の領域sphere、体積分の領域solidsphereをParametricRegionを用いて以下のように定義する。

sphere = ParametricRegion((4*sin(phi)*cos(theta),4*sin(phi)*sin(theta), 4*cos(phi)),(phi, 0, pi), (theta, 0, 2*pi))
solidsphere = ParametricRegion((r*sin(phi)*cos(theta),r*sin(phi)*sin(theta), r*cos(phi)),(r, 0, 4),(phi, 0, pi), (theta, 0, 2*pi))

発散定理左辺の面積分

vector_integrate(field,sphere)
>12288*pi/5

右辺の体積分

vector_integrate(divergence(field),solidsphere)
>12288*pi/5

左辺と右辺の値が等しく、発散定理が成り立っていることが確認できる。

3. まとめ

 今回はベクトルモジュールのベクトル積分により、ストークスの定理と発散定理を確認する方法について紹介した。