Python 如何重载从函数类继承的个人函数的fdiff方法?
我想创建一个多项式函数p(n,x,y),其导数等于n/x*E(n,x,y)。我创建了如下函数:Python 如何重载从函数类继承的个人函数的fdiff方法?,python,function,sympy,derivative,Python,Function,Sympy,Derivative,我想创建一个多项式函数p(n,x,y),其导数等于n/x*E(n,x,y)。我创建了如下函数: from sympy.core.function import Function as Func, ArgumentIndexError class P(Func) : @classmethod def eval(cls,n,x,y): return Function('P')(n,x,y) class E(Func):
from sympy.core.function import Function as Func, ArgumentIndexError
class P(Func) :
@classmethod
def eval(cls,n,x,y):
return Function('P')(n,x,y)
class E(Func):
@classmethod
def eval(cls,n,x,y):
return Function('E')(n,x,y)
我已提出:
def fdiff(self, argindex=1):
if argindex == 1:
return self.args[2]/self.args[0]*E(*self.args)
else:
raise ArgumentIndexError(self, argindex)
就在函数p的“eval”定义之后,例如在trigonomic.py中定义了cos对sin的导数
然而,当我尝试:
>>> P(r, R, n).fdiff()
我获得:
Derivative(P(n,x,y), n)
在控制台中,我希望获得n/x*E(n,x,y)。您的
eval
正在返回函数('p')
,它是一个完全不同的对象(一个名为“p”的匿名函数)<代码>评估应用于评估特定值(如数字)。如果没有任何要计算的值,请不要定义eval
当我定义p
和E
时
class P(Function):
def fdiff(self, argindex=1):
if argindex == 1:
return self.args[2]/self.args[0]*E(*self.args)
else:
raise ArgumentIndexError(self, argindex)
class E(Function):
pass
它很好用
In [32]: P(r, R, n).diff(r)
Out[32]:
n⋅E(r, R, n)
────────────
r