2015-04-01 78 views
0

我必須在C++環境中開發normpdf MATLAB函數。 但是我得到了一個問題..C++ 11 normal_distribution和MATLAB normpdf

normpdf(x,u,sigma)在MATLAB 與normal_distribution gaussian(u,sigma)相似;

其中是X值? 這意味着我想要高斯函數不是高斯隨機的。 我如何用高斯分佈對輸出值進行採樣?

謝謝。

回答

0

您可以輕鬆地編寫normpdf自己

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)); 
} 

UPDATE

這一條可能會快一點,少一個乘法

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)); 
} 
+0

謝謝,這是非常簡單的。 – LocoField 2015-04-01 18:20:06

+0

但我想知道一種使用C++ 11的方法。 – LocoField 2015-04-01 18:21:11

+0

@LocoField就我所見,標準C++庫中沒有這樣的函數。請檢查一下自己,http://en.cppreference.com/w/ – 2015-04-01 18:32:20