Sympy:如何重写erf函数

时间:2014-07-28 12:11:29

标签: sympy

我在SymPy中有一个表达式,它涉及正常的累积函数N(x),它通过等式N(x)= 0.5 * erf(x / sqrt(2))+ 0.5与误差函数直接相关。 当我使用SymPy的Normal(0,1).cdf(x)函数时,它是使用错误函数编写的。因此,当我输出某些(复杂)表达式的乳胶串时,使用erf(而不是N(x)时,它会显得更复杂,它会输出提到的方程式)。我试图定义一个符号N = 0.5 * erf(x / sqrt(2))+ 0.5并尝试命令'rewrite'用N表示重写我的表达式,但'rewrite'似乎只适用于内部定义的函数。 有没有bodu知道如何用N(some_expression)重写erf(some_expression),因为我不提前知道some_expression(不能使用subs)?

提前致谢

1 个答案:

答案 0 :(得分:0)

我从你的问题中看出你正在使用来自sympy.statistics的Normal。你应该转到sympy.stats。 sympy.statistics已被弃用了一段时间,将在下一版SymPy中删除。

要更直接地回答您的问题,您可以使用replace替换函数,例如expr.replace(erf, lambda x: (N(x) - 0.5)/0.5)

这里的问题是没有函数N。我希望在sympy.stats中做得更好,其中的分布是象征性的。但是,我没有办法做到这一点。我为此打开了https://github.com/sympy/sympy/issues/7819