2017-10-28 61 views
1

我正在尋找一種方法在SymPy中創建一個函數(u,v) - >(x,y,z),將兩個元素轉換爲三個,然後從結果向量中獲取一個導數。它看起來像這樣的賢者:如何在sympy中創建矢量函數?

u = var('u') 
v = var('v') 
x = (2 + sin(u) *sin(v)) *sin(3*v/2) 
y = cos(u) *sin(v) + 2 *v/pi - 2 
z = (2 + sin(u) *sin(v)) *cos(3*v/2) 
r(u, v) = [x, y, z] 
e1 = derivative(r, u) 

回答

2

SymPy具有向在各種座標系做演算定向的Vector module。但是,如果你不需要做座標變換,它是更直接地表示向量作爲一列矩陣Matrix([x, y, z]),像這樣:

from sympy import * 
var('u v') 
x = (2 + sin(u) *sin(v)) *sin(3*v/2) 
y = cos(u) *sin(v) + 2 *v/pi - 2 
z = (2 + sin(u) *sin(v)) *cos(3*v/2) 
    # everything so far was as in your code 
r = Matrix([x, y, z]) 
e1 = r.diff(u) 
pprint(e1) # "pretty" print 

輸出(假定沒有乳膠處理):

⎡   ⎛3⋅v⎞  ⎤ 
⎢sin(v)⋅sin⎜───⎟⋅cos(u)⎥ 
⎢   ⎝ 2 ⎠  ⎥ 
⎢      ⎥ 
⎢ -sin(u)⋅sin(v) ⎥ 
⎢      ⎥ 
⎢     ⎛3⋅v⎞⎥ 
⎢sin(v)⋅cos(u)⋅cos⎜───⎟⎥ 
⎣     ⎝ 2 ⎠⎦