楼主: sty1882
3743 2

[有偿编程] ####关于在R里定义三角分布函数##### [推广有奖]

  • 4关注
  • 0粉丝

硕士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
2548 个
通用积分
2.8500
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
422 点
帖子
34
精华
0
在线时间
258 小时
注册时间
2009-5-4
最后登录
2025-4-10

楼主
sty1882 发表于 2016-1-24 20:40:50 |AI写论文
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的定义中,一次性地定义好这个函数呢?


谢谢!

最佳答案

qoiqpwqr 查看完整内容

你在TriAng_Dis里面加个循环
关键词:分布函数 分布函数

沙发
qoiqpwqr 发表于 2016-1-24 20:40:51
你在TriAng_Dis里面加个循环

  1. TriAng_Pre <- function(vecabc, n)
  2. {
  3.     min <- vecabc[1]
  4.     mode <- vecabc[2]
  5.     max <- vecabc[3]
  6.    
  7.     out <- rep(NA, n)
  8.     for (i in 1:n) {
  9.         u <- runif(1,0,1)
  10.         if (u <= (mode-min)/(max-min) ){
  11.             r=min+sqrt(u*(max-min)*(mode-min))  }else{
  12.                 r=max-sqrt((1-u)*(max-min)*(max-mode))
  13.             }
  14.         out[i] <- r
  15.     }
  16.     return(out)
  17. }
复制代码

藤椅
sty1882 发表于 2016-1-25 12:27:46
qoiqpwqr 发表于 2016-1-24 22:29
你在TriAng_Dis里面加个循环
赞!!!
谢谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 06:47