1.求均值
- double sum = std::accumulate(std::begin(resultSet), std::end(resultSet), 0.0);
- double mean = sum / resultSet.size(); //均值
2.求方差
- double accum = 0.0;
- std::for_each (std::begin(resultSet), std::end(resultSet), [&](const double d) {
- accum += (d-mean)*(d-mean);
- });
- double stdev = sqrt(accum/(resultSet.size()-1)); //方差
double
LogNormal(
double
x,
double
miu,
double
sigma)
//对数正态分布概率密度函数
{
return
1.0/(x*
sqrt
(2*PI)*sigma) *
exp
(-1*(
log
(x)-miu)*(
log
(x)-miu)/(2*sigma*sigma));
}
4.求正态分布随机数
- std::default_random_engine e; //引擎
- std::normal_distribution<double> n(mean, stdev); //均值, 方差
- std::vector<unsigned> vals(9);
- for(std::size_t i=0; i != 200; ++i) {
- unsigned v = std::lround(n(e)); //取整-最近的整数
- if (v < vals.size())
- ++vals[v];
- }
- for (std::size_t j=0; j != vals.size(); ++j)
- std::cout << j << " : " << vals[j] << std::string(vals[j], '*') << std::endl;