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 w języku Java

Specyfikacja problemu:

Dane:

  • x, y – zmienne typu zmiennoprzecinkowego; określają początkowe położenie cząsteczki

  • fi – zmienna typu zmiennoprzecinkowego; określa losowy kąt z przedziału <0, 2pi>

  • r – zmienna typu zmiennoprzecinkowego; długość wektora przesunięcia

  • dx, dy – składowe wektora przesunięcia

  • n – liczba naturalna; liczba kolizji

Wynik:

Program wyświetla kolejne n położeń cząsteczki, która porusza się ruchami Browna.

Pisząc program modelujący ruchu cząsteczki zawieszonej w płyniepłynpłynie poruszającej się zgodnie z ruchami Browna, chcemy ustalić trasę, po której się przemieszcza. Rozpoczynamy więc od umieszczenia cząsteczki w konkretnym punkcie układu współrzędnych. W tym celu możemy zadeklarować dwie zmienne typu zmiennoprzecinkowego double. Nazwiemy je x oraz y.

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie cząsteczki. Linia 2. double x znak równości 0 kropka 0 średnik. Linia 3. double y znak równości 0 kropka 0 średnik.

Kolejną rzeczą, nad którą musimy się zastanowić, to sposób, w jaki wyznaczymy losowy kąt z przedziału . W języku Java dysponujemy funkcją random() z biblioteki Math. Funkcja ta zwraca losową liczbę z przedziału . Po pomnożeniu wylosowanej liczby przez , uzyskamy interesujący nas przedział. Stała jest również dostępna w bibliotece Math jako PI. Możemy skorzystać z wymienionej biblioteki w następujący sposób:

Linia 1. prawy ukośnik prawy ukośnik losowy kąt z przedziału otwórz nawias ostrokątny 0 przecinek 2pi zamknij nawias okrągły. Linia 2. double fi znak równości Math kropka random otwórz nawias okrągły zamknij nawias okrągły asterysk 2 asterysk Math kropka PI średnik.

Kolejnym etapem będzie wyznaczenie wektora o określonym modulemoduł wektoramodule, na podstawie wylosowanego kąta. W tym celu możemy wykorzystać funkcje trygonometryczne sin() oraz cos(), które również dostępne są w bibliotece Math.

Linia 1. prawy ukośnik prawy ukośnik długość wektora przesunięcia. Linia 2. double r znak równości 0 kropka 1 średnik. Linia 4. prawy ukośnik prawy ukośnik składowe wektora przesunięcia. Linia 5. double dx znak równości r asterysk Math kropka cos otwórz nawias okrągły fi zamknij nawias okrągły średnik. Linia 6. double dy znak równości r asterysk Math kropka sin otwórz nawias okrągły fi zamknij nawias okrągły średnik.

Następnie możemy przesunąć cząsteczkę na pozycję, którą wskazuje wektor przesunięcia. W tym celu wystarczy dodać do aktualnej pozycji składowe wektora.

Linia 1. prawy ukośnik prawy ukośnik przemieść cząsteczkę. Linia 2. x plus znak równości dx średnik. Linia 3. y plus znak równości dy średnik.

Proces przesuwaniawspółczynnik dyfuzjiProces przesuwania cząsteczki należy powtórzyć pewną liczbę razy. W praktyce proces taki może trwać bardzo długo. Nie często będziemy bowiem symulować jedną kolizję. Aby powtórzyć proces zderzania cząsteczki, możemy wykorzystać pętlę for. Oto przykład takiego zastosowania:

Linia 1. prawy ukośnik prawy ukośnik liczba kolizji. Linia 2. double n znak równości 100 średnik. Linia 4. prawy ukośnik prawy ukośnik wykonuj kolejne kolizje. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny n średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. prawy ukośnik prawy ukośnik losowy kąt z przedziału otwórz nawias ostrokątny 0 przecinek 2pi zamknij nawias okrągły. Linia 7. double fi znak równości Math kropka random otwórz nawias okrągły zamknij nawias okrągły asterysk 2 asterysk Math kropka PI średnik. Linia 8. prawy ukośnik prawy ukośnik składowe wektora przesunięcia. Linia 9. double dx znak równości r asterysk Math kropka cos otwórz nawias okrągły fi zamknij nawias okrągły średnik. Linia 10. double dy znak równości r asterysk Math kropka sin otwórz nawias okrągły fi zamknij nawias okrągły średnik. Linia 12. prawy ukośnik prawy ukośnik przemieść cząsteczkę. Linia 13. x plus znak równości dx średnik. Linia 14. y plus znak równości dy średnik. Linia 16. prawy ukośnik prawy ukośnik wypisz aktualną pozycję. Linia 17. System kropka out kropka println otwórz nawias okrągły x plus cudzysłów cudzysłów plus y zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy.

Po połączeniu wszystkich części kodu program prezentuje się następująco:

Linia 1. public class Main otwórz nawias klamrowy. Linia 2. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik prawy ukośnik liczba kolizji. Linia 4. double n znak równości 100 średnik. Linia 5. prawy ukośnik prawy ukośnik początkowe położenie cząsteczki. Linia 6. double x znak równości 0 kropka 0 średnik. Linia 7. double y znak równości 0 kropka 0 średnik. Linia 8. prawy ukośnik prawy ukośnik długość wektora przesunięcia. Linia 9. double r znak równości 0 kropka 1 średnik. Linia 11. prawy ukośnik prawy ukośnik wypisz początkową pozycję. Linia 12. System kropka out kropka println otwórz nawias okrągły x plus cudzysłów cudzysłów plus y zamknij nawias okrągły średnik. Linia 14. prawy ukośnik prawy ukośnik wykonuj kolejne kolizje. Linia 15. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny n średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. prawy ukośnik prawy ukośnik losowy kąt z przedziału otwórz nawias ostrokątny 0 przecinek 2pi zamknij nawias okrągły. Linia 17. double fi znak równości Math kropka random otwórz nawias okrągły zamknij nawias okrągły asterysk 2 asterysk Math kropka PI średnik. Linia 18. prawy ukośnik prawy ukośnik składowe wektora przesunięcia. Linia 19. double dx znak równości r asterysk Math kropka cos otwórz nawias okrągły fi zamknij nawias okrągły średnik. Linia 20. double dy znak równości r asterysk Math kropka sin otwórz nawias okrągły fi zamknij nawias okrągły średnik. Linia 22. prawy ukośnik prawy ukośnik przemieść cząsteczkę. Linia 23. x plus znak równości dx średnik. Linia 24. y plus znak równości dy średnik. Linia 26. prawy ukośnik prawy ukośnik wypisz aktualną pozycję. Linia 27. System kropka out kropka println otwórz nawias okrągły x plus cudzysłów cudzysłów plus y zamknij nawias okrągły średnik. Linia 28. zamknij nawias klamrowy. Linia 29. zamknij nawias klamrowy. Linia 30. zamknij nawias klamrowy.

Wynikiem uruchomienia takiego programu mogą być następujące dane:

Linia 1. 0 kropka 0 0 kropka 0. Linia 2. minus 0 kropka 04249428330626362 minus 0 kropka 09052201879259547. Linia 3. 0 kropka 04960350217271556 minus 0 kropka 05156052613807912. Linia 4. 0 kropka 1259986064300449 0 kropka 012966894742595957. Linia 5. 0 kropka 05136757241432045 minus 0 kropka 05359291867168415. Linia 6. minus 0 kropka 048596760806494776 minus 0 kropka 05092232253639581. Linia 7. minus 0 kropka 0048139881002535745 0 kropka 03898356611475774. Linia 8. 0 kropka 08244040784973578 minus 0 kropka 009869994527251583. Linia 9. 0 kropka 012249129762906708 minus 0 kropka 08109628518272115. Linia 10. minus 0 kropka 04168633661113569 0 kropka 0031115853936955346. Linia 11. minus 0 kropka 0021474426598614565 0 kropka 09496296461638272. Linia 12. minus 0 kropka 0918473685818868 0 kropka 05075976009925333. Linia 13. minus 0 kropka 0019076754826530956 0 kropka 09447304875631565. Linia 14. minus 0 kropka 0750915716841948 0 kropka 16262080981096783. Linia 15. minus 0 kropka 011759054421967507 0 kropka 24000938944149008. Linia 16. minus 0 kropka 0019883848750422393 0 kropka 14048786404821254. Linia 17. 0 kropka 06342794149660125 0 kropka 2161232013188205. Linia 18. minus 0 kropka 03641038432255023 0 kropka 22180727535325695. Linia 19. minus 0 kropka 004683290654087104 0 kropka 12697378165323253. Linia 20. minus 0 kropka 09598187372708852 0 kropka 08617465508338719. Linia 21. minus 0 kropka 18656559076837564 0 kropka 043812051209403804. Linia 22. minus 0 kropka 28650382991785345 0 kropka 04029802848583156. Linia 23. minus 0 kropka 24045363772645864 0 kropka 12906389917460248. Linia 24. minus 0 kropka 14063225281537267 0 kropka 13503810325822915. Linia 25. minus 0 kropka 2162787443153009 0 kropka 06963467579642645. Linia 26. minus 0 kropka 3093832492204835 0 kropka 10612510147715576. Linia 27. minus 0 kropka 38662247772862945 0 kropka 16963967916973283. Linia 28. minus 0 kropka 2889824261640242 0 kropka 19123644583655647. Linia 29. minus 0 kropka 2324319170701468 0 kropka 2737109262606445. Linia 30. minus 0 kropka 24381553759315056 0 kropka 17436097314647214. Linia 31. minus 0 kropka 2447340902574486 0 kropka 274356754362496. Linia 32. minus 0 kropka 33674273639990976 0 kropka 23518522088432633. Linia 33. minus 0 kropka 40902120496750644 0 kropka 16607789145015606. Linia 34. minus 0 kropka 49737735006027384 0 kropka 21290941528128757. Linia 35. minus 0 kropka 4192620652962098 0 kropka 15047543185696022. Linia 36. minus 0 kropka 4880656495221915 0 kropka 22304310232844665. Linia 37. minus 0 kropka 40329837295040505 0 kropka 16999115775897533. Linia 38. minus 0 kropka 4856306494557371 0 kropka 2267485030585007. Linia 39. minus 0 kropka 5246441785552132 0 kropka 13467274866460865. Linia 40. minus 0 kropka 44709956143693097 0 kropka 19781411668890014. Linia 41. minus 0 kropka 529820512791571 0 kropka 2540034769538406. Linia 42. minus 0 kropka 5445981537868122 0 kropka 352905556439642. Linia 43. minus 0 kropka 5972975296073366 0 kropka 2679186410459937. Linia 44. minus 0 kropka 646740872705428 0 kropka 35484019086699276. Linia 45. minus 0 kropka 5480230647715083 0 kropka 3388779104308602. Linia 46. minus 0 kropka 4678980568585043 0 kropka 39871087046912873. Linia 47. minus 0 kropka 5626751645356651 0 kropka 43060600897567625. Linia 48. minus 0 kropka 6484302437515337 0 kropka 37916607907020206. Linia 49. minus 0 kropka 67345509340227 0 kropka 2823479149688412. Linia 50. minus 0 kropka 7624031042337384 0 kropka 3280453040531751. Linia 51. minus 0 kropka 6630790462868106 0 kropka 31643791360762985. Linia 52. minus 0 kropka 7061380300362652 0 kropka 22618314133234124. Linia 53. minus 0 kropka 6061864593052291 0 kropka 22929497493950646. Linia 54. minus 0 kropka 5143085345290382 0 kropka 26877214478260203. Linia 55. minus 0 kropka 414499424518613 0 kropka 2625962595078551. Linia 56. minus 0 kropka 3244937201600778 0 kropka 3061734689518289. Linia 57. minus 0 kropka 42171378631891915 0 kropka 28275854345396506. Linia 58. minus 0 kropka 3223598707183802 0 kropka 2714095587046149. Linia 59. minus 0 kropka 4067766872942971 0 kropka 21780171339081777. Linia 60. minus 0 kropka 32837129444961277 0 kropka 1557324426292668. Linia 61. minus 0 kropka 39621115520451483 0 kropka 08226303884268706. Linia 62. minus 0 kropka 3596763453554175 0 kropka 175350136065075. Linia 63. minus 0 kropka 2965877291486768 0 kropka 25293767697931313. Linia 64. minus 0 kropka 3964990770673981 0 kropka 2571474937287957. Linia 65. minus 0 kropka 4943687896663552 0 kropka 2776784302831162. Linia 66. minus 0 kropka 40107709197807906 0 kropka 2416692766907407. Linia 67. minus 0 kropka 3201018846691777 0 kropka 18299205963607418. Linia 68. minus 0 kropka 40895558875135324 0 kropka 13711157063609525. Linia 69. minus 0 kropka 48308003164617264 0 kropka 06998805042497509. Linia 70. minus 0 kropka 46288948769192156 minus 0 kropka 0279524515894186. Linia 71. minus 0 kropka 3853227966798439 minus 0 kropka 09106670073679322. Linia 72. minus 0 kropka 2989293046272322 minus 0 kropka 14142704754810215. Linia 73. minus 0 kropka 3852253170568647 minus 0 kropka 09089984459024267. Linia 74. minus 0 kropka 3465739745016979 minus 0 kropka 18312822264538986. Linia 75. minus 0 kropka 2827656567928829 minus 0 kropka 26012496667506246. Linia 76. minus 0 kropka 3496305058717704 minus 0 kropka 18576710254720036. Linia 77. minus 0 kropka 3482400121404955 minus 0 kropka 28575743471578197. Linia 78. minus 0 kropka 44116413764488477 minus 0 kropka 2488100816408388. Linia 79. minus 0 kropka 37060482707507647 minus 0 kropka 17794835930844455. Linia 80. minus 0 kropka 4401875240129634 minus 0 kropka 10612741329093388. Linia 81. minus 0 kropka 34145832683825744 minus 0 kropka 12201909744454173. Linia 82. minus 0 kropka 30926055545061165 minus 0 kropka 027344372635494094. Linia 83. minus 0 kropka 3708433887691741 minus 0 kropka 10613240878603003. Linia 84. minus 0 kropka 47055584792195293 minus 0 kropka 09855444799796749. Linia 85. minus 0 kropka 48625506506508703 minus 0 kropka 19731443271390758. Linia 86. minus 0 kropka 4780246761653857 minus 0 kropka 2969751606791381. Linia 87. minus 0 kropka 5460356229951521 minus 0 kropka 37028621790326144. Linia 88. minus 0 kropka 6422822231115035 minus 0 kropka 34314599008470503. Linia 89. minus 0 kropka 6768049751595411 minus 0 kropka 4369978925216281. Linia 90. minus 0 kropka 5945082537816231 minus 0 kropka 38018900544887035. Linia 91. minus 0 kropka 6686928930968382 minus 0 kropka 4472459908394427. Linia 92. minus 0 kropka 6733053896145383 minus 0 kropka 3473524230992013. Linia 93. minus 0 kropka 7723296571810401 minus 0 kropka 3334170568349846. Linia 94. minus 0 kropka 7546010196664645 minus 0 kropka 43183298751633714. Linia 95. minus 0 kropka 6615063473851972 minus 0 kropka 46834849097505243. Linia 96. minus 0 kropka 6041986656461512 minus 0 kropka 38639832554693254. Linia 97. minus 0 kropka 5095745026392589 minus 0 kropka 4187443882941213. Linia 98. minus 0 kropka 4098268377918689 minus 0 kropka 42584392049651143. Linia 99. minus 0 kropka 41464173938626747 minus 0 kropka 325959904144363. Linia 100. minus 0 kropka 36501027391090696 minus 0 kropka 23914563322783625. Linia 101. minus 0 kropka 3333587514647785 minus 0 kropka 33400437624524204.

Po wykonaniu wykresu (np. w arkuszu kalkulacyjnym) dla przedstawionych danych, otrzymujemy trasę, którą przebyła cząsteczka.

RoamSIRBryDqP
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

moduł wektora
moduł wektora

wartość określająca długość geometrycznej reprezentacji wektora; moduł wektora możemy obliczyć według następującego wzoru:

| ( a , b ) | = a 2 + b 2
płyn
płyn

substancja, która charakteryzuje się łatwością w zmianie kształtu; płynami są głównie ciecze oraz gazy, ale także plazma

współczynnik dyfuzji
współczynnik dyfuzji

miara wyrażająca zdolność cząsteczek danego płynu do dyfundowania; współczynnik ten jest wprost proporcjonalny do szybkości dyfundujących cząstek oraz zależy od lepkości cieczy, budowy ośrodka, a także, jak udowodnił Einstein, od temperatury