实际中往往使用伪随机数。
这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。
计算机产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。
如果想要使用随机数,又想能够结果复现,可以指定随机数种子。
一般种子可以以当前的系统时间,这是完全随机的。
一个种子生成一个固定的随机数序列
清空工作空间并不能消除随机数的影响,随机数的作用时间一直到下一次重新设置随机数种子生效。所以每次设置种子是一个起点。
一旦设了一个随机数种子,后面所有随机过程都使用这个种子,跟使用次数有关。即依次使用序列里面的随机数给随机过程,在上次的序列上继续向下取随机数,直到遇到重新设置种子的命令,再重新从序列取。整个序列是固定的。
R语言
set.seed(1234) # 设置随机数种子
lambda0 <- runif(1,min = 0,max = 0.5) # 产生一个服从均匀分布的随机数
set.seed(seed = NULL) # 重新初始化,就像尚未设置任何种子一样。
服从不同分布的随机数参见:https://blog.csdn.net/zhyoulun/article/details/46413727
总结:
若采用随机数种子100,它将生成一个随机数序列,如果再次启动set.seed(100),它则按照之前的序列从头开始生成随机数,两次生成的随机序列相同。
C语言
生成[a,b]之间随机数:rand()%(b-a+1)+a
原理:rand()%(b-a+1)是产生 0~(b-a) 的随机数,后面+a保证下限是0+a=a,最大就是 b-a+a=b
#include <stdio.h>
# include <stdlib.h> // 使用rand()函数
# include <time.h> // 设定随机数种子
int main()
{
srand((unsigned int)time(NULL)); // 以当前时间作为种子
a=rand()%100+1; // 生成[1,100]随机数
printf("本次产生的随机数为:%d\n", a);
return 0;
}