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.
-
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]). -
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)
Vous devez vous connecter pour publier un commentaire.
C'est une boucle infinie. L'expression est exécutée tant que la condition est évaluée à
TRUE
, dont il fera toujours. Cependant, dans l'expression il y a unreturn
, qui, lorsqu'il est appelé (par exemple, siy < fx(x)
), les pauses, de la fonction et arrête ainsi la boucle.Voici un exemple plus simple:
Ce qui se passe lorsque cette fonction est appelée?
i
est mis à 1.while
boucle est testé. Parce que c'estTRUE
, c'est l'expression est évaluée.if
construire est testé. Depuis qu'il estFALSE
laelse
expression est évaluée eti
est imprimé.i
est augmenté de 1.i
atteint la valeur de 4, la condition de laif
construire estTRUE
etreturn("stopped")
est évaluée. Cela empêche l'ensemble de la fonction et renvoie la valeur "arrêté".while(FALSE)
afin que je puisse obtenir de l'entrée de la boucle.while(TRUE)
commewhile(TRUE==TRUE)
, c'est à dire continuer, quel que soitrepeat
qui est peut-être plus clair version dewhile(TRUE)
(même si honnêtement, il semble très rarement utilisé)À l'intérieur de la boucle while, si nous avons instruction return true ou false.. il travaillera en conséquence..
Exemple: Pour Vérifier une liste est circulaire ou pas..
ici la boucle est infinie, parce que while (true) est toujours vrai, mais nous pouvons briser parfois par l'aide de l'instruction return.
break