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

Distributions are Objects

Boost , Math Toolkit 2.5.0 , Overview of 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

Каждый вид распределения в этой библиотеке представляет собой классный тип — объект.

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

[Tip] Tip

Если вы знакомы с библиотеками статистики, использующими функции, и «Распределения как объекты» кажутся чуждыми, см. сравнение с другими библиотеками статистики.

Создание классов распределения делает две вещи:

  • Он инкапсулирует тип распределения в системе типа C++; так, например, дистрибутивы Student-t всегда отличаются от дистрибутивов Chi-Squared.
  • Объекты распределения сохраняют любые параметры, связанные с распределением: например, распределение Студентов-Т имеет параметр степеней свободы, который контролирует форму распределения. Этот параметр степеней свободы должен быть предоставлен объекту Студента-т при его построении.

Хотя классы распределения в этой библиотеке являются шаблонами, на типе double в основном берётся обычное название дистрибутива (за исключением случаев, когда происходит столкновение с функцией того же имени: бета и гамма, в этом случае использование аргументов шаблона по умолчанию - RealType = double - почти так же удобно). Вероятно, 95% применений покрыты этими типами:

// using namespace boost::math; // Avoid potential ambiguity with names in std <random>
// Safer to declare specific functions with using statement(s):
using boost::math::beta_distribution;
using boost::math::binomial_distribution;
using boost::math::students_t;
// Construct a students_t distribution with 4 degrees of freedom:
students_t d1(4);
// Construct a double-precision beta distribution
// with parameters a = 10, b = 20
beta_distribution<> d2(10, 20); // Note: _distribution<> suffix !

Если вам нужно использовать дистрибутивы с типом, отличным от double, то вы можете непосредственно инстанцировать шаблон: имена шаблонов те же, что и double typedef, но с _distribution, например: Students t Distribution или Binomial Distribution:

// Construct a students_t distribution, of float type,
// with 4 degrees of freedom:
students_t_distribution<float> d3(4);
// Construct a binomial distribution, of long double type,
// with probability of success 0.3
// and 20 trials in total:
binomial_distribution<long double> d4(20, 0.3);

К параметрам, передаваемым дистрибутивам, можно получить доступ через функции приемника:

d1.degrees_of_freedom();  // returns 4.0

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


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 09:07:47/0.0063967704772949/0