r语言用重要抽样蒙特卡罗积分估计e^-x/(1+x^2)在[0,1]上的积分并计算方差的代码
时间: 2024-05-22 19:12:08 浏览: 118
R语言方差分析
# 定义被积函数
f <- function(x) exp(-x)/(1+x^2)
# 定义重要抽样函数
g <- function(x) 1/(sqrt(2*pi))*exp(-(x-0.5)^2/2)
# 定义重要抽样蒙特卡罗积分函数
importance_sampling_MC <- function(f, g, n) {
# 生成从g中抽样的n个样本
samples <- rnorm(n, mean=0.5, sd=0.25)
# 计算g的值
g_values <- g(samples)
# 计算f/g的值
f_g_values <- f(samples)/g_values
# 计算积分估计值
integral <- mean(f_g_values)
# 计算方差
variance <- var(f_g_values)/n
# 返回积分估计值和方差
return(list(integral=integral, variance=variance))
}
# 设置随机数种子
set.seed(123)
# 调用重要抽样蒙特卡罗积分函数
result <- importance_sampling_MC(f, g, 10000)
# 输出积分估计值和方差
cat("Integral estimate:", result$integral, "\n")
cat("Variance:", result$variance)
阅读全文