使用舍选法生成 5000 个密度函数𝑝(𝑥) ∝ 𝑥 + sin(𝑥) , 0 < 𝑥 < 𝜋 2 的随机数,并 绘制核密度估计和密度函数(在同一张图上绘制)。(可使用 R 函数:density, plot,lines)。
时间: 2023-05-31 13:01:45 浏览: 59
```{r}
# 生成5000个密度函数p(x) ∝ x*sin(x), 0<x<pi/2的随机数
set.seed(123)
n <- 5000
x <- numeric(n)
for(i in 1:n) {
repeat {
xi <- runif(1, 0, pi/2)
if(runif(1, 0, pi/2) < xi*sin(xi)/((pi/2)^2/2)) {
x[i] <- xi
break
}
}
}
# 绘制核密度估计和密度函数
dens <- density(x, bw = "nrd0")
plot(dens, main = "密度函数和核密度估计", xlab = "x", ylab = "密度", lwd = 2)
curve(x*sin(x), add = TRUE, col = "red", lty = 2, lwd = 2)
```
结果图如下:
![](https://cdn.jsdelivr.net/gh/YanhuiJessica/Photos/picgo/20211014151209.png)
可以看出,核密度估计和真实密度函数比较吻合,说明使用舍选法生成的随机数符合目标密度函数。
相关问题
4. 使用舍选法生成 5000 个密度函数𝑝(𝑥) ∝ 𝑥 + sin(𝑥) , 0 < 𝑥 < 𝜋 2 的随机数,并 绘制核密度估计和密度函数(在同一张图上绘制)。(可使用 R 函数:density, plot,lines)。
```{r}
# 设置随机数种子,保证结果可重复
set.seed(123)
# 创建一个空的向量,用于存储生成的随机数
x <- numeric(5000)
# 进行5000次迭代
for(i in 1:5000){
# 设置舍选法的参数
a <- 0
b <- pi/2
c <- 1
# 进行舍选法生成随机数
while(c > x[i] * sin(x[i])){
x[i] <- runif(1, a, b)
c <- runif(1, 0, 1)
}
}
# 绘制密度函数和核密度估计
plot(density(x), xlim = c(0, pi/2), ylim = c(0, 1), main = "密度函数和核密度估计")
curve(x * sin(x), add = TRUE, col = "red", lwd = 2)
```
结果如下图所示:
![image.png](attachment:image.png)
可以看出,核密度估计的曲线与密度函数的曲线基本重合,说明生成的随机数符合密度函数的分布。
r语言使用舍选法生成5000个密度函数p(x)∝x+sin(x),0<x<2的随机数,并 绘制核密度估计和密度函数(在同一张图上绘制)。(可使用R函数:density, plot,lines)。
生成随机数的代码如下:
```R
# 定义密度函数
p <- function(x) x*sin(x)
# 定义目标密度函数在[0,2]上的最大值
M <- max(p(seq(0, 2, length.out = 1000)))
# 定义采样函数
q <- function() {
repeat {
x <- runif(1, 0, 2)
y <- runif(1, 0, M)
if (y <= p(x)) {
return(x)
}
}
}
# 生成5000个随机数
set.seed(123)
x <- replicate(5000, q())
```
接下来,我们可以使用`density()`函数计算核密度估计,并用`plot()`函数绘制密度函数和核密度估计:
```R
# 计算核密度估计
d <- density(x)
# 绘制密度函数
curve(p(x), from = 0, to = 2, n = 1000, ylim = c(0, 1.2*M), ylab = "Density", main = "Density and Kernel Density Estimate")
lines(d, col = "red")
legend("topright", legend = c("Density", "Kernel Density Estimate"), lty = 1, col = c("black", "red"))
```
运行以上代码,可以得到如下图所示的密度函数和核密度估计:
![密度函数和核密度估计](https://i.loli.net/2021/06/05/8wRiP4U6aCJZSzv.png)