PurePython反误差函数

2024-10-03 17:15:10 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有反误差函数的纯python实现?在

我知道SciPy有scipy.special.erfinv(),但这依赖于一些C扩展。我想要一个纯python实现。在

我尝试过使用WikipediaWolfram引用编写自己的引用,但当arg大于等于0.9时,它似乎总是偏离实际值。在

我还试图移植Scipy使用的底层C代码(^{}cephes ^{}函数),但这也无法通过我的单元测试。在


编辑:根据要求,我添加了移植代码。在

docstring(和doctest)已被删除,因为它们比函数长。我还没有花太多的精力让端口变得更像Python——一旦我得到了通过单元测试的东西,我就会担心这个问题。在

来自cephes ^{}

的支持函数
def polevl(x, coefs, N):
    ans = 0
    power = len(coefs) - 1
    for coef in coefs[:N]:
        ans += coef * x**power
        power -= 1

    return ans

def p1evl(x, coefs, N):
    return polevl(x, [1] + coefs, N)

主反误差函数

^{pr2}$

Tags: 函数代码returndefscipy单元测试误差special
2条回答

我认为你的代码中的错误是在polevl函数的for循环中的系数。如果你用下面的函数替换你所拥有的一切,一切似乎都有效。在

def polevl(x, coefs, N):
    ans = 0
    power = len(coefs) - 1
    for coef in coefs:
        ans += coef * x**power
        power -= 1
    return ans

我用以下代码对scipy的实现进行了测试:

^{pr2}$

同情?可能需要进行一些挖掘,以了解其内部如何实现http://docs.sympy.org/latest/modules/functions/special.html#sympy.functions.special.error_functions.erfinv

from sympy import erfinv
erfinv(0.9).evalf(30)
1.16308715367667425688580351562

相关问题 更多 >