【问题标题】:Sympy custom functionSympy 自定义函数
【发布时间】:2014-09-10 22:51:08
【问题描述】:

我注意到,没有像 sech(x) 和 csch(x) 这样的函数。

有什么方法可以快速分别定义为 1/cosh(x) 和 1/sinh(x)?

另外,我怎样才能使 sympy 将 arccos 视为 acos?

我正在使用解析器,因此“cos(pi/2)”已正确解析。但我希望以类似的方式解析“arccos(pi/2)”。

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    您可以定义实现所需行为的函数。

    import sympy
    
    def sech(x):
        return sympy.cosh(x)**(-1)
    # sympy.sech = sech
    
    def csch(x):
        return sympy.sinh(x)**(-1)
    # sympy.csch = csch
    
    arccos = sympy.acos
    

    最初我展示了将它们附加到导入 sympy 时使用的符号的行(现在已注释掉)。这是一个名为monkey patching 的坏习惯,并且会干扰对sympy 的任何更新,这些更新可能会使用这些名称或其他可能在代码中其他地方对sympy 进行了猴子补丁的人。它还会使阅读您的代码的人认为这些属性是原始 sympy 包的一部分。

    y = sympy.symbols('y')
    print sech(y)
    print csch(y)
    print arccos(y)
    

    【讨论】:

    • 你可以写arccos = acos
    • 不要猴子补丁sympy.arccos。只需写arccos = sympy.cos
    • 随心所欲。我更喜欢它所写的。它强调了arccos 只是另一个 sympy 函数的别名这一事实。一个普通的旧arccos 的来源在它所写的行中并不清楚,并且使用户追踪arccos = sympy.acos 行。
    • 实际上,如果你使用monkeypatch sympy.arccos,它的作用正好相反。如果有人稍后看到sympy.arccos,他们会错误地认为 SymPy 调用了函数 arccos。将arccos 写为局部变量可以清楚地表明这是您自己的别名。
    • 对不起,@asmeurer,看看你的个人资料,我明白你为什么不想修补 sympy monkey!我还看到了对任何导入的包执行此操作所固有的危险。我会在答案中添加一些讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多