Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Arcsine Distribution

Boost , Math Toolkit 2.5.0 , Distributions

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
#include <boost/math/distributions/arcsine.hpp>
namespace boost{ namespace math{
 template <class RealType = double,
           class Policy   = policies::policy<> >
class arcsine_distribution;
typedef arcsine_distribution<double> arcsine; // double precision standard arcsine distribution [0,1].
template <class RealType, class Policy>
class arcsine_distribution
{
public:
   typedef RealType  value_type;
   typedef Policy    policy_type;
   // Constructor from two range parameters, x_min and x_max:
   arcsine_distribution(RealType x_min, RealType x_max);
   // Range Parameter accessors:
   RealType x_min() const;
   RealType x_max() const;
};
}} // namespaces

Тип класса<arcsine_distribution>представляет собойдугообразнуюфункцию распределения вероятностей. Распределение дуг названо потому, что его CDF использует обратный грех-1или дуг.

Реализуется как обобщенная версия с поддержкой отx_minдоx_maxобеспечение «стандартного распределения дуг» по умолчанию сx_min = 0иx_max = 1. (Некоторые делают выбор в пользу стандарта).

Распределение арки обобщено, чтобы включать любую ограниченную поддержкуa<= x<= bWolframиWikipedia, но также используяместоположениеимасштабпараметрыВиртуальные лаборатории в вероятности и статистикеРаспределение арки. Конечная версия более проста и очевидна, поэтому мы реализуем ее. При желанииэтоописывает, какбета-распределениеможет использоваться для добавления форм-фактора.

Функция плотности вероятностиPDFдляраспределения аркиопределена на интервалеx_min, x_maxПриводится:

    f(x; x_min, x_max) = 1/(π⋅√((x - x_min)⋅(x_max - x_min))

Например,Wolfram Alphaраспределение арки, от входа

N[PDF[arcsinedistribution[0, 1], 0.5], 50]

Вычислить значение PDF

0.63661977236758134307553505349005744813783858296183

Функции плотности вероятностей (PDF) обобщенных распределений дуг являются симметричными U-образными кривыми, центрированными на(x_max - x_min)/2, самыми высокими (бесконечными) вблизи двух крайностей и довольно плоскими над центральной областью.

Если случайная вариацияxявляетсяx_minилиx_max, то PDF является бесконечностью. Еслиxx_min, то CDF равен нулю. Если случайная вариацияxявляетсяx_max, то CDF является единством.

«Стандартное» (0, 1) распределение дуг показано синим цветом и некоторыми обобщенными примерами с другимиxдиапазонами.

Функция кумулятивного распределения CDF определяется как

    F(x) = 2⋅arcsin(√((x-x_min)/(x_max - x)))/π

Constructor
arcsine_distribution(RealType x_min, RealType x_max);

Конструирует распределение арки с параметрами диапазонаx_minиx_max.

Требуетx_min< x_max, иначедомен_errorназывается.

Например:

arcsine_distribution<> myarcsine(-2, 4);

Конструирует распределение арки сx_min = -2иx_max = 4.

Значения по умолчаниюx_min = 0иx_max = 1и a<typedefarcsine_distribution<double>arcsine;>означают, что

arcsine as;

Построено «Стандартное распределение 01».

Parameter Accessors
RealType x_min() const;
RealType x_max() const;

Верните параметрx_minилиx_max, из которого было построено это распределение.

Так, например:

using boost::math::arcsine_distribution;
arcsine_distribution<> as(2, 5); // Cconstructs a double arcsine distribution.
assert(as.x_min() == 2.);  // as.x_min() returns 2.
assert(as.x_max() == 5.);   // as.x_max()  returns 5.
Non-member Accessor Functions

Поддерживаются всеобычные нечленные функции доступа, которые являются общими для всех распределений:Кумулятивная функция распределения,Функция плотности вероятности,Количественная,Функция опасности,Кумулятивная функция опасности,среднее,медианное,режим,стандартное отклонение,искажение,куртоз,куртоз_избыток,диапазониподдержка.

Формулы для их вычисления приведены в таблице ниже и вWolfram Mathworld.

[Note] Note

Всегда естьдвазначения длярежима, приx_minи приx_max, по умолчанию 0 и 1, поэтому вместо этого мы поднимаем исключениедомен_error. На этих крайностях PDF-файлы бесконечны, а CDF-файлы равны нулю или единству.

Applications

Распределение арки полезно для описанияСлучайных прогулок, (включая пьяные прогулки)Брауновское движение,процессы Вайнера,испытания Бернуллии их применение для решения фондового рынка и другихразрушительных азартных игр.

Случайная вариацияxограниченаx_minиx_max(для нашего «стандартного» распределения 0 и 1), и обычно представляет собой некоторую фракцию. Для любых другихx_minиx_maxфракция может быть получена изxс использованием

  фракция = (x - x_min) / (x_max - x_min)

Самый простой пример — бросать головы и хвосты справедливой монетой и моделировать риск проигрыша или выигрыша. Ходячие (молекулы, пьяные...), движущиеся слева или справа от центральной линии, являются еще одним распространенным примером.

Случайная вариацияx— это доля времени, затраченного на «победную» сторону. Если половина времени тратится на «победную» сторону (а другая половина — на «потерянную»), тоx = 1/2.

Для большого количества бросков это моделируется (стандартным [0,1]) распределением арки, и PDF можно рассчитать таким образом:

std::cout << pdf(as, 1. / 2) << std::endl; // 0.637
// pdf has a minimum at x = 0.5

Из графика PDF ясно, чтоx= ½ этоминимумкривой, так что этонаименее вероятныйсценарий. (Это очень нелогично, учитывая, что справедливые ставки должныв конечном итогестать равными). Оказывается, чтов конечном итогене просто очень длинный, нобесконечный!

наиболее вероятныесценарии крайности, гдеx= 0 илиx= 1.

Если доля времени слева равна a¼, то это только немного более вероятно, потому что кривая довольно плоская.

std::cout << pdf(as, 1. / 4) << std::endl; // 0.735

Если мы рассмотрим честные игры с подбрасыванием монет, которые проводятся в течение 100 дней (гипотетически непрерывно, чтобы быть «в ограниченном количестве»), человек, выигравший после 5-го дня, не изменится в фракции 0,144 случаев.

Мы можем легко вычислить эту настройкуx= 5./100 = 0,05

std::cout << cdf(as, 0.05) << std::endl; // 0.144

Точно так же мы можем вычислить из доли 0,05/2 = 0,025 (половину уменьшенной, потому что мы рассматриваем как победителей, так и проигравших), соответствующей 1 - 0,025 или 97,5% игроков, (ходок, частиц...) натой же сторонепроисхождения.

std::cout << 2 * cdf(as, 1 - 0.975) << std::endl; // 0.202

(Использование комплемента дает немного больше ясности и позволяет избежать потенциальной потери точности, когдаxблизко к единице, см.почему комплементы?).

std::cout << 2 * cdf(complement(as, 0.975)) << std::endl; // 0.202

или мы можем изменить расчет, предположив долю времени с одной стороны, скажем, долю 0,2,

std::cout << quantile(as, 1 - 0.2 / 2) << std::endl; //  0.976
std::cout << quantile(complement(as, 0.2 / 2)) << std::endl; // 0.976

Резюме: Каждый раз, когда мы бросаем, шансы равны, поэтому в среднем у нас одинаковое изменение выигрыша и проигрыша.

Но этонеправдадля отдельной игры, где один будетв основном в плохом или хорошем патче.

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

Мораль: Если вы проиграли, покиньте игру. (Потому что шансы восстановиться к хорошему патчу невелики).

Следствие: Уходите, пока вы впереди?

Рабочий пример находится наarcsine_example.cpp, включая вывод образца.

Related distributions

Распределение арки сx_min = 0иx_max = 1является особым случаемБета-распределенияс α = 1/2 и β = 1/2.

Accuracy

Это распределение реализуется с использованием sqrt, sine, cos и arc sine и cos тригонометрических функций, которые обычно точны для несколькихмашинных эпсилон. Но все значения страдают отпотери значимости или ошибки отменыдля значенийx, близких кx_max. Например, для стандартного [0, 1] распределения дугкак, pdf симметричен относительно случайной вариацииx = 0,5, так что можно было бы ожидать<pdf(as,0.01)== pdf(as,0.99)>. Но по мере приближенияхк единству возрастаетпотеря значимости. Чтобы противодействовать этому, варианты комплемента CDF и квантиля реализуются с альтернативными выражениями, используя, потому что-1вместогреха-1. Пользователи должны видетьпочему дополнения?для указания того, когда следует избегать потери точности с помощью комплементов.

Testing

Результаты были протестированы на нескольких точных значениях пятен, вычисленныхWolfram Alpha, например:

N[PDF[arcsinedistribution[0, 1], 0.5], 50]
  0.63661977236758134307553505349005744813783858296183
Implementation

В следующей таблицеaиbявляются параметрамиx_minи #160; иx_max,xявляется случайной величиной,pявляется вероятностью и его дополнениемq = 1-p.

Функция

Записки об осуществлении

поддержка

x & #8712; [a, b), по умолчанию x & #8712; [0, 1]

pdf

f(x; a, b) = 1/(π⋅√(x - a)⋅(b - x))

cdf

F(x) = 2/π⋅sin-1(√(x - a)/(b - a))

cdf дополнения

2/(π⋅cos-1(√(x - a)/(b - a)))

квантиль

-a⋅sin2(½π⋅p) + a + b⋅sin2(½π⋅p)

квантиль от дополнения

-a⋅cos2(½π⋅p) + a + b⋅cos2(½π⋅q)

означает

& #189; (a+b)

медиана

& #189; (a+b)

Режим

x & #8712; [a, b], так поднимает домен_error (возвращение NaN).

Разница

(b - a)2/ 8

Неровность

0

Избыток куртоза

-3/2

Куртоз

kurtosis_excess + 3

Квантиль был рассчитан с использованием выражения, полученного с помощьюWolfram Alphaдля инвертирования формулы для CDF таким образом.

solve [p - 2/pi sin^-1(sqrt((x-a)/(b-a))) = 0, x]

который интерпретируется как

Solve[p - (2 ArcSin[Sqrt[(-a + x)/(-a + b)]])/Pi == 0, x, MaxExtraConditions -> Automatic]

и произведенное в результате выражение

x = -a sin^2((pi p)/2)+a+b sin^2((pi p)/2)

Спасибо Вольфраму за предоставленную услугу.

References
Sources

PrevUpHomeNext

Статья Arcsine Distribution раздела Math Toolkit 2.5.0 Distributions может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Distributions ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:02:48/0.010475873947144/0