使用 Rejection Method 从分布函数进行模拟
Simulate from a distribution function using Rejection Method
我正在尝试为以下分布模拟数据 10000 个观察值:
{ 3x(1-x)2 0 < x < 1
f(x) = { 3(2-x)(1-x)2 1 ≤ x < 2
{ 0 otherwise
使用拒绝方法,我通过以下矩形对分布进行装箱:x=0,x=2,y=0,y=2
但是,我的以下代码似乎无法正常工作,因此存在一些错误。任何人都可以建议修复吗?
n=10000
t=0
x=0
while(t<n)
{u=runif(1,0,2)
y=runif(1,0,2)
if {(u in c(0:1))
fun=3*u*(1-u)^2
else (u in c(1:2))
fun=3*(2-u)*(1-u)^2}
if (y<fun)
{t=t+1
x[t]=u}}
你有一堆 R 语法错误。您应该复习基本的 R 介绍。放置牙套时要小心。 R 中也没有 in
关键字。
n <- 10000
t <- 0
x <- 0
while(t<n) {
u <- runif(1,0,2)
y <- runif(1,0,2)
if (u > 0 & u < 1) {
fun <- 3*u*(1-u)^2
} else if (u >= 1 & u < 2) {
fun <- 3*(2-u)*(1-u)^2
} else {
fun <- 0
}
if (y<fun){
t <- t+1
x[t] <- u
}
}
我正在尝试为以下分布模拟数据 10000 个观察值:
{ 3x(1-x)2 0 < x < 1
f(x) = { 3(2-x)(1-x)2 1 ≤ x < 2
{ 0 otherwise
使用拒绝方法,我通过以下矩形对分布进行装箱:x=0,x=2,y=0,y=2
但是,我的以下代码似乎无法正常工作,因此存在一些错误。任何人都可以建议修复吗?
n=10000
t=0
x=0
while(t<n)
{u=runif(1,0,2)
y=runif(1,0,2)
if {(u in c(0:1))
fun=3*u*(1-u)^2
else (u in c(1:2))
fun=3*(2-u)*(1-u)^2}
if (y<fun)
{t=t+1
x[t]=u}}
你有一堆 R 语法错误。您应该复习基本的 R 介绍。放置牙套时要小心。 R 中也没有 in
关键字。
n <- 10000
t <- 0
x <- 0
while(t<n) {
u <- runif(1,0,2)
y <- runif(1,0,2)
if (u > 0 & u < 1) {
fun <- 3*u*(1-u)^2
} else if (u >= 1 & u < 2) {
fun <- 3*(2-u)*(1-u)^2
} else {
fun <- 0
}
if (y<fun){
t <- t+1
x[t] <- u
}
}