C++11 normal_distribution и MATLAB normpdf

Мне нужно разработать функцию normpdf MATLAB в среде C++. Но у меня возникла проблема..

normpdf(X, u, sigma) в MATLAB похож на normal_distribution gaussian(u, sigma);

где значения Х? Это означает, что я хочу, чтобы функция Гаусса не была случайной по Гауссу. Как выбрать выходное значение с распределением по Гауссу?

Спасибо.


person LocoField    schedule 01.04.2015    source источник


Ответы (1)


Вы могли бы легко написать normalpdf самостоятельно

inline double squared(double x)
{
    return x*x;
}

double normpdf(double x, double u, double s) { 
    return (1.0/(s*sqrt(2.0*M_PI)))*exp(-0.5*squared(x-u)/squared(s));
}

ОБНОВИТЬ

Это может быть немного быстрее, меньше одного умножения

const double ONE_OVER_SQRT_2PI = 0.39894228040143267793994605993438;

double normpdf(double x, double u, double s) { 
    return (ONE_OVER_SQRT_2PI/s)*exp(-0.5*squared((x-u)/s));
}
person Severin Pappadeux    schedule 01.04.2015
comment
Спасибо, это очень просто. - person LocoField; 01.04.2015
comment
@LocoField Насколько я вижу, в стандартной библиотеке C++ такой функции нет. Пожалуйста, проверьте себя, en.cppreference.com/w - person Severin Pappadeux; 01.04.2015