2017-11-18 1 views
0

수락 거부 방법을 사용하여 임의의 변수를 생성하는 다음 사용자 정의 함수를 만들었습니다. 그러나 호출 될 때마다 내 프로그램이 계속 진행되고 결국 충돌이 발생하거나 강제 종료해야합니다. 나는 그것을 여러 번 통과했다. 이 문제의 원인은 무엇입니까?내 프로그램이 중단되는 이유는 무엇입니까?

나는 이것을 쓰는 가장 좋은 방법이 아닐 수도 있다는 것을 알고있다. (어제는 R을 처음 사용했을 때다.) 그래서 추가 팁은 보너스 다.

acceptReject <- function(){ 
    Z <- 0 
    Y <- c(0,0) 
    while(Y[2] < .5*(Y[1]-1)**2){ 
    U <- runif(2,0,1) 
    Y <- log(U) 
    } 
    Z <- Y[1] 
    U <- runif(1,0,1) 
    if(U <= .5){ 
    Z <- abs(Z) 
    } 
    else{ 
    Z <- -abs(Z) 
    } 
    Z 
} 

답변

1

무한 루프가 있습니다.

당신이 Y ~ log([0,1])가 (수학적으로), 즉 항상 각각 -Inf0, 동일시, log(0)log(1) 사이의 범위 것을 의미한다고 가정합니다. (결론은 항상 0보다 작거나 같음)

이제 조건을 살펴 보겠습니다. .5*(Y[1]-1)**2. 당신이 도메인을 알고있는 경우 Y는이 공식의 범위는 (이 항상보다-크거나 동등한-0.5이다.) 그 다음, c(-Inf,0)

.5*(c(-Inf,0)-1)**2 
# [1] Inf 0.5 

입니다 Y 이후

항상 <= 0이고 수식은 항상 입니다. 조건은 수학적으로 항상 true입니다. 무한 루프.

관련 문제