Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Seed - Fatal编程技术网

R 种子序列-(寻找特定结果)

R 种子序列-(寻找特定结果),r,loops,seed,R,Loops,Seed,我怎样才能改变种子,使它给我的结果,我正在寻找,当匹配被发现时,我怎样才能得到种子的号码 守则: set.seed(0) delta_S<- rep(0,10) S<- rep(100,10) epsilon<- rep(0,10) for(i in 1:10){ epsilon[i]=rnorm(1,0,1) delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i] S[i+1]=S[i]+

我怎样才能改变种子,使它给我的结果,我正在寻找,当匹配被发现时,我怎样才能得到种子的号码

守则:

set.seed(0)
delta_S<- rep(0,10)
S<- rep(100,10)  
epsilon<- rep(0,10)

  for(i in 1:10){
  epsilon[i]=rnorm(1,0,1)
  delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
  S[i+1]=S[i]+delta_S[i]
 }
  S
  S[11]
set.seed(0)

delta_S你可以用这种蛮力方法。请记住,这不是有效的,但它确实起到了作用。基本上,您希望循环遍历种子编号并打印出S[11]等于111.54的种子。我把结果四舍五入到2位小数。在10000颗种子中,我发现了两颗S[11]等于111.54:535和1937

for (seed_number in 1:10000){
    set.seed(seed_number)
  for(i in 1:10){
    epsilon[i]=rnorm(1,0,1)
    delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
    S[i+1]=S[i]+delta_S[i]
  }
  if(round(S[11],2)==111.54) print(paste("seed is",seed_number))
}

[1] "seed is 535"
[1] "seed is 1937"
使用您的代码,您可以验证
set.seed(535)
将导致S[11]=111.5372。这同样适用于
set.seed(1937)

set.seed(535)

delta_S你可以用这种蛮力方法。请记住,这不是有效的,但它确实起到了作用。基本上,您希望循环遍历种子编号并打印出S[11]等于111.54的种子。我把结果四舍五入到2位小数。在10000颗种子中,我发现了两颗S[11]等于111.54:535和1937

for (seed_number in 1:10000){
    set.seed(seed_number)
  for(i in 1:10){
    epsilon[i]=rnorm(1,0,1)
    delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
    S[i+1]=S[i]+delta_S[i]
  }
  if(round(S[11],2)==111.54) print(paste("seed is",seed_number))
}

[1] "seed is 535"
[1] "seed is 1937"
使用您的代码,您可以验证
set.seed(535)
将导致S[11]=111.5372。这同样适用于
set.seed(1937)

set.seed(535)

delta_S您可以使用while循环

S = rep(0, 100)
j = 0

# You can vary digits in order to obtain more precision if you wish
while(round(S[11], digits=2) != 111.54){

  j = j + 1
  set.seed(j)
  delta_S<- rep(0,10)
  S <- rep(100,10)  
  epsilon<- rep(0,10)

  for(i in 1:10){
    epsilon[i]=rnorm(1,0,1)
    delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
    S[i+1]=S[i]+delta_S[i]
  }

}

> j
535

> S
[1] 100.0000  94.6090 103.9302 104.7556 103.1598 105.6781 106.1706 109.8297 109.4760 107.2198 111.5372

> S[11]
111.5372
S=rep(01100)
j=0
#如果愿意,您可以更改数字以获得更高的精度
而(四舍五入(S[11],数字=2)!=111.54){
j=j+1
种子集(j)
delta_S[11]
111.5372

您可以使用while循环

S = rep(0, 100)
j = 0

# You can vary digits in order to obtain more precision if you wish
while(round(S[11], digits=2) != 111.54){

  j = j + 1
  set.seed(j)
  delta_S<- rep(0,10)
  S <- rep(100,10)  
  epsilon<- rep(0,10)

  for(i in 1:10){
    epsilon[i]=rnorm(1,0,1)
    delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
    S[i+1]=S[i]+delta_S[i]
  }

}

> j
535

> S
[1] 100.0000  94.6090 103.9302 104.7556 103.1598 105.6781 106.1706 109.8297 109.4760 107.2198 111.5372

> S[11]
111.5372
S=rep(01100)
j=0
#如果愿意,您可以更改数字以获得更高的精度
而(四舍五入(S[11],数字=2)!=111.54){
j=j+1
种子集(j)
delta_S[11]
111.5372

Pierre Laopointe提供了解决此问题的好方法,但请注意,您得到了两个符合逻辑的答案,因为:

set.seed(535)
for(i in 1:10){
+   epsilon[i]=rnorm(1,0,1)
+   delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
+   S[i+1]=S[i]+delta_S[i]
+ }
> print(S[11])
[1] 111.5372
> set.seed(1937)
> for(i in 1:10){
+   epsilon[i]=rnorm(1,0,1)
+   delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
+   S[i+1]=S[i]+delta_S[i]
+ }
> print(S[11])
[1] 111.5388
你有10倍的随机ε[i],我不知道你是否需要这些信息,但重要的是它们在每个选项中都不同

> set.seed(535)
> rnorm(10,0,1)
 [1] -1.3651733  2.2988608  0.1215605 -0.4354961  0.5174488  0.0426911  0.7590733 -0.1467427 -0.5647193  0.8985600
> set.seed(1937)
> rnorm(10,0,1)
 [1] -0.780397161 -1.862636176  1.900480228  0.999418781  0.492969410 -0.005050631 -0.130317961  0.140431618  0.621808733
[10]  0.767121606

因此,这并不意味着你得到的种子将在不同的循环中与其他种子产生相同的结果。

Pierre Laopointe提供了解决这个问题的好方法,但请注意,你得到了两个符合逻辑的答案,因为:

set.seed(535)
for(i in 1:10){
+   epsilon[i]=rnorm(1,0,1)
+   delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
+   S[i+1]=S[i]+delta_S[i]
+ }
> print(S[11])
[1] 111.5372
> set.seed(1937)
> for(i in 1:10){
+   epsilon[i]=rnorm(1,0,1)
+   delta_S[i]=0.15*(1/52)*S[i]+0.3*(sqrt(1/52))*epsilon[i]*S[i]
+   S[i+1]=S[i]+delta_S[i]
+ }
> print(S[11])
[1] 111.5388
你有10倍的随机ε[i],我不知道你是否需要这些信息,但重要的是它们在每个选项中都不同

> set.seed(535)
> rnorm(10,0,1)
 [1] -1.3651733  2.2988608  0.1215605 -0.4354961  0.5174488  0.0426911  0.7590733 -0.1467427 -0.5647193  0.8985600
> set.seed(1937)
> rnorm(10,0,1)
 [1] -0.780397161 -1.862636176  1.900480228  0.999418781  0.492969410 -0.005050631 -0.130317961  0.140431618  0.621808733
[10]  0.767121606

因此,这并不意味着您收到的种子将在不同的循环中与其他种子产生相同的结果。

非常感谢您的解释。这不仅对此代码很有帮助,而且对更多代码也很有帮助。我将使用更高的种子编号运行此代码,因为我正在寻找更接近的值。再次感谢。@Deltaor Good。请勿放弃et勾选您最喜欢的解决方案,以便其他用户知道此问题已得到回答。非常感谢您的解释。这不仅对此代码有帮助,而且对更多内容也有帮助。我将使用更高的种子编号运行此代码,因为我正在查找更接近的值。再次感谢。@Deltaor很好。请不要忘记勾选您最喜欢的解决方案,以便其他呃,所以用户知道这个问题已经得到了回答。您好,谢谢您花时间回答我的问题。现在我能够比较两种不同的方法。非常感谢。@Delator:不客气,很高兴我能提供帮助。如果您要寻找更准确的值,请更改舍入条件中的精度。如果您将条件更改为数字=3,19256的种子将给出S[11]=111.5401,如果设置数字=4的条件,1682132的种子将给出S[11]=111。54@Deltaor我用100000个种子运行循环,并
set.seed(19256)
S[11]=111.540095839911谢谢!!。我本来打算这么做的,但这是你发布的代码或尼山的代码。我很困惑,因为这是我第一次使用这个网站。@Deltaor,我想你应该使用你最熟悉的代码。嗨,谢谢你花时间回答我的问题。现在我可以比较两个不同的approaches。非常感谢。@Delator:不客气,很高兴我能帮助你。如果你想寻找更精确的值,请更改舍入条件中的精度。如果你将条件更改为数字=3,19256的种子将给你S[11]=111.5401,如果你设置数字=4的条件,1682132的种子将给你S[11] = 111.54@Deltaor我用100000个种子运行了这个循环,种子(19256)
给了S[11]=111.540095839911很多钱!!。我本来打算这么做的,但这是你发布的代码或尼山的代码。我很困惑,因为这是我第一次使用这个网站。@Deltaor,我想你应该使用你最熟悉的代码。