悬赏 20 个论坛币 已解决
RT
现在用的三角分布随机抽取函数是这样的:
TriAng_Pre <- function(vecabc)
{
min <- vecabc[1]
mode <- vecabc[2]
max <- vecabc[3]
u <- runif(1,0,1)
if (u <= (mode-min)/(max-min) ){
r=min+sqrt(u*(max-min)*(mode-min)) }else{
r=max-sqrt((1-u)*(max-min)*(max-mode))
}
r
}
a=50
b=70
c=100
M <- matrix(c(rep(a,10000),rep(b,10000),rep(c,10000)),10000)
Result <- apply(M,1,TriAng_Pre)
我想把它定义成一个简单的函数,只要给出最小,中间,最大值 就可以得出结果,不用每次都把这些Code运行一遍。我想到的做法是这样的。分两步:
TriAng_Pre <- function(vecabc)
{
min <- vecabc[1]
mode <- vecabc[2]
max <- vecabc[3]
u <- runif(1,0,1)
if (u <= (mode-min)/(max-min) ){
r=min+sqrt(u*(max-min)*(mode-min)) }else{
r=max-sqrt((1-u)*(max-min)*(max-mode))
}
r
}
TriAng_Dis <- function(A,B,C)
{
a=A
b=B
c=C
M <- matrix(c(rep(a,80000),rep(b,80000),rep(c,80000)),80000)
result <- apply(M,1,TriAng_Pre)
return(result)
}
得到的TriAng_Dis(A, B, C)就是我的三角分布函数。但是这个是分了两步定义的,有没有办法把TriAng_Pre 部分直接嵌入到TriAng_Dis的定义中,一次性地定义好这个函数呢?
谢谢!