如何生成随机数直到差值之和为 3000?
How to generate random numbers until sum of difference is 3000?
我需要生成随机数,直到满足条件(每个随机数的差之和为3000。)。
并且已经从截断的正态分布中生成了随机数。
我已经尝试使用 while 循环 while(1) 和 if ,但它没有正常工作。
如何根据条件生成新的随机数序列?
truncnorm_rn <- rtruncnorm(1000,0,30,0,1)
a <- 0
b <- 0
c <- 0 # sum of diffrences between truncnorm random number
d <- NULL # New sequnce with condition
while(1){
a <- truncnorm_rn[1]
b <- truncnorm_rn[2]
c <- sum(a - b)
if(c > 3000) break
}
您要求的是以下内容。这将生成一个 new 大小为 1,000 的截断正态序列,直到该序列中所有数字的绝对差异大于 3,000。
library(truncnorm)
abs_diff <- 0
i <- 0
while(abs_diff <= 3000) {
i <- i + 1
series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 0, sd = 1)
abs_diff <- sum(abs(diff(series)))
}
# the iteration where the sum of absolute differences is > 3,000
i
# the series of numbers that satisfied the condition
series
但是,我不知道您的条件是否会满足截断法线的那些参数(至少很快)。我 运行 这进行了 125k 次迭代并且不满足条件。如果您更改 mean
或 sd
(请参阅下面的示例代码),您将在更合理的时间内找到满足条件的系列。
abs_diff <- 0
i <- 0
while(abs_diff <= 3000) {
i <- i + 1
series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 5, sd = 2.6)
abs_diff <- sum(abs(diff(series)))
}
我需要生成随机数,直到满足条件(每个随机数的差之和为3000。)。
并且已经从截断的正态分布中生成了随机数。
我已经尝试使用 while 循环 while(1) 和 if ,但它没有正常工作。
如何根据条件生成新的随机数序列?
truncnorm_rn <- rtruncnorm(1000,0,30,0,1)
a <- 0
b <- 0
c <- 0 # sum of diffrences between truncnorm random number
d <- NULL # New sequnce with condition
while(1){
a <- truncnorm_rn[1]
b <- truncnorm_rn[2]
c <- sum(a - b)
if(c > 3000) break
}
您要求的是以下内容。这将生成一个 new 大小为 1,000 的截断正态序列,直到该序列中所有数字的绝对差异大于 3,000。
library(truncnorm)
abs_diff <- 0
i <- 0
while(abs_diff <= 3000) {
i <- i + 1
series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 0, sd = 1)
abs_diff <- sum(abs(diff(series)))
}
# the iteration where the sum of absolute differences is > 3,000
i
# the series of numbers that satisfied the condition
series
但是,我不知道您的条件是否会满足截断法线的那些参数(至少很快)。我 运行 这进行了 125k 次迭代并且不满足条件。如果您更改 mean
或 sd
(请参阅下面的示例代码),您将在更合理的时间内找到满足条件的系列。
abs_diff <- 0
i <- 0
while(abs_diff <= 3000) {
i <- i + 1
series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 5, sd = 2.6)
abs_diff <- sum(abs(diff(series)))
}