Цепное правило в симпы

Я пытаюсь немного попрактиковаться с 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?

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 применительно к f как f(x,y),

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

Теперь вы переопределяете x а также y как выражение r а также t, Это не влияет 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()

Я также отбросил все ненужные определения символов.

Другие вопросы по тегам