Найти бесконечную сумму значений функции - это то же самое, что интегрировать эту функцию за тот же интервал. Вы можете использовать функцию integrate()
:
#Define the function
f <- function(x){ 1/(x**2)}
# First check on a segment
lower = 0.5
upper = 2
sum(f(seq(lower, upper, by=0.0001)))
# [1] 15002.13
# Integrate
integrate(f, lower, upper)
# 1.5 with absolute error < 3.8e-09
# For upper boundary to be infinity:
lower = 0.5
upper = Inf
integrate(f, lower, upper)
# 2 with absolute error < 8.4e-11
Если интеграция выполняется по целочисленным значениям, вы можете попытаться приблизить верхнюю границу и вычислить (хотя для некоторых функций это может быть очень медленно):
sum(f(1:(2^25)))
# [1] 1.644934
sum(f(1:(2^26))) # Check how much the value changes for even longer vector
# [1] 1.644934
Добавлено после добавления определения функции к вопросу:
Несколько замечаний об этой конкретной функции:
f(n) = exp(an + b*sqrt(n) - ln(n!))
В этой функции есть член ln(n!)
, для которого R будет очень трудно оценить, так как ему нужно будет вычислить N! для очень большого числа.
Поэтому наилучший подход для этого конкретного случая - найти верхнюю и нижнюю граничные функции и использовать их для приближения.