Sympy diffgeom:指标依赖于功能

Sympy diffgeom: Metric dependent on function

我在使用 sympy 的 diffgeom 包定义指标时遇到问题,其中指标取决于函数 f(x,y)

我收到错误 ValueError: Can't calculate 1st derivative wrt x.

import sympy as sym
from sympy.diffgeom import Manifold, Patch, CoordSystem

m = Manifold("M",2)
patch = Patch("P",m)
cartesian = CoordSystem("cartesian", patch, ["x", "y"])
x, y = cartesian.coord_functions()
f = sym.Function('f')
xi = sym.Symbol('xi')

g = sym.Matrix([
    [ xi + sym.diff(f,x)**2         , sym.diff(f,x) * sym.diff(f,y) ],
    [ sym.diff(f,x) * sym.diff(f,y) , xi + sym.diff(f,y)**2 ]   
])

我觉得是因为 xy 的定义方式,但我一直没弄清楚。

确实,不支持对这些 x 和 y(class sympy.diffgeom.diffgeom.BaseScalarField 的对象)进行微分。您可以通过访问内部 属性 _diff_wrt 来查看这一点,它指示某物是否可以作为区分的对象。

>>> x._diff_wrt
False

这些导数(相对于标量场)在这里有数学意义吗?我不确定。

另一个问题是 SymPy 不区分函数,所以

f = Function('f')
diff(f, x) 

总是错误。 SymPy 可以区分表达式,例如 diff(f(x, y), x)

旁白:diff 可以用作表达式的方法,在您的情况下会导致代码更短,例如 f(x, y).diff(x).