我正在寻找逆向不完整Beta函数的实现,可能已经用C ++编写或者很容易实现。但是,我需要它快!就像在,我将在优化器的内部循环中运行它,所以它有望在几百个时钟周期内运行。
这里已有几个主题,但在这种情况下,我愿意为速度抛弃很多准确性。此外,域有一定的限制,因为我只使用a和b的整数值。
关于这个问题的更多背景:我给出了整数个试验n和这些试验的整数k <= n成功。我假设成功试验的潜在概率的背景分布在[0,1]中是一致的,所以鉴于我已经看到了一些试验和成功,我的后验分布应该是β分布。在贝叶斯模型中,我基本上试图找到可能潜在概率的第p个百分位数。
同样,我不需要这个非常准确,只是快速。我可以处理高达+/- 1%的不准确性。但是,对于小数字来说,它不是非常不准确:我的输入范围从接近零到数万。
提前致谢!如果需要任何澄清,请告诉我。
答案 0 :(得分:4)
一种方法是制作一张桌子。如果你需要区分你需要插入它。如果您保留除一个参数以外的所有参数,这可能只是替代方案,但我认为您这样做了吗? (OP说不)
您可能希望将表格分箱设为非线性,以便在低x时获得良好的准确度。尝试与x,x ^ 2等成比例的bin大小。
使用简单的搜索方法(例如http://en.wikipedia.org/wiki/Secant_method)将您的值作为(非逆)不完整Beta函数的幂扩展的函数来查找。 http://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function。只有在单调的情况下才有效。
首先确保您确实需要制作自己的方法。也许先试试这些? http://www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_inv_function.html