2012-01-21 2 views
4

Я ищу реализацию обратной незавершенной бета-функции, возможно, уже написанной на C++ или простой в реализации. Тем не менее, мне нужно, чтобы это было БЫСТРО! Как и в, я буду запускать это во внутреннем цикле оптимизатора, поэтому он, надеюсь, займет пару сотен тактовых циклов.Быстрая реализация обратной незавершенной бета-функции в C++

Здесь уже есть несколько потоков, но в этом случае я готов отбросить большую точность для скорости. Кроме того, домен несколько ограничен, поскольку я использую только целочисленные значения для a и b.

Дополнительные сведения о проблеме: Я даю целое число испытаний n и целое число k < = n из этих испытаний, которые были успешными. Я предполагаю, что распределение фона для базовой вероятности успешного испытания равномерно в [0,1], поэтому, учитывая, что я видел некоторое количество проб и успехов, мое последующее распределение должно быть бета-распределением. В байесовской модели я по существу стараюсь найти p-процентный процент вероятных базовых вероятностей.

Опять же, мне не нужно, чтобы это было очень точно, просто быстро. Я могу справиться с погрешностью до +/- 1%. Тем не менее, это не может быть крайне неточным для небольших чисел: мои входы варьируются от почти нуля до десятков тысяч.

Заранее благодарен! Если какое-либо уточнение необходимо, дайте мне знать.

ответ

4
  1. Один из подходов состоит в том, чтобы составить таблицу. Если вам нужно различать, вам нужно будет интерполировать его. Это, вероятно, только альтернатива для вас, если вы сохраните все, кроме одного из параметров, исправлены, но я думаю, что вы это делаете? (ОП говорит нет)

    Возможно, вы захотите сделать таблицу биннинга нелинейной, чтобы получить точную точность при низких значениях x по вашему запросу. Попробуйте размер бина, пропорциональный x, x^2 и т. Д.

  2. Используйте простой метод поиска, такой как http://en.wikipedia.org/wiki/Secant_method, чтобы найти ваше значение как функцию расширения мощности (не обратной) неполной бета-функции. http://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function. Это работает только в том случае, если оно однообразно.

  3. Сначала убедитесь, что вам действительно нужно сделать свой собственный метод. Возможно, сначала попробуйте их? 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

+0

спасибо за +1, но я получил свою первую версию совершенно неправильно. Также читайте http://en.wikipedia.org/wiki/Incomplete_gamma_function#Asymptotic_behavior –

+0

К сожалению, я этого не делаю. Я могу держать p исправленным, если нужно, но альфа-и бета-аргументы будут меняться для каждого вызова. – WWGaussDo

Смежные вопросы