线性同余法产生随机数R语言

取k1=470001、m=999563(Skella)和初值w0=671800,运用一阶线性同余法,试用R编程生成50个【0,1】上均匀分布的随机数.

一阶线性同余法(Linear congruential generator, LCG)是一种常用的随机数生成方法,其公式为:

X_{n+1} = (a*X_n + c) mod m

其中,X_n 是当前的随机数,a、c 和 m 是预设的参数。

首先,我们需要明确你的问题的参数 a 和 c。然后,我们可以使用这些参数和给定的初始值 w0 来生成随机数。假设 a 和 c 的值分别为 1103515245 和 12345,那么以下是 R 语言的代码实现

# 设定参数  
k1 <- 470001  
m <- 999563  
w0 <- 671800  
a <- 1103515245  
c <- 12345  
  
# 初始化随机数列表  
random_numbers <- numeric(50)  
  
# 生成随机数  
for (i in 1:50) {  
  random_numbers[i] <- (a * w0 + c) %% m / m  
  w0 <- (a * w0 + c) %% m  
}  
  
# 输出随机数  
print(random_numbers)

引用 皆我百晓生 小程序回复内容作答:
在R语言中,可以使用线性同余法来生成随机数。以下是使用指定参数生成50个在[0,1]上均匀分布的随机数的R代码示例:

k1 <- 470001
m <- 999563
w0 <- 671800
n <- 50

random_numbers <- numeric(n)

for (i in 1:n) {
  wn <- (k1 * w0) %% m
  random_numbers[i] <- wn / m
  w0 <- wn
}

random_numbers

这段代码中,k1、m、w0分别代表线性同余法的参数。n表示要生成的随机数个数。在循环中,使用公式 (k1 * w0) %% m 计算下一个随机数,将其除以m得到[0,1]上的随机数,并将该随机数存储在random_numbers向量中。最后,打印输出random_numbers即可得到生成的50个[0,1]上均匀分布的随机数。

请注意,对于生成随机数,线性同余法在一些情况下可能不够理想,因为它可能存在周期性和不平均分布的问题。如果需要更好的随机性,可以考虑使用R中的其他随机数生成函数,例如runif()函数。