正態隨機數和柯西隨機數
阿新 • • 發佈:2019-02-17
要想實現隨機數和柯西隨機數,先要有任意隨機數產生,後面柯西需要。程式碼基於C++,如下:
template<typename T>
T randT(T Lower, T Upper)
{
T temp;
if (Lower > Upper)
{
temp = Upper;
Upper = Lower;
Lower = temp;
}
return (double)rand()/RAND_MAX *(Upper - Lower) + Lower;
}
正態隨機數產生,完美
double N(double mu, double sigma)
{
int i;
double r, sum = 0.0;
if (sigma <= 0.001) //強制拉回,以防止方差小於0
sigma = 0.001;
for (i = 1; i <= 12; i++)
sum = sum + randT<double>(0,1);
r = (sum - 6.00)*sigma + mu;
return r;
}
柯西隨機數產生,柯西隨機數也本質是兩個服從正態分佈N(0,1)產生的隨機數的比值!
double cauchy(double mu, double lamda)
{
double u = randT<double>(0,1);
return mu - lamda / tan(PI*u);
}