今回はSymPyのベクトル演算を専門に扱うベクトルモジュールの使い方について紹介する。
1. ベクトルモジュール
SymPyでベクトルを扱う方法としては、以前に行列で定義する方法について紹介した。
今回はベクトルモジュールにより直交座標系の単位ベクトルをシンボリックに定義する。ベクトルモジュールのCoordSys3D
を以下のようにimportしてNを直交座標系の単位ベクトル系とする。
type(N)
とすることで直交座標系で定義されていることが確認できる。
from sympy.vector import CoordSys3D N = CoordSys3D('N') type(N) >sympy.vector.coordsysrect.CoordSys3D
各成分にアクセスするにはN.i
,N.j
,N.k
とする。例えばN.i
は単位ベクトルの要素であることが確認できる。
type(N.i)
>sympy.vector.vector.BaseVector
2. 単位ベクトルを用いたベクトル定義と演算
ベクトルを定義するには、上記で定義した単位ベクトルをスカラー倍および加減算で定義する。
v1=2*N.i+N.j+3*N.k v2=-1*N.i+5*N.j-2*N.k
定義したベクトルは以下のように演算することができる。
v1+v2
>N.i + 6*N.j + N.k
v1.dot(v2) >-3 v1.cross(v2) >(-17)*N.i + N.j + 11*N.k
3. ベクトル演算の簡略化
ベクトルの演算時において係数の数式の簡略化はSymPyの機能を用いて実行できる。
係数の因数分解は.factor()
を用いる。
from sympy import symbols a,b,c=symbols('a b c') v=(a*b+a*c+b**2+b*c)*N.i+N.j v.factor() >((a + b)*(b + c))*N.i + N.j
三角関数の簡略化はtrigsimp(v)
を用いる。
from sympy import sin, cos, trigsimp, diff v3 = (sin(a)**2 + cos(a)**2)*N.i - (2*cos(b)**2 - 1)*N.k trigsimp(v3) >N.i + (-cos(2*b))*N.k
または簡略化を行う.simplify()
でもよい。
v3.simplify()
>>N.i + (-cos(2*b))*N.k
微分はdiff(v,x)
diff(v3,b)
>(4*sin(b)*cos(b))*N.k
またはDerivative(v,x)
を用いる。Derivative
は演算を実行するために.doit()
を用いる。
from sympy import Derivative Derivative(v3,b) >Derivative((sin(a)**2 + cos(a)**2)*N.i + (-2*cos(b)**2 + 1)*N.k, b) Derivative(v3,b).doit() >(4*sin(b)*cos(b))*N.k
積分はIntegral(v,x)
を用いるがDerivative
と同様に演算を実行するために.doit()
を用いる。
from sympy import Integral v4 = a*N.i + sin(a)*N.j -a**2* N.k Integral(v4,a) >(Integral(a, a))*N.i + (Integral(sin(a), a))*N.j + (Integral(-a**2, a))*N.k Integral(v4,a).doit() >a**2/2*N.i + (-cos(a))*N.j + (-a**3/3)*N.k
3. まとめ
今回はSymPyのベクトルモジュールを用いたベクトルの定義および基本的な演算に関して紹介した。