很多时候,对于现实生活中的问题,不能具体化,找不到实际问题的具体变量。此时,可以考虑蒙特卡罗模拟,此主要的思想就是产生符合某一问题的大量随机数,进而对随机数进行研究分析。
#所有服从个特定分布的随机数皆在U(0,1)均匀随机数的基础变换而得来。
n <- 1000
m <- runif(n,0,1)
#逆变换法 eg:求服从指数分布的随机数,参数λ为1.其分布函数为y = 1- e^-x,其反函数g = - ln(1-u)
#逆变换法的主要思想为,对于连续行变量的分布函数F(x)服从0,1均匀分布
u <- runif(500,0,1)
g <- -log(1-u)
hist(g)
#对于零散型随机变量的产生,同样可以用逆变换法产生,eg:二项分布
u1 <- runif(400)
u2 <- as.integer(u1>0.6)
#舍选法,最大值M,x的取值区间[a,b]
while(y <= u2) {
u1 <- u*(b-a)+a
y <- f(u1)
u2 <- M*u
}
#所有服从个特定分布的随机数皆在U(0,1)均匀随机数的基础变换而得来。
n <- 1000
m <- runif(n,0,1)
#逆变换法 eg:求服从指数分布的随机数,参数λ为1.其分布函数为y = 1- e^-x,其反函数g = - ln(1-u)
#逆变换法的主要思想为,对于连续行变量的分布函数F(x)服从0,1均匀分布
u <- runif(500,0,1)
g <- -log(1-u)
hist(g)
#对于零散型随机变量的产生,同样可以用逆变换法产生,eg:二项分布
u1 <- runif(400)
u2 <- as.integer(u1>0.6)
#舍选法,最大值M,x的取值区间[a,b]
while(y <= u2) {
u1 <- u*(b-a)+a
y <- f(u1)
u2 <- M*u
}