Как интегрировать произведение двух функций - PullRequest
0 голосов
/ 13 июня 2018

Предположим, я пытаюсь интегрировать следующую функцию от 0 до 10:

enter image description here

Как бы я достиг этого в R?

Функции

# Functional form
fn <- function(t) -100*(t)^2 + 20000

# First derivative w.r.t. t
fn_dt <- function(t) -200*t

# Density funciton phi
phi <- approxfun(density(rnorm(35, 15, 7)))

# Delta t
delta <- 5

1 Ответ

0 голосов
/ 13 июня 2018

Как насчет следующего:

  1. Прежде всего, мы выбираем фиксированное начальное число для воспроизводимости.

    # Density funciton phi
    set.seed(2017);
    phi <- approxfun(density(rnorm(35, 15, 7)))
    
  2. Определяем подынтегральное выражение.

    integrand <- function(x) {
        f1 <- -500 * x^2 + 100000;
        f2 <- phi(x);
        f2[is.na(f2)] <- 0;
        return(f1 * f2)
    }
    

    По умолчанию approxfun возвращает NA, если x выходит за пределы интервала [min(x), max(x)];поскольку phi основан на плотности нормального распределения, мы можем заменить NA s на 0.

  3. Давайте построим integrand

    library(ggplot2);
    ggplot(data.frame(x = 0), aes(x)) + stat_function(fun = integrand) + xlim(-50, 50);
    

enter image description here

Мы используем integrate для вычисления интеграла;здесь я предполагаю, что вас интересует интервал [-Inf, +Inf].

integrate(integrand, lower = -Inf, upper = Inf)
#-39323.06 with absolute error < 4.6
...