Согласно ответу на этот вопрос, который я пытался изменить параметр распределения в <random>
используя .param()
, Ниже приведен пример с игрушкой, где я пытаюсь это сделать.
Как для хи-квадрат, так и для нормального распределения у меня есть функция, которая генерирует два значения, второе, где параметр был изменен на .param()
, Я запускаю обе функции несколько раз и распечатываю среднее значение для обеих функций. Как и ожидалось, нормальная функция дает средние результаты 0 и 10. Неожиданно функция хи-квадрат дает средние результаты 4 и 4 вместо моих ожиданий 4 и 3. Почему мои ожидания не соответствуют ожиданиям распределения хи-квадрат?
#include <iostream>
#include <random>
#include <vector>
using namespace std;
vector<double> chisqtest(mt19937_64 &gen)
{
vector<double> res(2);
chi_squared_distribution<double> chisq_dist(4);
res[0] = chisq_dist(gen);
chisq_dist.param(std::chi_squared_distribution<double>::param_type (3));
res[1] = chisq_dist(gen);
return res;
}
vector<double> normtest(mt19937_64 &gen)
{
vector<double> res(2);
normal_distribution<double> norm_dist(0,1);
res[0] = norm_dist(gen);
norm_dist.param(std::normal_distribution<double>::param_type (10,1));
res[1] = norm_dist(gen);
return res;
}
int main() {
unsigned int n = 100000;
mt19937_64 gen(1);
vector<double> totals = {0,0}, res(2);
for(unsigned int i = 0; i < n; i++){
res = chisqtest(gen);
totals[0] += res[0];
totals[1] += res[1];
}
cout << totals[0]/n << " " << totals[1]/n << "\n";
vector<double> totals2 = {0,0}, res2;
for(unsigned int i = 0; i < n; i++){
res2 = normtest(gen);
totals2[0] += res2[0];
totals2[1] += res2[1];
}
cout << totals2[0]/n << " " << totals2[1]/n << "\n";
}
Задача ещё не решена.
Других решений пока нет …