我在SymPy中使用用户定义的符号函数。我想在某些点上对这些函数的派生施加某些限制,并且在简化表达式时会自动启动这些限制。
例如,假设我定义了以下函数。
class my_func(Function):
@classmethod
def eval(cls, x):
if x.is_Number:
if x is S.Zero:
return S.One
elif x is S.Infinity:
return S.Zero
def _eval_is_real(self):
return self.args[0].is_real
此函数是从docs中提取的,如果我知道{0}在0点评估为1,则提供了如何使其工作的示例,但是文档没有提供示例如何对衍生品施加类似的条件。
假设众所周知,1 my_func
的导数为0,我希望这种简化自动发生。如何将此限制强加于my_func
?
答案 0 :(得分:1)
文档也有一些examples:衍生工具由函数的fdiff
方法实现。您可以指定它应返回的函数(my_func_prime
),然后实现该函数的评估。
class my_func(Function):
# other stuff
def fdiff(self, argindex):
return my_func_prime(self.args[0])
# argindex (1, 2, 3...) is useful when my_func has multiple variables
class my_func_prime(Function):
@classmethod
def eval(cls, x):
if x.is_Number:
if x is S.One:
return S.Zero
现在diff(my_func(x)).subs(x, 1)
返回0.
总有两个步骤:首先,取导数,然后只用1代替x。我不能像diff(my_func(1))
那样做,那只是零。因此,导数的值必须由导数本身实现,而不是由原函数的fdiff
方法实现:当导数被采用时,x的值尚未知晓。