任意分布的随机数的产生方法—VC程序实现方法
2007-03-15 21:55:46 来源:WEB开发网核心提示: 基于以上思想,我们可以用程序实现在一定范围内服从正态分布的随机数,任意分布的随机数的产生方法—VC程序实现方法(4),程序如下:double Normal(double x,double miu,double sigma) //概率密度函数{return 1.0/sqrt(2*PI*si
基于以上思想,我们可以用程序实现在一定范围内服从正态分布的随机数。程序如下:
double Normal(double x,double miu,double sigma) //概率密度函数
{
return 1.0/sqrt(2*PI*sigma) * exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));
}
double NormalRandom(double miu,
double sigma,double min,double max)//产生正态分布随机数
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min,max);
y = Normal(dResult, miu, sigma);
dScope = AverageRandom(0, Normal(miu,miu,sigma));
}while( dScope > y);
return x;
}
参数说明:double miu:μ,正态函数的数学期望
double sigma:σ,正态函数的均方差
double min,double max,表明产生的随机数的范围
用如上方法,取 μ=0,σ=0.2,范围是-1~1产生400个正态随机数如图3所示:
图3 μ=0, σ=0.2,范围在-1~1时的400个正态分布的随机数分布图
取 μ=0, σ=0.05,范围是-1~1产生400个正态随机数如图4所示:
图4 μ=0,σ=0.05,范围在-1~1时的400个正态分布的随机数分布图
从图3和图4的比较可以看出, 越小,产生的随机数靠近 的数量越多,也说明了产生的随机数靠近 的概率越大。
我们,先产生4000个在0到4之间的正态分布的随机数,取μ=0,σ=0.2,再把产生的数据的数量做个统计,画成曲线,如下图5所示:
图5 μ=0, σ=0.2,范围在0~4时的4000个正态分布的随机数统计图
从图5中也可以看出,在靠近 处的产生的个数多,远离 处的产生的数量少,该图的轮廓线和概率密度曲线的形状刚好吻合。也就验证了该方法的正确性。
有了以上基础,也就用同样的方法,只要知道概率密度函数,也就不难产生任意分布的随机数,方法都是先产生一个点,然后进行取舍,落在概率密度曲线下方的点就满足要求,取其横坐标就是所要获取的随机数。
[]
- ››任意修改Powerpoint 2007中的剪贴画
- ››分布式网络爬虫关键技术分析与实现一网络爬虫相关...
- ››分布式 DBA: 创建和使用分区表
- ››分布式 Key-Value 存储系统:Cassandra 入门
- ››分布式 DBA: Cursor Stability Isolation Level 的...
- ››任意模板里调用任意栏目的文章
- ››分布式管理:用 HADR 减少停机时间(详细解释如何...
- ››分布式 DBA:存储、I/O 和 DB2,第 1 部分(针对在...
- ››分布式 DBA:使用物化查询表
- ››分布式存储系统的实现
- ››任意数学表达式计算
- ››分布式 DB2 UDB 服务器对比
更多精彩
赞助商链接