我正在尝试使用SymPy进行一些基本练习。我想象征一个关于极坐标中半径参数的直角坐标函数的二阶导数。
我想要一个很好的链式规则符号表达式,它可以计算出它可以做什么,并留下未经评估的无法进一步简化的内容。
from sympy import *
init_session()
x, y, r, t = symbols('x y r t') # r (radius), t (angle theta)
f, g = symbols('f g', cls=Function)
g = f(x,y)
x = r * cos(t)
y = r* sin(t)
Derivative(g,r, 2).doit()
此代码产生0
。有没有办法获得答案的符号表示,而不是0?
答案 0 :(得分:2)
简答: 你的命令不正常。
答案很长:
x, y, r, t = symbols('x y r t') # r (radius), t (angle theta)
f, g = symbols('f g', cls=Function)
g = f(x,y)
现在x,y
是符号,f
是一个函数,g
是一个应用函数,即符号x,y
应用于f
{{1} }。
f(x,y)
现在,您将x = r * cos(t)
y = r* sin(t)
和x
重新定义为y
和r
的表达式。这丝毫不影响t
!
g
现在你派生Derivative(g,r, 2).doit()
wrt g
。由于r
仍然是通过初始符号g
定义的,因此它不依赖于x,y
,因此导数为零。
要达到你想要的效果,请使用:
r
我还删除了所有不必要的符号定义。