假设我正在寻求将以下函数从0到10集成:
我如何在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
答案 0 :(得分:2)
以下内容如何:
首先,我们选择固定种子进行再现。
# Density funciton phi
set.seed(2017);
phi <- approxfun(density(rnorm(35, 15, 7)))
我们定义了被积函数。
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
替换为0
。
让我们绘制integrand
library(ggplot2);
ggplot(data.frame(x = 0), aes(x)) + stat_function(fun = integrand) + xlim(-50, 50);
我们使用integrate
来计算积分;在这里,我假设你对间隔[-Inf, +Inf]
感兴趣。
integrate(integrand, lower = -Inf, upper = Inf)
#-39323.06 with absolute error < 4.6