求r中无穷和的值

时间:2020-05-03 23:24:25

标签: r

我对R和编程非常陌生,所以请和我在一起:)

我正在尝试使用迭代来找到无限次迭代的值到小数点后第四位。即其中小数点后第四位不变。因此1.4223,其中3不再更改,因此小数点后3位的结果是1.422。

enter image description here

上面的链接显示了我遇到的类似问题的示例。我的问题是如何创建一个无穷大的for循环并找到小数点后第四位停止变化的值?

我已经尝试过使用while循环,但是我不确定如何阻止它永远循环下去。我需要一些if语句,如下所示:

result <- 0
i <- 1
d <- 1e-4
while(TRUE)
{
    result <- result + (1/(i^2))
    if(abs(result) < d)
    {
        break
    }
    i <- i + 1

}
result

1 个答案:

答案 0 :(得分:5)

这里是一个示例:使用while(TRUE) {}进行无限循环,并根据您的建议使用if子句和break在必要时停止。

## example equation shown
## fun <- function(x,n) {
##     (x-1)^(2*n)/(n*(2*n-1))
## }
## do it for f(x)=1/x^2 instead
## doesn't have any x-dependence, but leave it in anyway
fun <- function(x,n) {
     1/n^2
}

n <- 1
## x <- 0.6
tol <- 1e-4
ans <- 0
while (TRUE) {
   next_term <- fun(x,n)
   ans <- ans + next_term
   if (abs(next_term)<tol) break
   n <- n+1
}

运行时会得到ans=1.635082n=101

  • R也有一个很少使用的repeat { }关键字,但是while(TRUE)对于读者来说可能更清楚
  • 有更有效的方法(例如,将分子乘以(x-1)^2来计算分子)
  • 通常也要测试最大迭代次数,因此,如果系列不收敛或代码中有错误,则不要设置真正的无限循环。
  • 我还没有解决您的确切问题(选择较小的tol值),但是您应该可以对此进行调整以获得答案
  • answer to your previous question中所述,
  • 不能保证,但通常应该可以;您可以检查(我没有)以确保要评估的特定序列具有良好的收敛性