是否可以在sympy中定义抽象的复合符号?

时间:2019-01-04 17:39:34

标签: 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)

并根据phi计算其一阶导数。在sympy中有可能出现这种情况吗?

sympy functionsit seems to work的功能组合可直接在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

1 个答案:

答案 0 :(得分:2)

将R定义为函数(R=Function('R')R=symbols('R', cls=Function)。或者,由于phi和R在您的示例中是无法区分的,因此只需让符号R代表您知道的phi和R的函数)即可。使用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)