菜鸟求助:matlab如何取某一范围的随机数(要求可以取到端点)

来源:百度知道 编辑:UC知道 时间:2024/06/07 07:14:02
如何生成在闭区间[-5,5]上的随机数,我用R=-5+10*rand(),可是只能生成在开区间(-5,5)上的随机数,现在希望端点值-5和也同样可以取到,该怎么做呢?希望高手指点!!分不多,只能加20了,各位大虾帮帮忙啊,急!!!多谢~~~~~~~

rand本来就是产生[0,1]上的平均分布,只是由于计算机数值的离散性,实际只能产生[2^(-53), 1-2^(-53)]上的所有双精度值。

如果一定要取到0和1,只能牺牲精度。比如round(rand()*1e15)/1e15让所有小于2^-50的数都等于0,但由于精度的减少,实际能够产生的随机数值也大大减少。

但即使如此,想用round(rand()*1e15)/1e15得到0或1的概率也是极小的,可能这辈子你也得不到。(要知道,如果是真的实数的话,得到任何一个数的概率可都是0啊)

想要更容易的得到0或1,可以进一步的降低精度,把1e15该得更小即可。改成1e4的话大概有万分之一的概率让你可以得到0和1。

R=-5+10*round(rand()*1e5)/1e5让你有十万分之一的概率得到正负五

简单,把10改成11就可以了~R=-5+11*rand()