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