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

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 arytmetycznaś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. 5 ms, 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ść Vx = 1 msVy = 0.

  • Obiekt lecący w przeciwnym kierunku np. miałby Vx = -1 msVy = 0.

  • Obiekt lecący pod kątem 45° w stosunku do obu osi miałby np. Vx = 1 msVy = 1 ms.

Oczywiście są dozwolone wszystkie kombinacje wartości Vx Vy .

Wartość całkowitej prędkości można obliczyć ze wzoru:

V = ( V x 2   +   V y 2 )

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 dodatnia

  • VIndeks dolny x[1..n] – tablica zawierająca składowe prędkości wzdłuż osi X; tablica liczb całkowitych

  • VIndeks dolny y [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.

Linia 1. funkcja ŚredniaPrędkość otwórz nawias okrągły VX przecinek VY przecinek n zamknij nawias okrągły.

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.

Linia 1. funkcja ŚredniaPrędkość otwórz nawias okrągły VX przecinek VY przecinek n zamknij nawias okrągły. Linia 2. i ← 1. Linia 3. sumaV ← 0. Linia 4. dopóki i otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 5. i ← i plus 1.

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.

Linia 1. funkcja ŚredniaPrędkość otwórz nawias okrągły VX przecinek VY przecinek n zamknij nawias okrągły. Linia 2. i ← 1. Linia 3. sumaV ← 0. Linia 4. dopóki i otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 5. vx ← VX otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 6. vy ← VY otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 7. sumaV ← sumaV plus sqrt otwórz nawias okrągły vx asterysk vx plus vy asterysk vy zamknij nawias okrągły. Linia 8. i ← i plus 1.

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:

Linia 1. funkcja ŚredniaPrędkość otwórz nawias okrągły VX przecinek VY przecinek n zamknij nawias okrągły. Linia 2. i ← 1. Linia 3. sumaV ← 0. Linia 4. dopóki i otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 5. vx ← VX otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 6. vy ← VY otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 7. sumaV ← sumaV plus sqrt otwórz nawias okrągły vx asterysk vx plus vy asterysk vy zamknij nawias okrągły. Linia 8. i ← i plus 1. Linia 9. zwróć sumaV prawy ukośnik n.

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 (x1,y1).

Aby obliczyć odległość między parą cząstek o pozycjach (x1, y1) oraz (x2, y2), można wykorzystać do tego następujący wzór:

d = ( x 1 x 2 ) 2 + ( y 1 y 2 ) 2

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 naturalna

  • VIndeks dolny x[1..n] – tablica położeń cząstek wzdłuż osi X; tablica liczb całkowitych

  • VIndeks dolny y[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.

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły.

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.

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły.

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.

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 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].

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 0. Linia 6. i ← 1. Linia 7. dopóki i otwórz nawias ostrokątny znak równości n wykonuj dwukropek.
Ważne!

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:

Linia 1. i ← 1. Linia 2. dopóki i otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 3. j ← 1. Linia 4. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 5. kropka kropka kropka.

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:

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

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:

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 0. Linia 6. i ← 1. Linia 7. dopóki i otwórz nawias ostrokątny n wykonuj dwukropek. Linia 8. j ← i plus 1. Linia 9. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek.

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.

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 0. Linia 6. i ← 1. Linia 7. dopóki i otwórz nawias ostrokątny n wykonuj dwukropek. Linia 8. j ← i plus 1. Linia 9. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 10. d ← d plus Odległość otwórz nawias okrągły X otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek X otwórz nawias kwadratowy j zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły.

Pamiętajmy o inkrementacji zmiennych i oraz j w odpowiednich miejscach pętli.

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 0. Linia 6. i ← 1. Linia 7. dopóki i otwórz nawias ostrokątny n wykonuj dwukropek. Linia 8. j ← i plus 1. Linia 9. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 10. d ← d plus Odległość otwórz nawias okrągły X otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek X otwórz nawias kwadratowy j zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły. Linia 11. j ← j plus 1. Linia 12. i ← i plus 1.

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:

Linia 1. funkcja Odległość otwórz nawias okrągły x1 przecinek y1 przecinek x2 przecinek y2 zamknij nawias okrągły. Linia 2. zwróć sqrt otwórz nawias okrągły otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły asterysk otwórz nawias okrągły x1 minus x2 zamknij nawias okrągły plus otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły asterysk otwórz nawias okrągły y1 minus y2 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. funkcja ŚredniaOdległość otwórz nawias okrągły X przecinek Y przecinek n zamknij nawias okrągły. Linia 5. d ← 0. Linia 6. i ← 1. Linia 7. dopóki i otwórz nawias ostrokątny n wykonuj dwukropek. Linia 8. j ← i plus 1. Linia 9. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 10. d ← d plus Odległość otwórz nawias okrągły X otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek X otwórz nawias kwadratowy j zamknij nawias kwadratowy przecinek Y otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły. Linia 11. j ← j plus 1. Linia 12. i ← i plus 1. Linia 13. zwróć d prawy ukośnik otwórz nawias okrągły otwórz nawias okrągły n minus 1 zamknij nawias okrągły asterysk n prawy ukośnik 2 zamknij nawias okrągły.

Słownik

akumulator
akumulator

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

mediana
mediana

ś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

średnia arytmetyczna
średnia arytmetyczna

suma elementów zbioru, podzielona przez liczbę jego elementów