【问题标题】:Python - Sympy: how to compute lie derivativePython - Sympy:如何计算谎言导数
【发布时间】:2016-03-23 13:14:15
【问题描述】:

请考虑以下脚本;我们如何使用 python 计算 h 关于 f 的李导数?

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) # ???

【问题讨论】:

    标签: python sympy


    【解决方案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()
    

    然后将导出的向量定义为分量和基向量的总和:

    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 空间你的项目。为简单起见,我使用同一流形上的投影来避免定义新的流形。

    注意:您可能需要最新版本的 SymPy(1.0 版),之前有一个错误阻碍了 diffgeom 对象的简化。

    【讨论】:

    • 但是二阶谎言导数呢?以下设置正确还是有更有效的方法? >>> expr = (x + u)*e_x + (y + v)*e_y + L*e_L >>> 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)
    • 如果结果是正确的,我想这就是要走的路。
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多