Символическое дифференцирование функции по отношению к другой символьной функции с использованием SymPy

#python #sympy

#python #sympy

Вопрос:

Я обновил свой Python3 и sympy, и внезапно мой код больше не работает. Я пробую следующий код:

     import sympy as sym
    x, y, z= sym.symbols('x[0], x[1], x[2]')
    theta = sym.atan2(y,x)
    t = theta   pi
    r_1 =  0.0124*sym.cos(t) 0.0414*sym.sin(2*t)
    f = (r_1)*sym.cos(t)
    diff_f = sym.diff(f,theta)
  

Когда я запускаю его, я получаю следующую ошибку:

 Can't calculate derivative wrt atan2(x[1], x[0])
  

Теперь это работало со старой версией (я точно не помню, какая это была версия). Но прямо сейчас я пытаюсь сделать это с последними версиями Python и sympy, и я получаю эту ошибку. Я был бы очень признателен за вашу помощь в этом.

Ответ №1:

Вы можете заменить выражение символом, а затем дифференцировать wrt, чтобы:

 In [3]: a = Symbol('a')                                                                                                                        

In [4]: f.subs(theta, a).diff(a).subs(a, theta)                                                                                                
Out[4]: 
-0.0828⋅x[0]⋅cos(2⋅atan2(x[1], x[0])) 
──────────────────────────────────────
             _______________          
            ╱     2       2           
          ╲╱  x[0]    x[1]