gpt4 book ai didi

r - 使用 Polar 方法模拟随机变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:59 25 4
gpt4 key购买 nike

我有以下算法

第一步,生成u1和u2~U(0,1)

第 2 步。定义 v1=2u1-1、v2=2u2-1 和 s=v1^2+v2^2

第 3 步。如果 s>1,回到第 1 步。

步骤 4. 如果 s<=1, x=v1(-2logs/s)^(1/2) 和 y=v2(-2logs/s)^(1/2)

这是我在 R 中实现此算法的方法:

    PolarMethod1<-function(N)
{

x<-numeric(N)
y<-numeric(N)
z<-numeric(N)

i<-1

while(i<=N)
{u1<-runif(1)
u2<-runif(1)
v1<-(2*u1)-1
v2<-(2*u2)-1
s<-(v1^2)+(v2^2)

if(s<=1)
{
x[i]<-((-2*log(s)/s)^(1/2))*v1
y[i]<-((-2*log(s)/s)^(1/2))*v2
z[i]<-(x[i]+y[i])/sqrt(2) #standarization
i<-i+1
}
else
i<-i-1
}

return(z)
}
z<-PolarMethod1(10000)
hist(z,freq=F,nclass=10,ylab="Density",col="purple",xlab=" z values")
curve(dnorm(x),from=-3,to=3,add=TRUE)

幸运的是,该代码没有标记任何错误并且与 N=1000 配合使用时效果很好,但是当我更改为 N=10000 时,没有采用更好的方法到曲线显示:

N=10000

与 N=1000 显示器对比:

N=1000

这是为什么?

我的代码有问题吗?当N增加时,应该会更好地调整它。

注意:我在代码中添加了 z 以在输出中包含两个变量。

最佳答案

为什么 1000 次和 100000 次运行之间存在差异?

当您运行 1000 次模拟时,z 值通常从 -3.2 变为 3.2。但是,如果将运行次数增加到 100k,您将获得更多的极值,z 将从 -4 变为 4。

直方图将 z 结果分成 10 个 bin。 z 的范围越大,bin 越宽,而 bin 越宽,通常对概率密度的调整越差。

1000 次运行的 bin 宽度约为 0.5,但 100k 为 1。

关于r - 使用 Polar 方法模拟随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com