要想实现随机数和柯西随机数,先要有任意随机数产生,后面柯西需要。代码基于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);
}