Я хочу остановить процесс подсчета для y
после того, как он в первый раз соответствует условию y < 0
для каждого i
в for loop
. Это означает, что процесс подсчета для x
будет продолжаться до тех пор, пока x > 0
(условие указано в while loop
).
Я пытался сделать что-то, что if (y < 0 & (y - 120*(16/81)*time + (z-2)) > 0 & z > 2)
, это имеет смысл для меня, но результат не имеет смысла, потому что после запуска кода, count_x
составляет около 100 (имеет смысл), но count_y
больше, чем 1000, что не имеет смысла, так как for loop
только от 1:1000
.
count_x <- 0
count_y <- 0
for (i in 1:1000){
x <- 25
y <- 25
t <- 0
while ((x > 0 | y > 0) & t < 100){
time <- rexp(1,100)
u <- runif(1,0,1)
z <- 4/((1-u)^0.2) - 4
if (z < 2){
x <- x + 110*(65/81)*time - z
} else {
y <- y + 120*(16/81)*time - (z-2)
x <- x + 110*(65/81)*time - 2
}
t <- t + time
if (x < 0){
count_x <- count_x + 1
}
if (y < 0 & (y - 120*(16/81)*time + (z-2)) > 0 & z > 2){
count_y <- count_y + 1
}
}
}
Например, во время 1-й итерации i=1
, while loop
запустит и запустит код внутри l oop. Итак, что я хочу сделать, это:
Когда y
в первый раз достигнет отрицательного значения в первой итерации, он обновит count_y
на единицу, а затем весь if loop
для процесса подсчета y
перестанет делать что-либо, даже если while loop
все еще продолжает работать, поскольку if loop
для процесса подсчета x
может еще не достичь первого отрицательного значения (условие для while loop
все еще выполняется, если t
по-прежнему меньше 100), поэтому while loop
необходимо продолжать, не касаясь последнего внутреннего if loop
, пока либо t>100
первый раз, либо x
первый раз не достигнет своего отрицательного значения. Один раз условия для while loop
не выполняются, тогда только go для 2-й итерации i=2
.
То же самое относится к x
, процесс подсчета для x
перестанет делать что-либо, как только x
впервые станет отрицательным значением, но while loop
продолжит работать до тех пор, пока условие для while loop
все еще удовлетворен.
Таким образом, будет только одно временное обновление для x
или y
для каждой итерации (поэтому максимум для y
должен быть 1000, поскольку у нас 1000 итераций, хотя вряд ли достигнет 1000), поскольку процесс подсчета для x
и y
остановится, как только он достигнет первого отрицательного значения.
Я думаю добавить в нее функцию break
, но не знаю, куда мне добавить.