Python 是否可以在Symphy中定义抽象复合符号?

Python 是否可以在Symphy中定义抽象复合符号?,python,sympy,Python,Sympy,我想用符号 from sympy import * phi,p,R,n,x1,k,f = symbols('phi,p,R,n,x1,k,f') 编写抽象函数 f = R(phi) - p * n * R(phi)**2 * x1 - k * cos(R(phi)) (1) 并计算它对φ的一阶导数。这样的事情在sympy中可能发生吗 函数组合可作为参数直接用于diff,但第(1)行的结果是 ---------------------------------------------------

我想用符号

from sympy import *
phi,p,R,n,x1,k,f = symbols('phi,p,R,n,x1,k,f')
编写抽象函数

f = R(phi) - p * n * R(phi)**2 * x1 - k * cos(R(phi)) (1)
并计算它对φ的一阶导数。这样的事情在sympy中可能发生吗

函数组合可作为参数直接用于
diff
,但第(1)行的结果是

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-0771d7cb2d7b> in <module>
----> 1 f = R(phi) - p * n * R(phi)**2 * x1 - l * cos(R(phi))

TypeError: 'Symbol' object is not callable
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
---->1 f=R(φ)-p*n*R(φ)**2*x1-l*cos(R(φ))
TypeError:“符号”对象不可调用
将R定义为函数(
R=function('R')
R=symbols('R',cls=function)
。或者,由于在您的示例中phi和R是不可区分的,您可以让符号R表示已知的phi函数,并使用
idiff

>>> idiff(f - (R - p * n * R**2 * x1 - k * cos(R)),(R, f),phi)  # dR/dphi
Derivative(f, phi)/(-2*R*n*p*x1 + k*sin(R) + 1)
>>> idiff(f - (R - p * n * R**2 * x1 - k * cos(R)),(f,R),phi)  # df/dphi
(-2*R*n*p*x1 + k*sin(R) + 1)*Derivative(R, phi)
将R定义为函数(
R=function('R')
R=symbols('R',cls=function)
。或者,由于在您的示例中phi和R是不可区分的,您可以让符号R表示已知的phi函数,并使用
idiff

>>> idiff(f - (R - p * n * R**2 * x1 - k * cos(R)),(R, f),phi)  # dR/dphi
Derivative(f, phi)/(-2*R*n*p*x1 + k*sin(R) + 1)
>>> idiff(f - (R - p * n * R**2 * x1 - k * cos(R)),(f,R),phi)  # df/dphi
(-2*R*n*p*x1 + k*sin(R) + 1)*Derivative(R, phi)