如何重载继承自函数class的个人函数的fdiff方法?
How to overload the fdiff method of a personal function inheriting from the Function class?
我想创建一个多项式函数 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):
@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" 定义之后,例如在 trigonometric.py 中完成定义 cos 的导数,感谢 sin。
然而,当我尝试时:
>>> P(r, R, n).fdiff()
我获得:
Derivative(P(n,x,y), n)
在控制台中,而我想获得 n/x*E(n,x,y).
您的 eval
正在返回 Function('P')
,这是一个完全不同的对象(一个名为 "P" 的匿名函数)。 eval
应用于评估特定值(如数字)。如果您没有任何要计算的值,请不要定义 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
我想创建一个多项式函数 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):
@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" 定义之后,例如在 trigonometric.py 中完成定义 cos 的导数,感谢 sin。
然而,当我尝试时:
>>> P(r, R, n).fdiff()
我获得:
Derivative(P(n,x,y), n)
在控制台中,而我想获得 n/x*E(n,x,y).
您的 eval
正在返回 Function('P')
,这是一个完全不同的对象(一个名为 "P" 的匿名函数)。 eval
应用于评估特定值(如数字)。如果您没有任何要计算的值,请不要定义 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