я должен написать функцию следующего метода:R, Как работает (TRUE)?
метод отклоняющий (Uniform конверт):
Предположим, что FX отлична от нуля только на [а, Ь], и FX ≤ K.
Генерация Х ~ U (а, б) и У ~ V (0, к) не зависит от X (так P = (X, Y) равномерно распределены по прямоугольника [а, Ь] × [0, k]).
Если Y < FX (х), а затем вернуться X, в противном случае вернуться к шагу 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) } }
Я не понял, почему это TRUE
в while (TRUE)
?
if (y < fx (x)) не является истинным, тогда метод предлагает повторить цикл снова, чтобы снова создать единое число. (y < fx (x)) не соответствует true = FALSE. Итак, почему условие не должно быть while (FALSE)
?
Снова в каком основании я получу вход в цикл while? То есть, я привык с этим
a=5
while(a<7){
a=a+1
}
здесь я определяю, прежде чем писать условие (а < 7).
Но в while (TRUE)
, какое утверждение верно?
Дополнительно:
вы можете запустить коды
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)
Прошу прощения. Я еще не понял. Какое утверждение должно быть ИСТИННЫМ? i> n или i
Извините, я не понимаю ваш вопрос. – Roland
, когда i = 1, почему я вхожу в цикл? 1 не больше 3, поэтому это ЛОЖЬ, и мне нужно повторить цикл, пока он не вернется «остановлен». следовательно, почему не является условием 'while (FALSE)', чтобы я мог войти в цикл. –