我正在尝试使用 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?
最佳答案
简答: 你的命令有问题。
长答案:
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(x,y)
应用于 f
。
x = r * cos(t)
y = r* sin(t)
现在您将x
和y
重新定义为r
和t
的表达式。这对 g
没有丝毫影响!
Derivative(g,r, 2).doit()
现在你从 g
派生 r
。由于 g
仍然通过初始符号 x,y
定义,它不依赖于 r
,因此导数为零。
要实现您想要的效果,请使用:
from sympy import *
r, t = symbols('r t') # r (radius), t (angle theta)
f = symbols('f', cls=Function)
x = r* cos(t)
y = r* sin(t)
g = f(x,y)
Derivative(g,r, 2).doit()
我还删除了所有不必要的 Symbol 定义。
关于python - sympy 中的链式法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786224/