问题涉及互补误差函数
erfc(x)=2π−−√∫∞xexp(−t2)dt
“大”值(原始问题为),即介于100到700,000之间。(实际上,任何大于约6的值都应视为“大”。)请注意,因为这将用于计算p值,所以获得三个以上的有效(十进制)数字几乎没有价值。 。= n / √x=n/2–√
首先,请考虑@Iterator建议的近似值,
f(x)=1−1−exp(−x2(4+ax2π+ax2))−−−−−−−−−−−−−−−−−−−−−−√,
哪里
a=8(π−3)3(4−π)≈0.439862.
尽管这是对误差函数本身的出色近似,但对却是可怕的近似。但是,有一种方法可以系统地解决该问题。erfc
对于与如此大的值相关的p值,我们对相对误差感兴趣:我们希望对于三个有效值,其绝对值小于0.001精度位数。不幸的是,由于双精度计算中的下溢,很难对大进行研究。这是一次尝试,它绘制了的相对误差与的关系:˚F (X )/ ERFC(X )- 1 X X 0 ≤ X ≤ 5.8x f(x)/erfc(x)−1xx0≤x≤5.8
超过5.3左右后,计算将变得不稳定,并且无法传递5.8以上的一位有效数字。这不足为奇:推动了双精度算术的极限。因为没有证据表明较大的的相对误差会很小,所以我们需要做得更好。EXP (- 5.8 2)≈ 10 - 14.6 Xxexp(−5.82)≈10−14.6x
使用扩展算术(使用Mathematica)执行计算可以改善我们对发生的情况的了解:
误差随着迅速增加,并且没有平稳的迹象。过去左右,这种近似甚至不提供的信息的一个可靠的数字!x = 10xx=10
但是,该图开始看起来呈线性。我们可能会猜测相对误差与成正比。(从理论上讲这是有道理的:显然是一个奇数函数,而显然是偶数,因此它们的比率应该是一个奇数函数。因此,我们希望相对误差(如果它增加)表现得像一个奇数幂。)这促使我们研究相对误差除以。等效地,我选择检查,因为希望它应该具有恒定的极限值。这是它的图:ERFC ˚F X X X ⋅ ERFC(X )/ ˚F (X )xerfcfx xx⋅erfc(x)/f(x)
我们的猜测似乎得到了证实:该比例似乎确实接近8左右的极限。当被要求时,Mathematica将提供:
a1 = Limit[x (Erfc[x]/f[x]), x -> \[Infinity]]
值是。 这使我们能够改进估计:我们采取a1=2π√e3(−4+π)28(−3+π)≈7.94325
f1(x)=f(x)a1x
作为近似的第一个细化。当确实很大时(大于几千),这种近似值很好。因为它对于到左右的有趣参数范围仍然不够好,所以让我们迭代该过程。这次,反向相对误差-具体来说,表达式对于大,其行为应类似于(基于先前的奇偶性考虑) 。因此,我们乘以并找到下一个极限:5.3 2000 1 − erfc(x )/ f 1(x )1 / x 2 x x 2x5.320001−erfc(x)/f1(x)1/x2xx2
a2 = Limit[x^2 (a1 - x (Erfc[x]/f[x])), x -> \[Infinity]]
值是
a2=132π−−√e3(−4+π)28(−3+π)(32−9(−4+π)3π(−3+π)2)≈114.687.
只要我们愿意,就可以继续进行此过程。我又迈出了一步,发现
a3 = Limit[x^2 (a2 - x^2 (a1 - x (Erfc[x]/f[x]))), x -> \[Infinity]]
价值约为1623.67。(完整表达式包含的八阶有理函数,并且太长而无法在此处使用。)π
展开这些运算将得出我们的最终近似值
f3(x)=f(x)(a1−a2/x2+a3/x4)/x.
误差与成正比。输入是比例常数,因此我们绘制:x−6x6(1−erfc(x)/f3(x))
它迅速接近2660.59附近的极限值。使用近似值,我们获得的估计值,对于所有其相对精度均优于。一旦超过20左右,我们就有3个有效数字(或随着变大而增加)。核对一下,这是一张表格,将正确的值与到之间的近似值进行比较f3erfc(x)2661/x6x>0xxx1020:
x Erfc Approximation
10 2.088*10^-45 2.094*10^-45
11 1.441*10^-54 1.443*10^-54
12 1.356*10^-64 1.357*10^-64
13 1.740*10^-75 1.741*10^-75
14 3.037*10^-87 3.038*10^-87
15 7.213*10^-100 7.215*10^-100
16 2.328*10^-113 2.329*10^-113
17 1.021*10^-127 1.021*10^-127
18 6.082*10^-143 6.083*10^-143
19 4.918*10^-159 4.918*10^-159
20 5.396*10^-176 5.396*10^-176
x=8NormSDist
fx
f(x)≈12exp(−x2(4+ax2π+ax2)).
(以10为底)的对数计算很简单,并且容易得到所需的结果。例如,让。该近似值的常用对数为x=1000
log10(f(x))≈(−10002(4+a⋅10002π+a⋅10002)−log(2))/log(10)∼−434295.63047.
指数收益
f(1000)≈2.34169⋅10−434296.
应用校正(在)产生f3
erfc(1000)≈1.86003 70486 32328⋅10−434298.
请注意,该校正将原始近似值降低了99%以上(实际上是。)(此近似值仅在最后一位与正确值不同。另一个众所周知的近似值,等于,输入第六个有效数字。我敢肯定,如果我们使用相同的技术。)a1/x≈1%exp(−x2)/(xπ−−√)1.860038⋅10−434298