Do napisania tego tekstu zdopingowała mnie dyskusja na pl.rec.paralotnie, pierwotnie o opadaniu na zapasie ... i zaproponowane przez jednego z kolegów doświadczenie, polegające na jednoczesnym upuszczeniu w pozycji pionowej, dwóch identycznych plastikowych butelek:
- pierwszej z zawartością 0,2 l wody- drugiej z 1,3 litra wody.
Wyobrażenie sobie przebiegu zjawiska fizycznego w czasie może być trudne, nawet jak zna się opisujące je wzory fizyczne. Dlatego napisałem prosty kawałek kodu modelujacego spadanie 2 ciał o różnych masach ale jednakowym kształcie. W kolejnych krokach obliczeń siła działajaca na ciało (i powodująca jego przyspieszanie) to jego ciężar pomniejszony o opór powietrza. Opór powietrza jest liczony na podstawie prędkości z poprzedniego kroku, niedokładności wynikające z tego uproszczenia można zmniejszać zmniejszając krok obliczeniowy. Do celów demonstracji wystarczająco dobre wyniki moża uzyskać przy kroku 0,5-0,1 sekundy. Wydaje mi się, że ten poziom matematycznego opisu i jego implementacja w taki prosty sposób powinny być zrozumiałe dla każdego ...
Przyjęto pole poprzecznego przekroju 0,006 metra kwadratowego (pole koła o średnicy 9 cm), stały współczynnik oporu 0,1 niezależnie od prędkości (wzrastająca prędkość w wpływa na skalę zjawiska i opisującą ją liczbę Re ale jak to wpływa na opór butelki ?) i stałą gęstość powietrza (gęstość rośnie wraz ze spadkiem wysokości), czas eksperymentu 10 sekund.
Kod można uruchomić w internetowej 'piaskownicy programistycznej' takiej jak ideone.com (ten kod pod linkem https://ideone.com/CCEYnT ) lub w dowolnym innym środowisku z językiem C, a modyfikując odpowiednio parametry (np. masy ciał, pole poprzecznego przekroju, współczynnik oporu, ...) wirtualnie przeprowadzać różne wersje doświadczenia, wyniki w postaci tabelki ( rysowanie wykresów w wersji 2.0, animacje w 3.5 ... ).
#include < stdio.h >
// stałe fizyczne const double ro = 1.25; // gestosc powietrza [kg/m^3] const double g = 9.81; // przyspieszenie ziemskie [m/s^2]
double Faero(double S, double C, double v) { return v*v*S*C*ro/2; } int main(void) { // parametry eksperymentu stale w czasie double m1 = 0.2; // masa ciala 1 [kg] double m2 = 1.3; // masa ciala 2 [kg] double Cx1 = 0.1; // wspolczynnik oporu ciala 1 double Cx2 = 0.1; double S_1 = 0.006; // pole poprzecznego przekroju [m^2] double S_2 = 0.006; double dt = 0.1; // modelowy odcinek czasu [s] double Tmax = 10.0; // limit czasu [s] // zmienne w czasie double a1 = 0.0; // przyspieszenie [m/s^2] double a2 = 0.0; double f1 = 0.0; // sila oporu [N] double f2 = 0.0; double v1 = 0.0; // predkosc [m/s] double v2 = 0.0; double s1 = 0.0; // droga [m] double s2 = 0.0; for(double t=0; t < Tmax; t+=dt) { f1 = Faero(S_1, Cx1, v1); // opor liczony dla predkosci z poprzedniego kroku f2 = Faero(S_2, Cx2, v2); a1 = (m1*g - f1) / m1; // przyspieszenie = (ciezar - opor) / mase a2 = (m2*g - f2) / m2; double v1p = v1; // predkosc poczatkowa w kroku - do policzenia sredniej double v2p = v2; v1 += a1*dt; // predkosc wzrasta o 'przyspieszenie * czas_kroku' v2 += a2*dt; s1 += (v1p + v1)/2 * dt; // droga wzrasta o 'sredna_predkosc * czas_kroku' s2 += (v2p + v2)/2 * dt; printf("%3.2fs f[%6.2f,%6.2f] a[%4.2f,%4.2f] v[%5.2f,%5.2f] s[%5.2f,%5.2f]\n", t+dt, f1,f2, a1,a2, v1,v2, s1,s2); } return 0; }
Wyniki [pierwsze_ciało, drugie_ciało]:
0.50s f[ 0.01, 0.01] a[9.78,9.81] v[ 4.90, 4.90] s[ 1.23, 1.23] 0.60s f[ 0.01, 0.01] a[9.76,9.80] v[ 5.88, 5.88] s[ 1.76, 1.77] 0.70s f[ 0.01, 0.01] a[9.75,9.80] v[ 6.85, 6.86] s[ 2.40, 2.40] 0.80s f[ 0.02, 0.02] a[9.72,9.80] v[ 7.82, 7.84] s[ 3.13, 3.14] 0.90s f[ 0.02, 0.02] a[9.70,9.79] v[ 8.79, 8.82] s[ 3.97, 3.97]
Jak widać powyżej, po spadnieciu o 2-3 m (0.7-0.8 sek) różnica jest nierejestrowalna, dopiero po opadnieciu o ok. 50 m (3,3 sek) zarejestujemy różnicę gołym okiem.2.90s f[ 0.26, 0.28] a[8.52,9.60] v[27.13,28.24] s[40.29,41.10] 3.00s f[ 0.28, 0.30] a[8.43,9.58] v[27.97,29.19] s[43.05,43.97] 3.10s f[ 0.29, 0.32] a[8.34,9.56] v[28.81,30.15] s[45.89,46.94] 3.20s f[ 0.31, 0.34] a[8.25,9.55] v[29.63,31.11] s[48.81,50.00] 3.30s f[ 0.33, 0.36] a[8.16,9.53] v[30.45,32.06] s[51.81,53.16] 3.40s f[ 0.35, 0.39] a[8.07,9.51] v[31.26,33.01] s[54.90,56.41]
Natomiast gdyby cieższa butelka (złośliwie ;-), obróciła się bokiem do kierunku lotu (przekrój wzrasta do ok. 0.025 m2) a lżejsza leciała w pozycji opływowej to wynik jest zależny od współczynika oporu i z tą dokładnościa obliczeń (szacowanie współczynników oporu) nie można go prawidłowo przewidzieć.