Search code examples
rfunctionsum

Sum of function values in R


I am trying to calculate the following ( the image says f(n) = n \sum_{i=1}^{\infty} (c(i)*(1-c(i))^n)):

enter image description here

where c(i) is

c <- function(i){1/i^3}

In other words, f(2) is 2*{1^(-3)(1-1^(-3))^2+2^(-3)(1-2^(-3))^2+3^(-3)(1-3^(-3))^2+4^(-3)(1-4^(-3))^2+...}.

How to write such an f function in R?

My initial attempt is:

f <- function(n){n*sum(c*(1-c)^n)}

but this is obviously wrong with error

Error in 1 - c : non-numeric argument to binary operator

Please let me know if further clarification is needed. Thanks.


Solution

  • Clearly, you can't get an infinite sum unless you tackle it analytically, but since we can see that it's a convergent sum, we could look at, say, the first million like this:

    f <- function(n) { 
      C <- 1 / seq(1e6)^3
      n * sum(C * (1 - C)^n)
    }
    

    Which allows:

    f(1)
    #> [1] 0.1847138
    f(2)
    #> [1] 0.3387583
    f(3)
    #> [1] 0.4674204
    

    In case you are worried that this is not accurate enough, we get the same result out to 7 digits by summing only the first 10,000 terms, so 1 million should be very close to the converged value.