Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Modelowanie ruchów Browna

Ruchy Browna (o których możesz przeczytać m.in. w e‑materiale Modelowanie ruchów BrownaP14JSHgfzModelowanie ruchów Browna) zostały opisane — niezależnie — przez Alberta Einsteina, w 1905 roku oraz przez polskiego fizyka Mariana Smoluchowskiego, w 1906 roku. Ich nazwa pochodzi od botanika Roberta Browna, który pod mikroskopem zaobserwował chaotyczne ruchy pyłku kwiatowego. Ruchy Browna powodowane są nieustannym zderzaniem się cząsteczek płynu w danym ośrodku. Przykładowy model takiego procesu może polegać na umieszczeniu wirtualnej cząsteczki w wirtualnym płynie, w którym — co pewien określony czas — cząsteczka zostaje przemieszczona w losowym kierunku, w wyniku wirtualnej kolizji.

Cały proces ma charakter uśredniony. Dzięki temu każda kolizja powoduje przesunięcie cząsteczki o określoną z góry odległość.

Metoda Monte Carlo

Metoda Monte Carlo została opracowana między innymi przez polskiego naukowca Stanisława Ulama oraz węgiersko — amerykańskiego naukowca Johna von Neumanna. Wykorzystano ją podczas prac nad bombą jądrową w celu symulacji procesu rozpadu jąder cząsteczek. Proces był na tyle skomplikowany, że zastosowanie klasycznych modeli obliczeniowych nie zdawało egzaminu.

Metoda polega na przeprowadzeniu procesu w losowy sposób, zakładając, że po wystarczająco dużej liczbie prób otrzymamy wynik zbliżony do rzeczywistego.

Przykład 1

Metodę Monte Carlo można zastosować, aby obliczyć prawdopodobieństwo wyrzucenia orła podczas rzutu dwustronną monetą. W tym celu przeprowadzamy dużo prób, a następnie zestawiamy liczbę wyrzuconych orłów z liczbą wszystkich rzutów. Po odpowiednio dużej liczbie prób liczba wyrzuconych orłów podzielona przez liczbę rzutów zbliży się do rzeczywistej wartości 0,5.

Symulacja ruchów Browna metodą Monte Carlo

Symulacja ruchów Browna metodą Monte Carlo wykorzystywana jest zazwyczaj w celu poznania możliwej trasy, zgodnie z którą będzie poruszać się cząsteczka. Tego rodzaju symulacje mogą generować sztuczne wykresy giełdowe, dźwięki (np. szum czerwonyszum czerwonyszum czerwony), trasy losowego błądzenia oraz różnego rodzaju kształty (np. płatki śniegu).

W celu utworzenia szkicu trasy, którą poruszała się cząsteczka, możemy wykorzystać graficzne możliwości języków programowania. W tej części lekcji omówimy jednak najważniejsze aspekty symulacji ruchów Browna metodą Monte Carlo.

Aby zwizualizować proces losowego poruszania się cząsteczki w płynie, zakładamy, że każda kolizja powoduje przemieszczenie się cząsteczki o określoną długość w dowolnym kierunku. W tym celu wybieramy losowy kąt z zakresu 0 ,   2 π ) , a następnie dokonujemy jej przesunięcia o wybraną długość pod wylosowanym kątem.

W poprzednich e—materiałach dotyczących modelowania ruchów Browna posługiwaliśmy się algorytmem, w którym cząsteczka reprezentowana była przez dwie zmienne zmiennoprzecinkowe. W każdej kolizji przesuwaliśmy cząsteczkę o wektor długości r pod losowo wybranym kątem. Pozycję po każdym przesunięciu zapisywaliśmy w tablicy. Po zakończeniu algorytmu wypisywaliśmy ostatni punkt.

Jeżeli chcemy utworzyć regularniejsze trasy, to możemy pozwolić sobie na odstępstwo od wyboru każdego losowego kąta z przedziału 0 ,   2 π ) . Możemy na przykład postanowić, że losujemy tylko spośród wielokrotności wybranego kąta. W tym celu należy wylosować liczbę całkowitą z przedziału od 0 (włącznie) do wybranej liczby k (nie włączając k). Wówczas, po podzieleniu kąta przez k, a następnie pomnożeniu przez wylosowaną liczbę, uzyskamy losową wielokrotność kąta 2 π k .

Przykładem pseudokodu uwzględniającego powyższą zmianę (random_int(k)) jest funkcja generująca losową liczbę całkowitą od 0 (włącznie) do k (włącznie):

Linia 1. prawy ukośnik prawy ukośnik liczba kolizji. Linia 2. n znak równości 10000. Linia 4. prawy ukośnik prawy ukośnik obrót nastąpi o wielokrotność kąt 360 prawy ukośnik k stopni. Linia 5. k znak równości 3. Linia 7. prawy ukośnik prawy ukośnik długość wektora. Linia 8. r znak równości 0 kropka 1. Linia 10. prawy ukośnik prawy ukośnik początkowe położenie cząsteczki. Linia 11. x znak równości 0 kropka 0. Linia 12. y znak równości 0 kropka 0. Linia 14. prawy ukośnik prawy ukośnik tablice przechowujące kolejne pozycje cząsteczki. Linia 15. deklaracja tablicy ruchy podkreślnik x o wielkości n plus 1. Linia 16. deklaracja tablicy ruchy podkreślnik y o wielkości n plus 1. Linia 18. prawy ukośnik prawy ukośnik zapisz w tablicach początkowe położenie cząsteczki. Linia 19. ruchy podkreślnik x otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości x. Linia 20. ruchy podkreślnik y otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości y. Linia 22. prawy ukośnik prawy ukośnik dla każdej kolizji. Linia 23. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek n wykonuj. Linia 24. prawy ukośnik prawy ukośnik losowa wielokrotność kąta 360 prawy ukośnik k kąt. Linia 25. fi znak równości random podkreślnik int otwórz nawias okrągły k minus 1 zamknij nawias okrągły asterysk 2 asterysk PI prawy ukośnik k średnik. Linia 27. prawy ukośnik prawy ukośnik zamień postać wektora otwórz nawias okrągły długość przecinek kąt zamknij nawias okrągły na współrzędne. Linia 28. dx znak równości r asterysk cosinus otwórz nawias okrągły fi zamknij nawias okrągły. Linia 29. dy znak równości r asterysk sinus otwórz nawias okrągły fi zamknij nawias okrągły. Linia 31. prawy ukośnik prawy ukośnik przesuń cząsteczkę o wektor otwórz nawias kwadratowy dx przecinek dy zamknij nawias kwadratowy. Linia 32. x znak równości x plus dx. Linia 33. y znak równości y plus dy. Linia 35. prawy ukośnik prawy ukośnik zapisz w tablicach obecne położenie cząsteczki. Linia 36. ruchy podkreślnik x otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości x. Linia 37. ruchy podkreślnik y otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości y. Linia 39. prawy ukośnik prawy ukośnik wypisz końcową pozycję. Linia 40. wypisz x. Linia 41. wypisz y.

Utworzone w ten sposób trasy mogą wyglądać następująco:

k = 3

RJPw6FbdydsiX
Źródło: tylko do użytku edukacyjnego.

k = 4

RXgsB5a8WGu3D
Źródło: tylko do użytku edukacyjnego.

n = 5

RRO7pnIOdwbSP
Źródło: tylko do użytku edukacyjnego.

Opisane powyżej zagadnienie znane jest także jako błądzenie losowe. Spróbujmy przeprowadzić prosty eksperyment za pomocą metody Monte Carlo. Umieśćmy cząsteczkę na osi liczbowej w punkcie 0. W każdej kolejnej iteracji niech cząsteczka porusza się losowo w prawo lub lewo o 1. Po k (np. 20) iteracjach zapiszmy pozycję cząsteczki. Eksperyment powtórzmy n (np. 10 000) razy. Na koniec stwórzmy wykres słupkowy, w którym na osi poziomej znajdzie się odległość cząstki od położenia początkowego, a na osi pionowej liczba prób, które zakończyły się na tej pozycji.

Eksperyment możemy zrealizować zgodnie z poniższym pseudokodem:

Linia 1. wynik otwórz nawias kwadratowy 0 kropka kropka 2 asterysk k zamknij nawias kwadratowy minus tablica wypełniona zerami. Linia 3. prawy ukośnik prawy ukośnik liczba prób. Linia 4. n znak równości 10000. Linia 5. prawy ukośnik prawy ukośnik liczba ruchów. Linia 6. k znak równości 20. Linia 8. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj. Linia 9. prawy ukośnik prawy ukośnik pozycja na środku. Linia 10. pozycja znak równości k. Linia 12. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek k minus 1 wykonuj. Linia 13. pozycja plus znak równości random podkreślnik int otwórz nawias okrągły 1 zamknij nawias okrągły asterysk 2 minus 1. Linia 14. wynik otwórz nawias kwadratowy pozycja zamknij nawias kwadratowy plus znak równości 1. Linia 16. rysuj wykres tablicy wynik.

Wynik przykładowego eksperymentu:

Rr41KrKjrT4jx

Przeprowadzony eksperyment to nic innego jak puszczone kulki na desce Galtonadeska Galtonadesce Galtona. Kulka zaczyna swoją wędrówkę od góry, a następnie natrafia na przeszkodę, która powoduje jej ruch w lewo lub w prawo z jednakowym prawdopodobieństwem.

RWCMyyYhweLuD

Eksperyment wizualizuje rozkład dwumianowyrozkład dwumianowyrozkład dwumianowy (w Polsce zwany także rozkładem Bernoulliego), który w nieskończoności dąży do rozkładu normalnegorozkład normalnyrozkładu normalnego, znanego jako rozkład Gaussa.

Proces Wienera

Przeprowadzony eksperyment doprowadza nas do procesu Wienera, który w gruncie rzeczy jest dokładnie tym samym, co ruchy Browna, czyli matematycznym opisem chaotycznego ruchu cząsteczki w płynie. Za pomocą tego procesu oraz metody Monte Carlo możemy przeprowadzić symulację ruchów Browna, która dużo lepiej odzwierciedla poruszanie się cząsteczki w naturze. Proces ten w celu wyznaczenia następnego położenia cząsteczki wykorzystuje funkcję rozkładu prawdopodobieństwa Gaussa, który określamy wzorem:

f μ , σ ( x ) = 1 σ 2 π exp ( ( x μ ) 2 2 σ 2 )

gdzie μ oznacza wartość oczekiwaną (średnią), a  σ to odchylenie standardowe.

W powyższym równaniu exp ( x ) = e x , przy czym e to liczba Eulera, równa w przybliżeniu 2,71828.

Przykładowe gaussianygaussiangaussiany dla danych parametrów μ oraz σ wyglądają następująco:

RiYLUdgwrYQ0z

Zwróćmy uwagę na podobieństwo rozkładów prawdopodobieństwa do poprzednio utworzonego wykresu.

Proces Wienera, oznaczony symbolem W , zdefiniowany jest następująco:

  1. Proces W  jest krzywą ciągłą o punkcie początkowym równym 0.

    W(0)=0
  2. Proces W ma niezależne od siebie przyrosty (lub spadki).

  3. Rozkład prawdopodobieństwa przyrostów w czasie o długości dt  jest rozkładem normalnym Gaussa o wartości średniej 0 z wariancją równą dt .

    W(t+dt)W(t)~N(0, dt)

Definicję tę można zatem przedstawić w uproszczeniu jako funkcję błądzenia losowego, w zależności od czasu, w następujący sposób:

W(t+dt)=W(t)+kN(0, dt)

gdzie N ( μ , σ 2 ) jest zmienną losową zgodną z rozkładem normalnym Gaussa z parametrami μ oraz σ . Przy czym k  jest współczynnikiem długości wykonywanych kroków.

Realizacja wyznaczania powyższego procesu powinna być zgodna z następującym pseudokodem (sqrt(d) to funkcja obliczająca pierwiastek danej liczby d):

Linia 1. prawy ukośnik prawy ukośnik liczba kolizji. Linia 2. n znak równości 100. Linia 4. prawy ukośnik prawy ukośnik współczynnik długości kroku. Linia 5. k znak równości 1. Linia 7. prawy ukośnik prawy ukośnik przyrost czasu. Linia 8. dt znak równości 0 kropka 1. Linia 10. prawy ukośnik prawy ukośnik tablica przechowujące kolejne pozycje cząsteczki. Linia 11. deklaracja tablicy w o wielkości n plus 1. Linia 13. prawy ukośnik prawy ukośnik początkowe położenie cząsteczki. Linia 14. w otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 kropka 0. Linia 16. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek n wykonuj. Linia 17. w otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości w otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy plus k asterysk random podkreślnik n otwórz nawias okrągły 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły. Linia 19. wykreśl trasę x przecinek y.

Wykres przykładowej trasy W utworzonej tą metodą w zależności od czasu (n = 1000, k = 1, dt = 0.1):

R1WjKUO3lg86z

Powyższy kształt można zastosować jako losowo wygenerowany profil hipsometrycznyprofil hipsometrycznyprofil hipsometryczny lub wykres giełdowy.

Jeżeli chcemy wygenerować trasę dwuwymiarową, musimy jednocześnie utworzyć 2 trasy, które traktujemy osobno jako współrzędną poziomą oraz pionową.

Linia 1. prawy ukośnik prawy ukośnik liczba kolizji. Linia 2. n znak równości 100. Linia 4. prawy ukośnik prawy ukośnik współczynnik długości kroku. Linia 5. k znak równości 1. Linia 7. prawy ukośnik prawy ukośnik przyrost czasu. Linia 8. dt znak równości 0 kropka 1. Linia 10. prawy ukośnik prawy ukośnik tablice przechowujące kolejne pozycje cząsteczki. Linia 11. deklaracja tablicy x o wielkości n plus 1. Linia 12. deklaracja tablicy y o wielkości n plus 1. Linia 14. prawy ukośnik prawy ukośnik początkowe położenie cząsteczki. Linia 15. x otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 kropka 0. Linia 16. y otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 kropka 0. Linia 18. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek n wykonuj. Linia 19. x otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości x otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy plus k asterysk random podkreślnik n otwórz nawias okrągły 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły. Linia 20. y otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości y otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy plus k asterysk random podkreślnik n otwórz nawias okrągły 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły. Linia 22. wykreśl trasę x przecinek y.

Wygenerowane w ten sposób trasy mogą wyglądać następująco:

RJtEArs4QsWwz
Źródło: tylko do użytku edukacyjnego.

Zwróćmy uwagę na różnorodne długości, o które przemieszcza się cząsteczka. Symulacja wykorzystująca proces Wienera ma wyjątkowo przydatną własność. Aby poznać wynik symulacji, nie musimy jej przeprowadzać w całości. W momencie, gdy interesuje nas tylko wynik symulacji, wystarczy, że przeprowadzimy jej pierwszy krok z parametrem dt, który ustawimy na długość całej symulacji.

Słownik

szum czerwony
szum czerwony

dźwięk szumu powstały w wyniku ruchów Browna występujących w przyrodzie

deska Galtona
deska Galtona

deska z gwoździami rozmieszczonymi na kształt trójkąta. Kulka spadająca na gwóźdź spadnie z jego lewej lub prawej strony. Eksperyment pozwala zwizualizować dwumianowy rozkład prawdopodobieństwa

rozkład dwumianowy
rozkład dwumianowy

dyskretny rozkład prawdopodobieństwa opisujący liczbę sukcesów w ciągu niezależnych prób (zwanych próbami Bernoulliego), z których każda ma jednakowe prawdopodobieństwo sukcesu

rozkład normalny
rozkład normalny

jeden z najważniejszych w statystyce rozkładów prawdopodobieństwa. Definicja jego funkcji gęstości jest następująca:

f μ , σ ( x ) = 1 σ 2 π exp ( ( x μ ) 2 2 σ 2 )
gaussian
gaussian

funkcje zgodne z następującą formą:

f ( x ) = a exp ( ( x b ) 2 2 c 2 )
profil hipsometryczny
profil hipsometryczny

pionowy przekrój lądu przedstawiający rozkład wysokości