MC, 11:38 środa, 05.12.2012 r.
Ilustracja do artykułu: GNUplot: część 18. - Generowanie liczb losowych, ich skalowanie oraz używanie

GNUplot: część 18. - Generowanie liczb losowych, ich skalowanie oraz używanie

Czas najwyższy na kolejną z części poradnika do programu GNUplot. Tym razem pokażemy sobie jak używać w nim generatora liczb losowych.

Co należy wiedzieć?

GNUplot dostarcza wszystkiego co jest potrzebne do generowania liczb losowych. Używa do tego dwóch tak zwanych ziaren, czyli 32-bitowych liczb, które można rozumieć jako warunek początkowy dla generatora. Dla tego samego ziarna, sekwencja kolejnych wygenerowanych liczb losowych zawsze będzie taka sama. Ponadto należy wiedzieć, że GNUplot zwraca wylosowaną liczbę z przedziału [0,1], zatem jeśli interesuje nas inny zakres, to należy przeskalować wynik.

Jakie narzędzia mamy dostępne?

Zarówno ustalanie ziaren jak i generowanie liczb pseudo-losowych odbywa się przy pomocy jednej funkcji rand(). Jej zachowanie determinowane jest przez wartość argumentów jakie otrzymuje. Zacznijmy od zarządzania ziarnami.

rand(x)
Jeżeli do funkcji rand() prześlemy argument liczbowy większy od zera, to potraktowane to zostanie jako chęć ustawienia tego argumentu jako wartość dla obu ziaren. Np.

ziarno = rand(1365429);

rand({x,y})
Wywołując funkcję rand() w powyższy sposób z dwoma argumentami, mamy możliwość ustalenia rożnych wartości dla dwóch ziaren. Np.

ziarna = rand({1365429, 9245631});

rand(-1)
Przesłanie do rand() wartości -1, poskutkuje zresetowaniem wartości ziaren do wartości domyślnej. Np.

resetZiaren = rand(-1);

Jeśli zaś chodzi o samo losowanie liczb, to używamy:
rand(0)
Wywołanie rand() z argumentem 0 w rezultacie zwraca losową liczbę z zakresu [0,1]. Np.

plot rand(0);

Jak skalować liczby losowe?

Jak wspominaliśmy, zwracana liczba losowa pochodzi z zakresu [0,1], dlatego łatwo możemy przeskalować wynik na inny zakres, zależnie od naszych potrzeb. Generalnie skalowanie do zakresu [min, max] można opisać formułą:
liczbaLosowa * (max - min) + min
Dlatego jeśli chcielibyśmy otrzymać losową liczbę z przedziału [0,10] wystarczy wykonać poniższą operację:
rand() * 10
Z kolei np. zakres [1,5] uzyskamy:
rand() * 4 + 1
To jeszcze może coś z liczbami ujemnymi np. [-3,2]:
rand() * (-5) + 2

Na zakończenie...

Jak widać generowanie losowych liczb z dowolnego przedziału w programie GNUplot nie jest niczym strasznym. Na zakończenie więc mały przykład graficzny:
resetZiaren = rand(-1);
plot 1/(exp(x)+1) + (rand(0)-0.5)/10, 1/(exp(x)+1);

GNUplot - generowanie losowych liczb, przykład

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: