R中的谐波级数和函数

我正在尝试编写一个带有正实数的函数,并继续添加谐波系列的项,直到总和超过初始参数.

我需要我的函数来显示已添加的系列的术语总数.

到目前为止,这是我的代码:

harmonic<-function(n){
  x<-c(0,1)
  while (length(x) < n) {
    position <- length(x)
    new <- 1/(x[position] + x[position-1])
    x <- c(x,new)
  }
  return(x)
}

我为我的代码中的错误道歉,不幸的是我一直在使用R只有一个月,这是我第一次使用while循环,我找不到任何有用的信息.

谢谢,我真的很感谢你的帮助.

最佳答案 这是基于maths.stackexchange:
https://math.stackexchange.com/q/496116上这篇文章的一些信息的尝试

我无法谈论它是否在所有情况下都是高度准确的,甚至是最佳或适当的方式来解决这个问题.买者自负.

harmsum.cnt <- function(x,tol=1e-09) {
  em.cons <- 0.577215664901533
  difffun  <- function(x,n) x - (log(n) + em.cons + 1/(2*n) - 1/(12*n^2))
  ceiling(uniroot(difffun, c(1, 1e10), tol = tol, x = x)$root)
}

似乎工作正常但是:

harmsum.cnt(7)
#[1] 616

harmsum.cnt(15)
#[1] 1835421

相比:

tail(cumsum(1/1:616),1); tail(cumsum(1/1:615),1)
#7.001274
#6.999651

dput(tail(cumsum(1/1:1835421),1)); dput(tail(cumsum(1/1:1835420),1))
#15.0000003782678
#14.9999998334336
点赞