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 ]
])
我觉得是因为 x
和 y
的定义方式,但我一直没弄清楚。
确实,不支持对这些 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)
.
我在使用 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 ]
])
我觉得是因为 x
和 y
的定义方式,但我一直没弄清楚。
确实,不支持对这些 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)
.