Wykonuję symulacje równania Langevina dla różnych sił zewnętrznych. Powiedziano mi, że C rand()
z stdlib.h
może wprowadzić błąd w moich wynikach, używam Twistera Mersenne.
Niemniej jednak chciałbym wiedzieć (i zobaczyć) dokładnie, jakie błędy liniowy kongruencjalny generator może wprowadzić w mojej symulacji. Oto rzeczy, które próbowałem:
- Generowanie krotek losowych 3D, aby spróbować zobaczyć hiperpłaszczyzny. Nic nie widzę.
- Wykonanie FFT dużego wektora liczb losowych. Jest prawie tak samo dla Mersenne Twister i
rand()
. - Sprawdzanie zasady ekwipartycji dla cząstki w ruchu Browna. Oba integratorów zgodni w oczekiwanej wartości z taką samą liczbą cyfr znaczących.
- Widząc, jak dobrze kosztują w kilku pojemnikach, które nie są potęgą drugą. Oba dają takie same wyniki jakościowe, nikt nie jest lepszy.
- Patrząc na Browna ścieżek, aby zobaczyć wyraźne rozbieżności z . Znowu nie ma szczęścia.
- Rozkład punktów w okręgu. Wypełnione i tylko na obwodzie. Pomiędzy nimi wszystkimi i między najbliższymi sąsiadami (odpowiedź Shora poniżej w komentarzach). Dostępne w tej liście, po prostu uruchom ją z Julią 0.5.0 po zainstalowaniu potrzebnych bibliotek (instrukcje znajdziesz w liście).
Chciałbym podkreślić, że szukam wprowadzonego uprzedzenia w kontekście symulacji fizycznych. Widziałem na przykład, jak rand()
żałośnie nie udaje się zagorzałych testów, podczas gdy Mersenne Twister nie, ale w tej chwili nie znaczy to dla mnie zbyt wiele.
Czy masz jakieś fizyczne, konkretne przykłady tego, jak zły generator liczb losowych niszczy symulację Montecarlo?
Uwaga: Widziałem, jak PRNG RANDU
może być okropny. Interesują mnie nieoczywiste przykłady generatorów, które wyglądają niewinnie, ale ostatecznie wprowadzają stronniczość.