首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩放互补误差函数,erfcx(x),避免算法溢出的计算- VBA/Excel

缩放互补误差函数,erfcx(x),避免算法溢出的计算- VBA/Excel
EN

Stack Overflow用户
提问于 2016-01-11 22:15:13
回答 1查看 528关注 0票数 1

我需要一个算法/近似来计算缩放的互补误差函数,erfcx(x)到双浮点精度。

我使用的是工作PC,所以我只能使用Excel和VBA,不能使用外部库或插件:我需要自己编写代码。

Excel仅提供erf()和erfc()函数。

关系erfcx(x) = exp(x^2) erfc(x)显然是有用的,但是对于大于26.5的x存在算术溢出/下溢,我需要更大的值。

下面的帖子讨论了python的实现--但据我所知,它似乎并没有解决这个问题。它提供了使用其他库或近似的解决方案,这些库或近似方案不够精确,无法满足我的需求。

Is there a scaled complementary error function in python available?

有什么建议吗?

更新:

我使用了我在维基百科上找到的这个Continued Fraction表示

以及用于求解连分式的算法的修改版本,可在此处找到http://finance4traders.blogspot.nl/2009/07/continued-fractions-and-modified-lentzs.html

下面的代码似乎可以工作,并且对于较大的输入参数,实际上需要较少的迭代。

代码语言:javascript
复制
Function erfcx(x) As Variant
Dim Ai As Double
Dim Bi As Double
Dim Ci As Double
Dim Di As Double
Dim Ei As Double
Dim Fi As Double
Dim X2 As Double
Dim i As Long

Const SQRPI As Double = 1.7724538509055
Const MAX_ITERATIONS = 1000


If x < 26.5 Then
    erfcx = Application.WorksheetFunction.ErfC_Precise(x) * Exp(x ^ 2)
Else
    X2 = x ^ 2
    Bi = X2
    Fi = X2
    Ci = X2
    Di = 0
    Do
        i = i + 1
        Ai = i / 2
        If i Mod 2 = 0 Then
            Bi = X2
        Else
            Bi = 1
        End If
        Di = 1 / (Bi + Ai * Di)
        Ci = Bi + Ai / Ci
        Ei = Ci * Di
        Fi = Fi * Ei
    Loop While Ei <> 1 And i < MAX_ITERATIONS
    Debug.Print i
    erfcx = x / Fi / SQRPI
End If  End function
EN

回答 1

Stack Overflow用户

发布于 2016-01-11 23:31:12

这里讨论了几种近似:

AMS Journal Article

一旦您确定了合适的近似,我们可以帮助您在工作表函数或VBA UDF()中对其进行编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34723644

复制
相关文章

相似问题

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