今回はSymPyのベクトル演算を専門に扱うベクトルモジュールで前回紹介したベクトル積分の応用について紹介する。
1. ストークスの定理
ストークスの定理は電磁気学のアンペールの法則の変形などに用いられる定理で
これを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. 発散定理
発散定理(ガウス定理とも呼ばれる)も電磁気学によく用いれれる定理で、
が成立する。
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
左辺と右辺の値が等しく、発散定理が成り立っていることが確認できる。