Приближение бесконечной суммы в R - PullRequest
0 голосов
/ 07 мая 2018

Я вычисляю функцию вероятности массы для переменной count, а нормализационный член представляет собой бесконечную сумму вида ∑f (n), где сумма проходит по всем неотрицательным целым числам (0-бесконечность). Я ищу функцию в R, которая приближает такую ​​сумму. После некоторых исследований я обнаружил, что классические процедуры являются приближениями, такими как метод Лапласа для сумм или формула суммы Эйлера-Маклаурина, но я не могу найти функцию для этого в R. Функция f (n) становится убывающей после некоторого n и сходится к 0. Функция

f (n) = exp (an + b * sqrt (n) - ln (n!)),

где a и b - некоторые константы.

1 Ответ

0 голосов
/ 07 мая 2018

Найти бесконечную сумму значений функции - это то же самое, что интегрировать эту функцию за тот же интервал. Вы можете использовать функцию 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! для очень большого числа. Поэтому наилучший подход для этого конкретного случая - найти верхнюю и нижнюю граничные функции и использовать их для приближения.

...