R, Comment while (TRUE) travail?

Je dois écrire une fonction de la méthode suivante :

Rejet méthode uniforme (enveloppe):

Supposons que fx est non nulle uniquement sur [a, b], et fx ≤ k.

  1. Générer X ∼ U(a, b) et Y ∼ U(0, k) est indépendant de X (et donc P =
    (X, Y ) est réparti uniformément sur le rectangle [a, b] × [0, k]).

  2. Si Y < fx(x) alors retourner X, sinon revenir à l'étape 1.

    rejectionK <- function(fx, a, b, K) {
        # simulates from the pdf fx using the rejection algorithm
        # assumes fx is 0 outside [a, b] and bounded by K
        # note that we exit the infinite loop using the return statement
    
        while (TRUE) {
          x <- runif(1, a, b)
          y <- runif(1, 0, K)
          if (y < fx(x)) return(x)
       }
    }

Je n'ai pas compris pourquoi est-ce TRUE dans while (TRUE) ?

if (y < fx(x)) n'est pas vraie, alors la méthode suggère de répéter la boucle pour générer le numéro homogène de nouveau. (y < fx(x)) n'est pas vrai=FAUX. Alors pourquoi ne pas la condition while (FALSE)?

De nouveau dans la base de qui aurai-je entrer dans la boucle while ? C'est, je suis habitué avec cette

   a=5 
   while(a<7){
      a=a+1
   }

ici, je définir un avant d'écrire la condition (a<7) .

Mais dans while (TRUE) , quelle affirmation est vraie ?

En outre:

vous pouvez exécuter les codes

  rejectionK <- function(fx, a, b, K) {
        # simulates from the pdf fx using the rejection algorithm
        # assumes fx is 0 outside [a, b] and bounded by K
        # note that we exit the infinite loop using the return statement

        while (TRUE) {
          x <- runif(1, a, b)
          y <- runif(1, 0, K)
          cat("y=",y,"fx=",fx(x),"",y < fx(x),"\n")
          if (y < fx(x)) return(x)
       }
    }

  fx<-function(x){
     # triangular density
     if ((0<x) && (x<1)) {
       return(x)
     } else if ((1<x) && (x<2)) {
       return(2-x)
     } else {
       return(0)
     }
 }

 set.seed(123)
 rejectionK(fx, 0, 2, 1)
InformationsquelleAutor user 31466 | 2013-09-22