我需要一个算法/近似来计算缩放的互补误差函数,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
下面的代码似乎可以工作,并且对于较大的输入参数,实际上需要较少的迭代。
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发布于 2016-01-11 23:31:12
这里讨论了几种近似:
AMS Journal Article
一旦您确定了合适的近似,我们可以帮助您在工作表函数或VBA UDF()中对其进行编码。
https://stackoverflow.com/questions/34723644
复制相似问题