R编程:当我运行以下代码时,我想知道为什么我的rand向量总是保持为零向量?

时间:2014-03-05 17:57:42

标签: r

    M1 <- 1.69683*0.424

    "g2" <- function(u)
    {x<-0.1*tan(pi*u*1.5)+0.9465}

    "g" <- function(x)
      {(1/(1.69683*pi*(0.1^2+(x-0.9465)^2)))}



    n<-10
    rand <- rep(0,n)



i <- 1
    count <- 0

    while(i<=n)
    {u <- runif(1)
     u1 <- runif(1)
     x <- g2(u)
     f<-exp(-0.5*(-2+log(x/(1-x)))^2)/(x*(1-x))
     if(m*g(x)*u1<=f)
     {rand[i] <- x
       i <- i+1
     }
     else count <- count+1
     }

此外,我总是收到此错误消息,有人可以解释原因吗?

if(m * g(x)* u1&lt; = f){的错误:   缺少需要TRUE / FALSE的值 另外:警告信息: 在log(x /(1 - x))中:产生NaNs

谢谢!

1 个答案:

答案 0 :(得分:1)

函数g2(u)在u = 1/3和1处具有渐近线,因此g2可以取值> 1。因为你设置:

 x <- g2(u)
 f<-exp(-0.5*(-2+log(x/(1-x)))^2)/(x*(1-x))
f

g2 > 1未定义(NAN),这会导致以下if语句因您收到错误而失败。

我不确定你在这里要做什么,但一般来说你应该首先绘制你的函数以了解它们的行为方式。例如,

z <- seq(0,.999,.001)
plot(z,g2(z), type="l")

会在某些情况下立即向您显示g2 >1