首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现特殊功能简化规则

实现特殊功能简化规则
EN

Stack Overflow用户
提问于 2017-05-31 19:17:48
回答 1查看 96关注 0票数 3

我在Sympy中定义了两个自定义函数,分别称为phiPhi。我知道那个Phi(x)+Phi(-x) == 1。如何为Sympy提供此简化规则?我可以在我的类定义中指定这个吗?

以下是我到目前为止所做的工作:

代码语言:javascript
复制
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)

对于好奇的人来说,phiPhi分别表示高斯PDF和CDF。这些都是用sympy.stats实现的。但是,在我的例子中,用phiPhi解释结果更容易。

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 20:30:02

根据Stelios的注释,如果x为负,则Phi(x)应返回1-Phi(-x)。因此,我对Phi进行了如下修改:

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44283354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档