2016-03-23 3 views
2

以下のスクリプトを考慮してください。私たちがPythonを使ってfに関してf hの派生派生を計算する方法は?Python - Sympy:嘘の派生を計算する方法

import sympy as sym 

x, y, L, u , v = sym.symbols('x y L u v') 
X = sym.Matrix([[x],[y], [L], [u], [v]]) 

# f(x,y,L,u,v) : R^5-->R^3 
f = sym.Matrix([[ x + u], [ y + v ], [L]]) 

# h(x,y,L) : R^3-->R^1 
h = sym.Matrix([[ sym.sqrt(L**2 + (y - x)**2) ]]) 

# L1hf : first-order lie derivative of h wrt f 
L1hf = sym.diffgeom.LieDerivative(f,h) # ??? 

答えて

1

diffgeomから演算子を使用するときは、sympy.diffgeomで定義されたシンボルを使用する必要があります。

あなたのセットアップは、次のようになります。行列は、現在サポートされていません

In [1]: from sympy.diffgeom import * 

In [4]: M = Manifold("M", 5) 

In [5]: P = Patch("P", M) 

In [6]: coord = CoordSystem("coord", P, ["x", "y", "L", "u", "v"]) 

In [7]: x, y, L, u, v = coord.coord_functions() 

、あなたは基本ベクトル場の線形結合として、それらを表現する必要があります。

In [19]: e_x, e_y, e_L, e_u, e_v = coord.base_vectors() 

は、その後、あなたが導出ベクトルWRTを定義します成分と基底ベクトルの和として:

In [27]: expr = (x + u)*e_x + (y + v)*e_y + L*e_L 

In [28]: LieDerivative(expr, sqrt(L**2 + (y - x)**2)) 
Out[28]: 
                 2   
    (-x + y)⋅(x + u)  (-x + y)⋅(y + v)    L   
- ─────────────────── + ─────────────────── + ─────────────────── 
    ________________  ________________  ________________ 
    ╱   2 2  ╱   2 2  ╱   2 2 
    ╲╱ (-x + y) + L  ╲╱ (-x + y) + L  ╲╱ (-x + y) + L 

正確には、次元3の新しいマニフォールドを定義し、その上にパッチを、次にパッチ上の座標系を定義して、投影する空間のR^3を表す必要があります。簡単にするため、同じマニフォールドの投影を使用して、新しいマニュアルを定義しないようにしました。

注:あなたはおそらく以前diffgeomオブジェクトの簡素化を妨げバグがありました、SymPy(バージョン1.0)の最新バージョンが必要です。

+0

ありがとうございました。 – sci9

+0

しかし、2次導関数の導関数はどうでしょうか?次の設定が正しいか、より効果的な方法がありますか? >>> 'L1fh = LieDerivative(expr、sqrt(L ** 2 +(y - x)*) * 2)) >>> 'expr2 = L1fh.args [2] * e_x + L1fh.args [1] * e_y + L1fh.args [0] * e_L' >>>' L2fh = LieDerivative(expr2 、sqrt(L ** 2 +(y - x)** 2)) ' >>>' pprint(L2fh) ' – sci9

+0

もし結果が正しいなら、それはやり方だと思います。 –

関連する問題