【问题标题】:Chain rule in sympy同情中的链式法则
【发布时间】:2016-01-14 09:45:24
【问题描述】:

我正在尝试使用 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?

【问题讨论】:

  • 那么问题是什么?

标签: python sympy calculus derivative


【解决方案1】:

简答: 你的命令有问题。

长答案:

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 应用于 ff(x,y)

x = r * cos(t)
y = r* sin(t)

现在您将xy 重新定义为rt 的表达式。这丝毫不影响g

Derivative(g,r, 2).doit()

现在你得到g wrt 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()

我还删除了所有不必要的符号定义。

【讨论】:

  • 酷。在diff(g,r,2).simplify() 的结果中,它似乎将 x 和 y 替换为 $\xi_1$ 和 $\xi_2$,然后用 $r$ 和 $t$ 的值替换它们。有没有办法让它们保持 x 和 y 的形式?
  • @Hatshepsut 如果您想要一个名为“x”的显式符号,请使用symbols('x')。如果您只想让名称“x”引用代码中的其他表达式,请使用x = r*cos(t)。另请参阅docs.sympy.org/latest/tutorial/gotchas.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2013-07-09
相关资源
最近更新 更多