2017-08-09 4 views
0

ベクトルフィールドの相違をsympyに入れることは可能です。たとえば、次のようにテンソルフィールドのsympyでの発散

>>> from sympy.physics.vector import ReferenceFrame 
>>> from sympy.physics.vector import divergence 
>>> R = ReferenceFrame('R') 
>>> vfield = 3*R[0]**2*R.x+2*R[1]*R.y 
>>> divergence(vfield,R) 
6*R_x + 2 

はしかし、それはテンソル場の発散を取ることができ、それ?私はドキュメントでこれを扱う何も見たことがありません。

答えて

0

sympy.physics.vectorsympy.vectorに書き換えられています。

私はベクトルモジュールが本当にテンソル場をサポートしていませんが、あなたはN次元の配列を使用することができ、たとえばことが表示されます:

In [6]: ta = Array([[Function("f_{0}{1}".format(j,i))(x,y,z) for i in range(1,4) 
    ...: ] for j in range(1,4)]) 

In [7]: ta 
Out[7]: 
⎡f₁₁(x, y, z) f₁₂(x, y, z) f₁₃(x, y, z)⎤ 
⎢          ⎥ 
⎢f₂₁(x, y, z) f₂₂(x, y, z) f₂₃(x, y, z)⎥ 
⎢          ⎥ 
⎣f₃₁(x, y, z) f₃₂(x, y, z) f₃₃(x, y, z)⎦ 

In [9]: tensorcontraction(derive_by_array(ta, (x, y, z)), (0, 1)) 
Out[9]: 
⎡∂     ∂     ∂     ∂     ∂ 
⎢──(f₁₁(x, y, z)) + ──(f₂₁(x, y, z)) + ──(f₃₁(x, y, z)) ──(f₁₂(x, y, z)) + ── 
⎣∂x     ∂y     ∂z    ∂x     ∂y 

       ∂     ∂     ∂     ∂  
(f₂₂(x, y, z)) + ──(f₃₂(x, y, z)) ──(f₁₃(x, y, z)) + ──(f₂₃(x, y, z)) + ──(f₃ 
       ∂z    ∂x     ∂y     ∂z 

      ⎤ 
₃(x, y, z))⎥ 
      ⎦ 

点6でランク2の配列が点9で、作成されます同じ配列は別の配列(x, y, z)によって導出され、ランク3の配列(形状は3x3x3)を作成します。この時点でtensorcontractionは第1軸と第2軸を縮小し、結果をランク1の配列(3要素)に縮小します。