设随机变量X的密度函数为f(x) = (1/2)x^2 e^(-x),x>0 是模拟次随机变量X。解题并用R语言写出相关代码,绘制出图像
时间: 2024-04-17 08:28:45 浏览: 141
要模拟随机变量X,可以使用拒绝抽样方法。步骤如下:
1. 找到一个辅助密度函数g(x),使得对于所有x,都有 f(x) ≤ M * g(x),其中M是一个常数。
2. 生成一个服从辅助密度函数g(x)的随机变量Y。
3. 生成一个在[0, M*g(Y)]之间均匀分布的随机变量U。
4. 如果 U ≤ f(Y),则接受Y作为X的一个样本;否则,返回步骤2。
以下是使用R语言实现上述步骤的代码:
```R
# 定义目标密度函数 f(x)
f <- function(x) {
return((1/2) * x^2 * exp(-x))
}
# 定义辅助密度函数 g(x),这里选择指数分布作为辅助密度函数
g <- function(x) {
return(exp(-x))
}
# 定义常数 M,使得 f(x) ≤ M * g(x)
M <- 2
# 拒绝抽样函数
rejection_sampling <- function(f, g, M, n) {
x_samples <- numeric(n)
accepted <- 0
while (accepted < n) {
# 生成辅助密度函数 g(x) 的样本
y <- rexp(1)
# 生成均匀分布 U
u <- runif(1, min = 0, max = M * g(y))
# 判断是否接受样本
if (u <= f(y)) {
x_samples[accepted+1] <- y
accepted <- accepted + 1
}
}
return(x_samples)
}
# 设置参数
n <- 1000 # 抽样次数
# 执行拒绝抽样
x_samples <- rejection_sampling(f, g, M, n)
# 绘制图像
hist(x_samples, freq = FALSE, breaks = "FD", xlim = c(0, max(x_samples)), main = "Rejection Sampling")
curve(f(x), from = 0, to = max(x_samples), add = TRUE, col = "red", lwd = 2)
```
上述代码中,我们定义了目标密度函数f(x)和辅助密度函数g(x),并选择了合适的常数M。然后使用拒绝抽样方法进行抽样,并绘制了抽样结果的直方图,并在图中添加了真实的目标密度函数曲线。
阅读全文