Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 随机数生成序列_R - Fatal编程技术网

R 随机数生成序列

R 随机数生成序列,r,R,我需要创建一个包含五个变量的函数 a(乘数) n(样本量) c(以默认值0递增) m(模数) x0(初始种子值) 我需要用这个方程生成一个随机数序列 xi=(a*xi-1+c)(mod m),i=1,2,…,n 如向量x=(x1,…,xn)所示 我的尝试: my.unif1(0){ x[n]听起来您想了解更多关于线性同余生成器的信息。以下资源可能会帮助您解决代码问题: lcg可以帮助: my.fct.1 <- function(x, multiplier, increment,

我需要创建一个包含五个变量的函数

  • a(乘数)
  • n(样本量)
  • c(以默认值0递增)
  • m(模数)
  • x0(初始种子值)
我需要用这个方程生成一个随机数序列

  • xi=(a*xi-1+c)(mod m),i=1,2,…,n
如向量x=(x1,…,xn)所示

我的尝试:

my.unif1(0){

x[n]听起来您想了解更多关于线性同余生成器的信息。以下资源可能会帮助您解决代码问题:

lcg可以帮助:

my.fct.1 <- function(x, multiplier, increment, modulus){
  increment <- ifelse(missing(increment), 0, increment) # setting the default increment to 0
  newval <- (multiplier*x + increment) %% modulus
  return(newval)
}

my.fct.2 <- function(x0, n, multiplier, increment, modulus){
  if(n == 1){
    val <- my.fct.1(x = x0, multiplier = multiplier, increment = increment, modulus = modulus)
    vec <- c(x0, val)
    return(vec)
  }
  if(n > 1){
    vec <- my.fct.2(x = x0, n = n-1, multiplier = multiplier, increment = increment, modulus = modulus)
    val <- vec[length(vec)]
    newval <- my.fct.1(x = val, multiplier = multiplier, increment = increment, modulus = modulus)
    newvec <- c(vec, newval)
    return(newvec)
  }

}
my.fct.1 <- function(x, multiplier, increment, modulus){
  increment <- ifelse(missing(increment), 0, increment) # setting the default increment to 0
  newval <- (multiplier*x + increment) %% modulus
  return(newval)
}

my.fct.2 <- function(x0, n, multiplier, increment, modulus){
  if(n == 1){
    val <- my.fct.1(x = x0, multiplier = multiplier, increment = increment, modulus = modulus)
    vec <- c(x0, val)
    return(vec)
  }
  if(n > 1){
    vec <- my.fct.2(x = x0, n = n-1, multiplier = multiplier, increment = increment, modulus = modulus)
    val <- vec[length(vec)]
    newval <- my.fct.1(x = val, multiplier = multiplier, increment = increment, modulus = modulus)
    newvec <- c(vec, newval)
    return(newvec)
  }

}
> my.fct.2(3, 9, 7, -1, 4)
 [1] 3 0 3 0 3 0 3 0 3 0
> my.fct.2(1, 9, 2, 1, 13)
 [1]  1  3  7  2  5 11 10  8  4  9
> my.fct.2(0, 17, 5, 3, 7)
 [1] 0 3 4 2 6 5 0 3 4 2 6 5 0 3 4 2 6 5
# and here the arguments set to cross check it against @mysteRious's answer
> my.fct.2(5, 20, 6, 7, 23)
 [1]  5 14 22  1 13 16 11  4  8  9 15  5 14 22  1 13 16 11  4  8  9
U <- my.fct.2(5, 20, 6, 7, 23)/23
> U
 [1] 0.21739130 0.60869565 0.95652174 0.04347826 0.56521739 0.69565217 0.47826087 0.17391304
 [9] 0.34782609 0.39130435 0.65217391 0.21739130 0.60869565 0.95652174 0.04347826 0.56521739
 [17] 0.69565217 0.47826087 0.17391304 0.34782609 0.39130435