(V) Pętla „while”

W tym przykładzie pętla while służy do określenia, ile iteracji potrzeba, aby suma zmiennych rozłożonych losowo i równomiernie między zerem a jedynką była większa niż pięć. Po początkowym ustawieniu ziarna dla generatora liczb losowych i ustawieniu n i x na zero, rozpoczyna się pętla while w celu zwiększenia n i sumowania x. Liczba wygenerowana za pomocą generatora liczb losowych dla rozkładu równomiernego jest dodawana do x przy każdej iteracji. Gdy x jest większe niż pięć, zapętlenie zatrzymuje się. Wartości n i x są drukowane. Oto przykład:

> set.seed(129435)

> n=0

> x=0

> while (x<=5) {

+ x = x + runif(1)

+ n = n + 1

+ }

> n

[1] 7

> x

[1] 5.179325

Korzystanie z indeksów

Aby wykonać to samo zadanie za pomocą indeksów, generowany jest wektor jednolitych zmiennych losowych o długości większej niż oczekiwana dla wyniku sumy. Następnie funkcja cumsum (), która tworzy sumę skumulowaną wzdłuż wektora, jest używana do określenia, kiedy suma jest większa niż pięć. Ponieważ elementy x są zawsze większe od zera, skumulowana suma zawsze rośnie wzdłuż wektora. Następnie funkcja length () służy do znalezienia liczby elementów, dla których suma jest mniejsza lub równa pięć. Następnie drukowane są wartości n i x, gdzie x jest równe x [n].

> set.seed(129435)

> x = runif(25)

> x = cumsum(x)

> n = length(x[x<=5])+1

> x = x[n]

> n

[1] 7

> x

[1] 5.179325

Zauważ, że generator liczb losowych jest ustawiony na tę samą wartość początkową dla obu części przykładu, więc wyniki dla dwóch pasujących wyników, ponieważ generowane są te same pierwsze siedem liczb. Jeśli na moim komputerze podstawię 1 000 000 na 5 w powyższych przykładach i 3 000 000 na 25, metoda wykorzystująca indeksy jest prawie natychmiastowa, podczas gdy metoda wykorzystująca zapętlenie zajmuje około 9 sekund

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *