Пространства имён
Варианты
Действия

std::chi_squared_distribution

Материал из cppreference.com
< cpp‎ | numeric‎ | random

 
 
 
Генерация псевдослучайных чисел
Генераторы равномерных случайных битов
Генераторы и адаптеры генераторов
Недетерминированный генератор
Распределения
Равномерные распределения
Распределения Бернулли
Распределения Пуассона
Нормальные распределения
chi_squared_distribution
(C++11)
Распределения выборки
Последовательности настройки
(C++11)
Библиотека C
 
std::chi_squared_distribution
Функции-члены
Поколение
Оригинал:
Generation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Характеристики
Оригинал:
Characteristics
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Функции, не являющиеся членами
 
Определено в заголовочном файле <random>
template< class RealType = double >
class chi_squared_distribution;
(начиная с C++11)
chi_squared_distribution генерирует случайные числа x>0 в соответствии с Распределение хи-квадрат
Оригинал:
The chi_squared_distribution produces random numbers x>0 according to the Распределение хи-квадрат:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
f(x;n) = None
x(n/2)-1
e-x/2
Γ(n/2) 2n/2
Γ - это Гамма-функция (См. также std::tgamma) и n - степени свободы (по умолчанию 1).
Оригинал:
Γ is the Гамма-функция (See also std::tgamma) and n are the степени свободы (default 1).
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Типы-члены

Тип члена Определение
result_type RealType
param_type
Тип набора параметров, не специфицирован
Оригинал:
the type of the parameter set, unspecified
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Функции-члены

строит новые распределения
Оригинал:
constructs new distribution
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
сбрасывает внутреннее состояние распределения
Оригинал:
resets the internal state of the distribution
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
Генерация
Оригинал:
Generation
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
генерирует следующее случайное число в распределении
(public функция-элемент) [править]
Характеристики
Оригинал:
Characteristics
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
возвращает степеней свободы (n) распределение параметров
Оригинал:
returns the degrees of freedom (n) distribution parameter
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
получает или задает объект распределения параметра
Оригинал:
gets or sets the distribution parameter object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
возвращает минимальное потенциально сгенерированное значение
Оригинал:
returns the minimum potentially generated value
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
возвращает максимальное потенциально сгенерированное значение
Оригинал:
returns the maximum potentially generated value
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]

[править] Функции, не являющиеся членами

(C++11)(C++11)(удалено в C++20)
сравнивает два объекта распределения
(функция) [править]

выполняют потоковый вывод/ввод для объекта распределения псевдослучайных чисел
(функция) [править]

[править] Пример

#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <vector>
 
template <int Height = 5, int BarWidth = 1, int Padding = 1, int Offset = 0,
          bool DrawMinMax = true, class Sample>
void draw_vbars(Sample const& s) {
    static_assert((Height > 0) && (BarWidth > 0) && (Padding >= 0) && (Offset >= 0));
    auto cout_n = [](auto const& v, int n) { while (n-- > 0) std::cout << v; };
    const auto [min, max] = std::minmax_element(std::cbegin(s), std::cend(s));
    std::vector<std::div_t> qr;
    for (float e : s) {
        qr.push_back(std::div(std::lerp(0.f, Height*8, (e - *min)/(*max - *min)), 8));
    }
    for (auto h{Height}; h-- > 0 ;) {
        cout_n(' ', Offset);
        for (auto [q, r] : qr) {
            char d[] = "█"; // == { 0xe2, 0x96, 0x88, 0 }
            q < h ? d[0] = ' ', d[1] = '\0' : q == h ? d[2] -= (7 - r) : 0;
            cout_n(d, BarWidth);
            cout_n(' ', Padding);
        }
        if (DrawMinMax && Height > 1)
            h == Height - 1 ? std::cout << "┬ " << *max:
                     h != 0 ? std::cout << "│"
                            : std::cout << "┴ " << *min;
        cout_n('\n', 1);
    }
}
 
int main() {
    std::random_device rd{};
    std::mt19937 gen{rd()};
 
    auto χ2 = [&gen](const float dof) {
        std::chi_squared_distribution<float> d{ dof /* n */ };
 
        const int norm = 1'00'00;
        const float cutoff = 0.002f;
 
        std::map<int, int> hist{};
        for (int n=0; n!=norm; ++n) { ++hist[std::round(d(gen))]; }
 
        std::vector<float> bars;
        std::vector<int> indices;
        for (const auto [n, p] : hist) {
            if (float x = p * (1.0/norm); cutoff < x) {
                bars.push_back(x);
                indices.push_back(n);
            }
        }
 
        std::cout << "dof = " << dof << ":\n";
        draw_vbars<4,3>(bars);
        for (int n : indices) { std::cout << "" << std::setw(2) << n << "  "; }
        std::cout << "\n\n";
    };
 
    for (float dof : {1.f, 2.f, 3.f, 4.f, 6.f, 9.f}) χ2(dof);
}

Возможный вывод:

dof = 1:
███                                 ┬ 0.5271
███                                 │
███ ███                             │
███ ███ ▇▇▇ ▃▃▃ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.003
 0   1   2   3   4   5   6   7   8  
 
dof = 2:
    ███                                     ┬ 0.3169
▆▆▆ ███ ▃▃▃                                 │
███ ███ ███ ▄▄▄                             │
███ ███ ███ ███ ▇▇▇ ▄▄▄ ▃▃▃ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.004
 0   1   2   3   4   5   6   7   8   9  10  
 
dof = 3:
    ███ ▃▃▃                                         ┬ 0.2439
    ███ ███ ▄▄▄                                     │
▃▃▃ ███ ███ ███ ▇▇▇ ▁▁▁                             │
███ ███ ███ ███ ███ ███ ▆▆▆ ▄▄▄ ▃▃▃ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.0033
 0   1   2   3   4   5   6   7   8   9  10  11  12  
 
dof = 4:
    ▂▂▂ ███ ▃▃▃                                                 ┬ 0.1864
    ███ ███ ███ ███ ▂▂▂                                         │
    ███ ███ ███ ███ ███ ▅▅▅ ▁▁▁                                 │
▅▅▅ ███ ███ ███ ███ ███ ███ ███ ▆▆▆ ▄▄▄ ▃▃▃ ▂▂▂ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.0026
 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  
 
dof = 6:
            ▅▅▅ ▇▇▇ ███ ▂▂▂                                                 ┬ 0.1351
        ▅▅▅ ███ ███ ███ ███ ▇▇▇ ▁▁▁                                         │
    ▁▁▁ ███ ███ ███ ███ ███ ███ ███ ▅▅▅ ▂▂▂                                 │
▁▁▁ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▅▅▅ ▄▄▄ ▃▃▃ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.0031
 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  
 
dof = 9:
            ▅▅▅ ▇▇▇ ███ ███ ▄▄▄ ▂▂▂                                                 ┬ 0.1044
        ▃▃▃ ███ ███ ███ ███ ███ ███ ▅▅▅ ▁▁▁                                         │
    ▄▄▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▆▆▆ ▃▃▃                                 │
▄▄▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▆▆▆ ▄▄▄ ▃▃▃ ▂▂▂ ▁▁▁ ▁▁▁ ▁▁▁ ┴ 0.0034
 2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22

[править] Внешние ссылки