这个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循环继续运行”。设置一些基本情况条件来确定牛顿法是否收敛,可能会使算法更稳健。