今回はSymPyのベクトル演算を専門に扱うベクトルモジュールのうちベクトル積分について紹介する。
1. 積分領域の定義
ベクトル積分を実行するには、積分領域を定義する必要がある。SymPyではParametricRegion
、ImplicitRegion
およびGeometryモジュールを使用して領域を定義することができる。
ParametricRegion
、ImplicitRegion
は最新のSymPyを使用する必要があり、Google ColabのSymPyはVer 1.1.1なので一時的なアップデートであれば
!pip install -U sympy
とする。ParametricRegion
、ImplicitRegion
などをロードするには
from sympy.vector import CoordSys3D, ParametricRegion, ImplicitRegion, vector_integrate from sympy import sin, cos, exp, pi, sqrt, symbols from sympy.abc import r, x, y, z, theta, phi C = CoordSys3D('C')
半径2の円の領域を定義するためにParametricRegion((para1,para2),(変数,下限,上限))
では
param_circle = ParametricRegion((2*cos(theta), 2*sin(theta)), (theta, 0, 2*pi))
通常のXY座標を用いるImplicitRegion
では
implicit_circle = ImplicitRegion((x, y), x**2 + y**2 - 4)
2. 線積分の例
定義した領域に従って積分を実行するにはvector_integrate()
を使用する。以下のように1
を領域に沿って積分する場合は、領域の長さ、今回は半径2の円周を計算することになる。
ParametricRegion
とImplicitRegion
いずれも計算できるが、ImplicitRegion
の方が時間がかかる。
vector_integrate(1, param_circle) >4*pi vector_integrate(1, ImplicitRegion) >4*pi
3角形のような図形はパラメータ定義が難しいので、Geometryモジュールを用いて図形を定義する。 2辺が長さ1の直角2等辺三角形は
from sympy.geometry import Point, Polygon triangle = Polygon(Point(0, 0), (0, 1), (1,0))
積分方法は上と同様で
vector_integrate(1, triangle) >sqrt(2)+2
3. 面積分、体積積分の例
ParametricRegion
などの領域の定義内の変数により、面積分や体積積分も実行できる。例えば円の面積を計算するには変数rを加え、さらにrの変化域を0からシンボリックのaとすると
a=symbols('a') area_circle = ParametricRegion((r*cos(theta), r*sin(theta)), (theta, 0, 2*pi),(r,0,a)) vector_integrate(1, area_circle) >pi*a**2
ParametricRegion
のタプルの次元を増やせば2次元だけでなく3次元の積分にも適用できる。以下は半径1の球の表面積を計算する。
surfacesphere = ParametricRegion((sin(phi)*cos(theta),sin(phi)*sin(theta), cos(phi)),(phi, 0, pi), (theta, 0, 2*pi)) vector_integrate(1, surfacesphere)
さらに変数rを加えると体積積分になる。
solidsphere = ParametricRegion((r*sin(phi)*cos(theta),r*sin(phi)*sin(theta), r*cos(phi)),(phi, 0, pi), (theta, 0, 2*pi), (r, 0, 1)) vector_integrate(1, solidsphere) >4/3*pi
積分する関数を1の代わりにC.x
とすると直線に沿って積分していることが確認できる。
line = Polygon(Point(0, 0), (3, 0)) vector_integrate(C.x, line) >9/2