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代码是什么意思? f_R_Loops_For Loop - Fatal编程技术网

这个R代码是什么意思? f

这个R代码是什么意思? f,r,loops,for-loop,R,Loops,For Loop,您正在运行定义为f的函数10次,每次都用上次运行的结果更新插入其中的值(x)。函数第一次运行时,x的值为0,因此方程0-(pnorm(0)-0.99)/dnorm(0)计算为1.228248。然后将此结果附加到数值向量,xj。然后,函数f再次运行,第一个结果插入为x--1.228248-(pnorm(1.228248)-0.99)/dnorm(1.228248)=1.759464。然后将此结果附加到向量xj的末尾 循环结束时,这将持续10次迭代。最后,xj打印到控制台: f <- func

您正在运行定义为
f
的函数10次,每次都用上次运行的结果更新插入其中的值
(x)
。函数第一次运行时,
x
的值为
0
,因此方程
0-(pnorm(0)-0.99)/dnorm(0)
计算为
1.228248
。然后将此结果附加到数值向量,
xj
。然后,函数
f
再次运行,第一个结果插入为
x
--
1.228248-(pnorm(1.228248)-0.99)/dnorm(1.228248)=1.759464
。然后将此结果附加到向量
xj
的末尾

循环结束时,这将持续10次迭代。最后,xj打印到控制台:

f <- function(x,q){ ## one step of the Newton iteration
  x-(pnorm(x)-q)/dnorm(x)
  }

x <- 0; #starting value
xj <- x # I don't know what is happening from this point onward! 
for (i in 1:10){
  x <- f(x,0.99);
  xj <- c(xj,x)
  }
print(xj)

如您所见,该算法在第7次迭代后收敛,因此增加循环运行次数将导致程序不断附加向量
xj
,并使用相同的最终值
2.326348
。如果您想单独观察每个迭代,只需从第六行中删除
for
语句及其周围的花括号,然后重复运行最后四行。

您正在运行定义为
f
的函数10次,每次更新插入其中的值
(x)
显示上次运行的结果。函数第一次运行时,
x
的值为
0
,因此方程
0-(pnorm(0)-0.99)/dnorm(0)
计算为
1.228248
。然后将此结果附加到数值向量,
xj
。然后,函数
f
再次运行,第一个结果插入为
x
--
1.228248-(pnorm(1.228248)-0.99)/dnorm(1.228248)=1.759464
。然后将此结果附加到向量
xj
的末尾

循环结束时,这将持续10次迭代。最后,xj打印到控制台:

f <- function(x,q){ ## one step of the Newton iteration
  x-(pnorm(x)-q)/dnorm(x)
  }

x <- 0; #starting value
xj <- x # I don't know what is happening from this point onward! 
for (i in 1:10){
  x <- f(x,0.99);
  xj <- c(xj,x)
  }
print(xj)

如您所见,该算法在第7次迭代后收敛,因此增加循环运行次数将导致程序不断附加向量
xj
,并使用相同的最终值
2.326348
。如果您想单独观察每个迭代,只需从第六行中删除
for
语句及其周围的花括号,然后重复运行最后四行。

这似乎是糟糕的编程。基本上,for循环的第一步将
f(x,0.99)
的结果与
x=0
一起存储为x的新值。然后,该新值存储为xj的新元素,第一个元素为0。当for循环经过迭代时,从
f(x,0.99)
计算出一个新的x,并存储为xj的新元素


我说这是一种糟糕的编程实践,因为当你做类似于
xj的事情时,这看起来就像是糟糕的编程。基本上,for循环的第一步将
f(x,0.99)
的结果与
x=0
一起存储为x的新值。然后,该新值存储为xj的新元素,第一个元素为0。当for循环经过迭代时,从
f(x,0.99)
计算出一个新的x,并存储为xj的新元素

我说这是一种糟糕的编程实践,因为当您执行类似于
xj的操作时,“for循环会在算法收敛后继续运行”。设置一些基本情况条件来确定牛顿方法是否收敛,可能会使算法更加健壮。好的一点是“在算法收敛后for循环继续运行”。设置一些基本情况条件来确定牛顿法是否收敛,可能会使算法更稳健。