Przeczytaj
Ruchy Browna – powtórzenie wiadomości
Ruchy Browna to m.in. ruchy drobinek kurzu, które możemy zaobserwować w słoneczny dzień, jak chaotycznie drgając, opadają na podłogę. Oprócz zwyczajnego osuwania się w dół, drgają one także na boki na odległości rzędu milimetrów.
Z lekcji fizyki mogliśmy dowiedzieć się, że wysoka temperatura przekłada się na szybsze drgania cząstek, ponieważ temperatura jest związana ze średnią energią kinetyczną cząsteczek.
W gazach średniaśrednia prędkość cząstek jest ściśle związana z temperaturą. Gdybyśmy byli w stanie zobaczyć pojedyncze atomy, to nawet „nieruchome” powietrze w twoim pokoju przypominałoby bardziej szaloną zamieć chaotycznie zderzających i odbijających się wzajemnie cząstek, niż stojące w stałej formacji atomy.
Zajmiemy się teraz analizą układu dwuwymiarowego zderzających się losowo cząstek. Danymi do niej będą dla nas wartości prędkości oraz położenie cząstek.
Przykładowe zadanie typu maturalnego
Zadanie 1. Modelowanie ruchów Browna
Prędkość w fizyce można podzielić na składowe tak, aby zachować informacje o kierunku i jej wartości. Chodzi o to, że wartość, taka jak np. , nie precyzuje, w którą stronę obiekt zmierza.
Lepszym sposobem jest zatem zastosowanie pary liczb do opisania prędkości wzdłuż poszczególnych osi (X i Y). Nazywamy to podziałem na składowe. A tego typu zapis – zapisem wektorowym w układzie kartezjańskim.
Obiekt poruszający się tylko wzdłuż osi X np. będzie miał prędkość i .
Obiekt lecący w przeciwnym kierunku np. miałby i .
Obiekt lecący pod kątem 45° w stosunku do obu osi miałby np. i .
Oczywiście są dozwolone wszystkie kombinacje wartości i .
Wartość całkowitej prędkości można obliczyć ze wzoru:
Zadanie 1.1.
Napisz za pomocą pseudokodu lub w wybranego języka programowania funkcję obliczającą średnią prędkość wszystkich cząstek, na podstawie ich prędkości składowych, a następnie wypisującą wynik.
Specyfikacja problemu:
Dane:
n
– liczba cząstek; liczba naturalna dodatniaVIndeks dolny xx[1..n]
– tablica zawierająca składowe prędkości wzdłuż osi X; tablica liczb całkowitychVIndeks dolny yy [1..n]
– tablica zawierająca składowe prędkości wzdłuż osi Y; tablica liczb całkowitych
Wynik:
średnia prędkość wszystkich cząsteczek
Rozwiązanie
Zacznijmy od utworzenia nagłówka funkcji.
W kolejnym kroku należy utworzyć pętlę, w której będziemy obliczali prędkość dla kolejnych cząstek, a następnie wynik zapiszemy w tzw. akumulatorze – w tym przypadku zmiennej sumaV
.
Następnie wewnątrz utworzonej pętli należy odczytać obie składowe prędkości oraz obliczyć prędkość całkowitą (wykorzystując wzór z początku rozdziału), a następnie dodać ją do wartości akumulatora.
W ostatniej instrukcji pętli należy przejść do kolejnych pozycji w tablicach.
Kiedy pętla się zakończy, w zmiennej sumaV
zostanie zapisana suma prędkości wszystkich cząstek. Aby otrzymać średnią, wystarczy podzielić sumę prędkości przez liczbę cząstek.
Rozwiązanie zadania:
Zadanie 1.2.
Podobnie jak prędkość można zapisać w postaci dwóch składowych, tak samo da się zrobić z pozycjami cząstek na płaszczyźnie. Wykorzystamy do tego układ kartezjański. Pozycję dowolnej cząstki można opisać jako parę liczb (,).
Aby obliczyć odległość między parą cząstek o pozycjach (, ) oraz (, ), można wykorzystać do tego następujący wzór:
Dane są tablice X
i Y
o długości n
, w których zostały opisane pozycje kolejnych cząstek. X[i]
oraz Y[i]
przechowują współrzędne tej samej cząstki dla cząstki o indeksie i
.
Twoim zadaniem będzie policzenie średniej odległości wszystkich cząstek od siebie.
Przykładowo, dla trzech cząstek należałoby obliczyć trzy odległości składowe: pierwszej od drugiej, drugiej od trzeciej oraz pierwszej od trzeciej. Następnie odległości składowe należy uśrednić.
Zapisz w wybranej przez siebie notacji (w postaci pseudokodu, listy kroków lub w wybranym języku programowania) algorytm, który obliczy średnią odległość cząstek od siebie.
Specyfikacja problemu:
Dane:
n
– liczba cząstek; liczba naturalnaVIndeks dolny xx[1..n]
– tablica położeń cząstek wzdłuż osi X; tablica liczb całkowitychVIndeks dolny yy[1..n]
– tablica położeń cząstek wzdłuż osi Y; tablica liczb całkowitych
Wynik:
średnia odległość wszystkich cząstek względem siebie
Rozwiązanie
Na początku napiszmy funkcję obliczającą odległość dwóch cząstek. Musi ona mieć dostęp do składowych pozycji obu cząstek. Z tego powodu będzie miała cztery parametry: x1
, y1
(współrzędne pierwszej cząstki) oraz x2
, y2
(współrzędne drugiej cząstki). Wynik można zwrócić już w drugiej linijce.
Teraz rozpiszmy treść głównej funkcji, której parametrami będą tablice X
, Y
oraz ich rozmiar n
. Funkcja ta zwróci wynik: średnią odległość wszystkich cząsteczek od siebie.
Kolejnym krokiem jest utworzenie akumulatora, który przechowa sumy częściowe i posłuży później do obliczenia średniej odległości. Jego wartość ustalmy jako 0.
Czas przygotować pierwszą pętlę przechodzącą po wszystkich indeksach tablic. Skorzystamy z niej, aby odczytywać kolejne wartości X[i]
oraz Y[i]
.
Konieczne będzie rozpoczęcie drugiej pętli, aby porównać wszystkie pary cząstek. Chcemy porównać ze sobą wszystkie pary cząstek, ale tylko jeden raz. Nie chcemy też porównywać żadnej cząstki samej ze sobą. Przeanalizujmy klasyczną pętlę w pętli:
Konstrukcja pętli, taka jak w przykładzie, sprawi, że każda para zostanie porównana dwa razy, np. dla i
= 1, j
= 2 porównujemy pierwszą cząstkę z drugą. Natomiast później, w trakcie działania programu, dojdzie do sytuacji, w której i
= 2, j
= 1. Wtedy nastąpi porównanie – po raz drugi – dokładnie tej samej pary.
Dodatkowym problemem przedstawionego przykładu jest fakt, że każda cząstka będzie porównana sama ze sobą. Dojdzie do tego kiedy i
== j
.
Można tego uniknąć, inicjując zmienną j
wartością i
+ 1. Porównamy wtedy każdą parę tylko raz. Algorytm wykona wówczas porównań zamiast .
Aby dodatkowo uniknąć pustych przebiegów, zewnętrzna pętla nie powinna wykonywać działania dla i
= . Dla takiej wartości j
byłaby równa , więc wewnętrzna pętla nie wykonałaby się.
Kolejne porównania – według systemu pozwalającego unikać porównywania dwa razy tych samych cząstek – można zobaczyć na diagramie:

Jeśli będziemy dalej wypełniać ten diagram, zobaczymy, że wszystkie wierzchołki (cząstki) zostaną połączone tylko jeden raz. Przypomnijmy też, że zmienna n przechowuje liczbę wierzchołków. Wykorzystując tę wiedzę, zastosujmy połączenie dwóch pętli w pseudokodzie:
Mamy już dostęp do dwóch różnych cząstek oraz pewność, że nie dojdzie do powtórzeń. Dlatego możemy przystąpić do obliczenia odległości za pomocą przygotowanej wcześniej funkcji. Otrzymany wynik dodajemy do akumulatora d
.
Pamiętajmy o inkrementacji zmiennych i
oraz j
w odpowiednich miejscach pętli.
Algorytm wykonuje porównań, więc dokładnie tyle odległości zostało zapisanych w akumulatorze d
. Skoro wszystkie obliczenia zostały wykonane, zwracamy odpowiednią wartość jako rezultat funkcji.
Będzie to odległość wszystkich analizowanych cząsteczek od siebie (zsumowanych w akumulatorze d), podzielona przez liczbę dokonanych porównań.
Rozwiązanie zadania:
Słownik
umownie przyjęta zmienna dowolnego typu, w której są przechowywane wyniki cząstkowe; najczęściej wykorzystywana przy analizie dużej liczby danych, tak aby przy każdym powtórzeniu pętli można było zapisać dotychczasowe rezultaty
środkowy element posortowanego zbioru, jeśli ma nieparzystą liczbę elementów; średnia arytmetyczna dwóch środkowych elementów posortowanego zbioru dla parzystej liczby elementów
suma elementów zbioru, podzielona przez liczbę jego elementów