更快、更精确的对数的误差函数?

18视图(30天)
如果有一种方法可以计算的误差函数的对数与数值精度(最好也更快)比这样做以简单的方式,例如:
日志(误差补函数(5))
ans =
0.6931 - 0.6931 -1.8496 -5.3649 -10.7204 -17.9878 -27.2009 0.6931 0.6908 0.6112 0
据我所知,很多数值近似涉及产品包括指数以某种形式 如看到维基百科 ,所以觉得一些潜在收益可以通过它。

回答(5)

沃尔特·罗伯森
沃尔特·罗伯森 2017年9月23日
编辑:沃尔特·罗伯森 2017年9月23日
不,算法涉及求幂之和乘以另一个因素,而非产品,你可能会变成金额。s manbetx 845
误差补函数()是一个内置在MATLAB。它将调用一些内置的C或c++编写的库函数。有机会匹配速度,你的更换也会在C或c++。
1评论
Gleb Tikhonov
Gleb Tikhonov 2017年9月23日
谢谢你的联系。然而你的回答似乎有点有点矛盾,例如在幻灯片中31公式(4)和(5)看起来很容易日志转化为资金。也是超级明显,内置误差补函数应该比任何我编写的MATLAB近似,但这里的细节是,我不需要误差补函数本身,而是它的对数。同样我担心日志的精度(误差补函数(x),而不是精度误差补函数(x)。
我寻找的是一些替代后 R 代码,允许计算高斯提供的对数,然后可以很容易地调整误差补函数的值:
日志(2)+ pnorm (-√(2) * c(5),日志= TRUE)
[1]0.6931472 0.6931472 0.6931361 0.6908056 0.6112323 0.0000000 -1.8496055 -5.3649413 -10.7203630 -17.9877783 -27.2008895
同样重要的是,无论算法实现,它可以计算它的对数即使数值精度提供值本身是不够的:
日志(pnorm (-100))
[1]负
pnorm(-100年,日志= TRUE)
[1]-5005.524
任何想法是否我可以得到类似的近似算法在MATLAB重新编码自己?

登录置评。


约翰D 'Errico
约翰D 'Errico 2017年9月23日
如果你想要速度,不,你不会打日志(误差补函数(x)),至少不是没有编写自定义代码,最好是在一些编译语言。
如果你想要更高的准确性对于大型正x,那么你可以得到更多的准确性上的尾巴。它不会令人难以置信的快。我可能从简单开始渐近展开的维基百科页面。
小心,实际上是经典的渐近展开发散的如果你把太多的条件。但对于适度小x,你也许需要更多的条件来得到一个足够数量的数字。这取决于你需要/想要多少数字的准确性。关键是,你需要做一些小心选择一个扩张,将快速和高精度。中间值的问题将x,也许在1到2的顺序。


谢普布莱恩
谢普布莱恩 2020年3月31日
如果你主要担心underlow,这是一个方便的函数,避免了数值问题:
函数= logerfc (X)
=日志(erfcx (X)) - X ^ 2;
结束

卢卡花旗
卢卡花旗 2023年5月14日在55
编辑:卢卡花旗 2023年5月14日在9:03
不是更快但肯定更准确,当误差补函数(x)⩬1:
log1p(小块土地(- x))
所以log1p之间切换(小块土地(- x))和日志(误差补函数(x))根据论点应该给好精度无处不在。

类别

找到更多的在启动和关闭帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!