我在Sympy中定义了两个自定义函数,名为phi
和Phi
。我知道Phi(x)+Phi(-x) == 1
。如何为Sympy提供此简化规则?我可以在我的班级定义中指定这个吗?
这是我到目前为止所做的:
from sympy import Function
class phi(Function):
nargs = 1
def fdiff(self, argindex=1):
if argindex == 1:
return -1*self.args[0]*phi(self.args[0])
else:
raise ArgumentIndexError(self, argindex)
@classmethod
def eval(cls, arg):
# The function is even, so try to pull out factors of -1
if arg.could_extract_minus_sign():
return cls(-arg)
class Phi(Function):
nargs = 1
def fdiff(self, argindex=1):
if argindex == 1:
return phi(self.args[0])
else:
raise ArgumentIndexError(self, argindex)
对于好奇的人来说,phi
和Phi
分别代表高斯PDF和CDF。这些是在sympy.stats
中实现的。但是,就我而言,根据phi
和Phi
来解释结果会更容易。
答案 0 :(得分:3)
根据Stelios的评论,如果Phi(x)
为否定,则1-Phi(-x)
应返回x
。因此,我修改了Phi
如下:
class Phi(Function):
nargs = 1
def fdiff(self, argindex=1):
if argindex == 1:
return phi(self.args[0])
else:
raise ArgumentIndexError(self, argindex)
@classmethod
def eval(cls, arg):
# Phi(x) + Phi(-x) == 1
if arg.could_extract_minus_sign():
return 1-cls(-arg)