Programowanie, część IV
|
|
- Wiktor Smoliński
- 6 lat temu
- Przeglądów:
Transkrypt
1 Programowanie, część IV Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 12 kwietnia 2011 Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
2 Równania ruchu Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu W fizyce często potrzebujemy przewidzieć zachowanie się jakiegoś układu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
3 Równania ruchu Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu W fizyce często potrzebujemy przewidzieć zachowanie się jakiegoś układu. W tym celu wyznaczamy zmiany jego konfiguracji w czasie przy zadanym stanie początkowym. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
4 Numeryczne rozwiązywanie równań ruchu Równania ruchu W fizyce często potrzebujemy przewidzieć zachowanie się jakiegoś układu. W tym celu wyznaczamy zmiany jego konfiguracji w czasie przy zadanym stanie początkowym. Służą nam do tego równania różniczkowe, takie jak równanie Newtona: d 2 ( ) d dt 2 q(t) = f dt q(t), q(t), t gdzie q(t) oznacza konfigurację układu w chwili czasu t, a funkcja f reprezentuje siły działające w układzie (z uwzględnieniem mas składników układu). (1) Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
5 Sprowadzanie do równania I rzędu Numeryczne rozwiązywanie równań ruchu Wprawdzie równanie (1) jest II rzędu, ale można sprowadzić je do postaci równania I rzędu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
6 Numeryczne rozwiązywanie równań ruchu Sprowadzanie do równania I rzędu Wprawdzie równanie (1) jest II rzędu, ale można sprowadzić je do postaci równania I rzędu. W tym celu wprowadźmy oznaczenia: v(t) = d dt q(t) u(t) = [q(t); v(t)] g(u(t), t) = [v(t); f(v(t), q(t), t)] Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
7 Numeryczne rozwiązywanie równań ruchu Sprowadzanie do równania I rzędu Wprawdzie równanie (1) jest II rzędu, ale można sprowadzić je do postaci równania I rzędu. W tym celu wprowadźmy oznaczenia: v(t) = d dt q(t) u(t) = [q(t); v(t)] g(u(t), t) = [v(t); f(v(t), q(t), t)] Wtedy następujące równanie jest równoważne równaniu (1). d u(t) = g(u(t), t) (2) dt Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
8 Przybliżenie rozwiązania Numeryczne rozwiązywanie równań ruchu Równanie (2) może być ściśle rozwiązane analitycznie tylko w (bardzo) ograniczonej liczbie przypadków. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
9 Przybliżenie rozwiązania Numeryczne rozwiązywanie równań ruchu Równanie (2) może być ściśle rozwiązane analitycznie tylko w (bardzo) ograniczonej liczbie przypadków. Na szczęście zwykle nie potrzebujemy go ściśle rozwiązywać. Nie musimy nawet znać rozwiązania dla każdej chwili czasu t. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
10 Przybliżenie rozwiązania Numeryczne rozwiązywanie równań ruchu Równanie (2) może być ściśle rozwiązane analitycznie tylko w (bardzo) ograniczonej liczbie przypadków. Na szczęście zwykle nie potrzebujemy go ściśle rozwiązywać. Nie musimy nawet znać rozwiązania dla każdej chwili czasu t. Zazwyczaj wystarczy wyznaczyć w przybliżeniu konfigurację układu w pewnej liczbie chwil czasu t 0, t 1, t 2,..., t n takich, że t i+1 = t i + t, jeśli tylko odstęp czasu t jest rozsądnie mały. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
11 Przybliżenie rozwiązania Numeryczne rozwiązywanie równań ruchu Równanie (2) może być ściśle rozwiązane analitycznie tylko w (bardzo) ograniczonej liczbie przypadków. Na szczęście zwykle nie potrzebujemy go ściśle rozwiązywać. Nie musimy nawet znać rozwiązania dla każdej chwili czasu t. Zazwyczaj wystarczy wyznaczyć w przybliżeniu konfigurację układu w pewnej liczbie chwil czasu t 0, t 1, t 2,..., t n takich, że t i+1 = t i + t, jeśli tylko odstęp czasu t jest rozsądnie mały. Wystarczy zatem wyznaczyć ciąg wektorów u i takich, że dla każdego i zachodzi u(t i ) u i < ɛ, gdzie epsilon jest zadanym limitem odchylenia obliczonego wektora od prawdziwej konfiguracji układu w danej chwili czasu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
12 Metoda Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu Zauważmy, że u(t i+1 ) u(t i ) = ti+1 t i g(u(τ), τ)dτ (3) Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
13 Metoda Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu Zauważmy, że u(t i+1 ) u(t i ) = ti+1 t i g(u(τ), τ)dτ (3) Jeżeli u(t) jest funkcją o wartościach rzeczywistych, to w pierwszym przybliżeniu można oszacować całkę po prawej stronie równania (3) przez pole powierzchni prostokąta o wysokości g(u(t i ), t i ) i długości podstawy t. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
14 Metoda Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu Zauważmy, że u(t i+1 ) u(t i ) = ti+1 t i g(u(τ), τ)dτ (3) Jeżeli u(t) jest funkcją o wartościach rzeczywistych, to w pierwszym przybliżeniu można oszacować całkę po prawej stronie równania (3) przez pole powierzchni prostokąta o wysokości g(u(t i ), t i ) i długości podstawy t. Stąd w ogólności otrzymujemy algorytm zwany metodą Eulera. u i+1 = u i + g(u i, t i ) t Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
15 Wady metody Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu W każdym kroku metody Eulera odstępstwo od prawdziwej wartości u(t i ) może być rzędu ( t) 2 : u(t i+1 ) = u(t i ) + t du dt + O (( t) 2) ti = u(t i ) + g(u(t i ), t i ) t + O (( t) 2) Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
16 Wady metody Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu W każdym kroku metody Eulera odstępstwo od prawdziwej wartości u(t i ) może być rzędu ( t) 2 : u(t i+1 ) = u(t i ) + t du dt + O (( t) 2) ti = u(t i ) + g(u(t i ), t i ) t + O (( t) 2) Ponadto w ogólności jest ona niestabilna, czyli całkowite odstępstwo u i od u(t i ) może stopniowo narastać wraz z liczbą wykonanych kroków. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
17 Wady metody Eulera Symulacje ruchu obiektów Numeryczne rozwiązywanie równań ruchu W każdym kroku metody Eulera odstępstwo od prawdziwej wartości u(t i ) może być rzędu ( t) 2 : u(t i+1 ) = u(t i ) + t du dt + O (( t) 2) ti = u(t i ) + g(u(t i ), t i ) t + O (( t) 2) Ponadto w ogólności jest ona niestabilna, czyli całkowite odstępstwo u i od u(t i ) może stopniowo narastać wraz z liczbą wykonanych kroków. W celu otrzymania bardziej praktycznej metody można spróbować użyć lepszego przybliżenia całki po prawej stronie równania (3). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
18 Poprawianie metody Eulera Numeryczne rozwiązywanie równań ruchu Wysokość prostokąta, którego pola powierzchni używamy do oszacowania całki w równaniu (3), można wyznaczyć wykorzystując przybliżoną wartość funkcji g(u(t), t) w punkcie t i + t/2. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
19 Numeryczne rozwiązywanie równań ruchu Poprawianie metody Eulera Wysokość prostokąta, którego pola powierzchni używamy do oszacowania całki w równaniu (3), można wyznaczyć wykorzystując przybliżoną wartość funkcji g(u(t), t) w punkcie t i + t/2. Weźmy: k 1 = g(u i, t i ) k 2 = g(u i + αk 1 t, t i + β t) u i+1 = u i + ω 1 k 1 t + ω 2 k 2 t i wybierzmy stałe α, β, ω 1, ω 2 tak, aby różnica między u i+1 oraz u(t i+1 ) była rzędu ( t) 3 (przy założeniu, że u i = u(t i )). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
20 Poprawianie metody Eulera (c. d.) Numeryczne rozwiązywanie równań ruchu Z rozwinięcia u(t) w szereg Taylora w otoczniu t i mamy: u(t i+1 ) = u(t i ) + g(u(t i ), t i ) t + g ( t) 2 t ti 2 + g u g(u(t i ), t i ) ( t)2 + O(( t) 3 ) ti 2 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
21 Poprawianie metody Eulera (c. d.) Numeryczne rozwiązywanie równań ruchu Z rozwinięcia u(t) w szereg Taylora w otoczniu t i mamy: u(t i+1 ) = u(t i ) + g(u(t i ), t i ) t + g ( t) 2 t ti 2 + g u g(u(t i ), t i ) ( t)2 + O(( t) 3 ) ti 2 Rozwijając k 2 w szereg Taylora w otoczeniu t i dostajemy: u i+1 = u i + g(u i, t i )(ω 1 + ω 2 ) t + g t βω 2 ( t) 2 ti + g u g(u i, t i )αω 2 ( t) 2 + O(( t) 3 ) ti Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
22 Numeryczne rozwiązywanie równań ruchu Metoda punktu środkowego (ang. midpoint method) Oczekiwany efekt uzyskamy wybierając ω 1 = 1 ω 2, βω 2 = 1/2 oraz αω 2 = 1/2. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
23 Numeryczne rozwiązywanie równań ruchu Metoda punktu środkowego (ang. midpoint method) Oczekiwany efekt uzyskamy wybierając ω 1 = 1 ω 2, βω 2 = 1/2 oraz αω 2 = 1/2. W szczególności możemy wziąć ω 1 = 0, ω 2 = 1, α = 1/2 oraz β = 1/2 i wtedy otrzymujemy algorytm: k 1 = g(u i, t i ) ( k 2 = g u i + t 2 k 1, t i + t ) t 2 u i+1 = u i + k 2 t Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
24 Numeryczne rozwiązywanie równań ruchu Metoda punktu środkowego (ang. midpoint method) Oczekiwany efekt uzyskamy wybierając ω 1 = 1 ω 2, βω 2 = 1/2 oraz αω 2 = 1/2. W szczególności możemy wziąć ω 1 = 0, ω 2 = 1, α = 1/2 oraz β = 1/2 i wtedy otrzymujemy algorytm: k 1 = g(u i, t i ) ( k 2 = g u i + t 2 k 1, t i + t ) t 2 u i+1 = u i + k 2 t Nie musimy jednak poprzestawać na wykorzystywaniu dwóch pośrednich wartości g(u(t), t). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
25 Metoda Rungego-Kutty Wyprowadzenie metody Rungego-Kutty Użyjmy czterech pośrednich wartości g(u(t), t): k 1 = g(u i, t i ) k 2 = g(u i + α 1 k 1 t, t i + β 1 t) k 3 = g(u i + α 2 k 2 t, t i + β 2 t) k 4 = g(u i + α 3 k 3 t, t i + β 3 t) u i+1 = 4 u i + t ω j k j (4) j=1 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
26 Metoda Rungego-Kutty Wyprowadzenie metody Rungego-Kutty Użyjmy czterech pośrednich wartości g(u(t), t): k 1 = g(u i, t i ) k 2 = g(u i + α 1 k 1 t, t i + β 1 t) k 3 = g(u i + α 2 k 2 t, t i + β 2 t) k 4 = g(u i + α 3 k 3 t, t i + β 3 t) u i+1 = 4 u i + t ω j k j (4) j=1 Postępując analogicznie do poprzedniego przypadku możemy otrzymać zgodność prawej strony równania (4) z rozwinięciem Taylora u(t) w otoczeniu t i z dokładnością do wyrazów rzędu ( t) 4 przy założeniu, że u i = u(t i ). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
27 Metoda Rungego-Kutty Metoda Rungego-Kutty (czwartego rzędu) W tym celu trzeba wybrać α 1 = β 1 = α 2 = β 2 = 1/2, α 3 = β 3 = 1, ω 1 = ω 4 = 1/6 oraz ω 2 = ω 3 = 1/3. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
28 Metoda Rungego-Kutty Metoda Rungego-Kutty (czwartego rzędu) W tym celu trzeba wybrać α 1 = β 1 = α 2 = β 2 = 1/2, α 3 = β 3 = 1, ω 1 = ω 4 = 1/6 oraz ω 2 = ω 3 = 1/3. Wówczas otrzymujemy algorytm: k 1 = g(u i, t i ) ( k 2 = g u i + t 2 k 1, t i + t ) 2 ( k 3 = g u i + t 2 k 2, t i + t ) 2 k 4 = g(u i + k 3 t, t i + t) ( k1 u i+1 = u i + t 6 + k k k ) 4 6 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
29 Metoda Rungego-Kutty Metoda Rungego-Kutty czwartego rzędu (c. d.) W metodzie Rungego-Kutty czwartego rzędu różnica między u i oraz u(t i ) w pojedynczym kroku jest rzędu ( t) 5. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
30 Metoda Rungego-Kutty Metoda Rungego-Kutty czwartego rzędu (c. d.) W metodzie Rungego-Kutty czwartego rzędu różnica między u i oraz u(t i ) w pojedynczym kroku jest rzędu ( t) 5. Ponadto metoda jest stabilna, czyli całkowite odstępstwo u i od prawdziwych wartości u(t i ) jest ograniczone. Inaczej mówiąc istnieje dodatnia liczba ɛ taka, że dla każdego i zachodzi u i u(t i ) < ɛ. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
31 Metoda Rungego-Kutty Metoda Rungego-Kutty czwartego rzędu (c. d.) W metodzie Rungego-Kutty czwartego rzędu różnica między u i oraz u(t i ) w pojedynczym kroku jest rzędu ( t) 5. Ponadto metoda jest stabilna, czyli całkowite odstępstwo u i od prawdziwych wartości u(t i ) jest ograniczone. Inaczej mówiąc istnieje dodatnia liczba ɛ taka, że dla każdego i zachodzi u i u(t i ) < ɛ. Wartość ɛ zależy jednak od funkcji g(u(t), t) po prawej stronie równania różniczkowego. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
32 Metoda Rungego-Kutty Założenia programu realizującego algorytm Aby zapisać algorytm Rungego-Kutty w postaci programu zauważmy, że do przeprowadzenia obliczeń dla jednego kroku metody potrzebny jest wektor reprezentujący wartość u i oraz wektory, w których będzie można zapisać k 1, k 2, k 3 i k 4. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
33 Metoda Rungego-Kutty Założenia programu realizującego algorytm Aby zapisać algorytm Rungego-Kutty w postaci programu zauważmy, że do przeprowadzenia obliczeń dla jednego kroku metody potrzebny jest wektor reprezentujący wartość u i oraz wektory, w których będzie można zapisać k 1, k 2, k 3 i k 4. Wynik obliczeń, czyli u i+1, można zapisać w tym samym miejscu, w którym przechowywana była wartość u i z poprzedniego kroku. Ponadto wektory służące do przechowywania k j mogą być wykorzystane w następnym kroku (rezerwowanie ich przed wykonaniem każdego kroku i zwalnianie po jego wykonaniu nie byłoby efektywne). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
34 Metoda Rungego-Kutty Założenia programu realizującego algorytm Aby zapisać algorytm Rungego-Kutty w postaci programu zauważmy, że do przeprowadzenia obliczeń dla jednego kroku metody potrzebny jest wektor reprezentujący wartość u i oraz wektory, w których będzie można zapisać k 1, k 2, k 3 i k 4. Wynik obliczeń, czyli u i+1, można zapisać w tym samym miejscu, w którym przechowywana była wartość u i z poprzedniego kroku. Ponadto wektory służące do przechowywania k j mogą być wykorzystane w następnym kroku (rezerwowanie ich przed wykonaniem każdego kroku i zwalnianie po jego wykonaniu nie byłoby efektywne). Dlatego wygodnie jest tak skonstruować program, aby te wektory były polami pewnego obiektu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
35 Metoda Rungego-Kutty Założenia programu realizującego algorytm (c. d.) Ułatwia to także wyznaczanie przybliżenia rozwiązania dla wielu równań jednocześnie (można zdefiniować odpowiedni obiekt dla każdego równania). Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
36 Metoda Rungego-Kutty Założenia programu realizującego algorytm (c. d.) Ułatwia to także wyznaczanie przybliżenia rozwiązania dla wielu równań jednocześnie (można zdefiniować odpowiedni obiekt dla każdego równania). Obiekt, którego będziemy używać do obliczeń, będzie zawsze przeprowadzał podobne operacje, niezależnie od tego jaka funkcja g(u(t), t) znajduje się po prawej stronie równania (zawsze trzeba będzie wyznaczyć k j na podstawie odpowiednich wzorów i obliczyć ich sumę). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
37 Metoda Rungego-Kutty Założenia programu realizującego algorytm (c. d.) Ułatwia to także wyznaczanie przybliżenia rozwiązania dla wielu równań jednocześnie (można zdefiniować odpowiedni obiekt dla każdego równania). Obiekt, którego będziemy używać do obliczeń, będzie zawsze przeprowadzał podobne operacje, niezależnie od tego jaka funkcja g(u(t), t) znajduje się po prawej stronie równania (zawsze trzeba będzie wyznaczyć k j na podstawie odpowiednich wzorów i obliczyć ich sumę). W związku z tym wygodnie jest tak zdefiniować klasę dla tego obiektu, aby funkcja g(u(t), t) była przekazywana do obiektu poprzez konstruktor. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
38 (Dygresja) Wskaźniki do funkcji Wskaźniki do funkcji deklaracja Wskaźnik do funkcji (ang. function pointer) Jest to zmienna, w której zapisuje się adres funkcji. Dla tego rodzaju wskaźników typ danych wskazywanego obiektu określa: 1 jaki jest typ danych dla wyniku zwracanego przez funkcję, 2 jakie są typy danych argumentów tej funkcji oraz ich liczba. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
39 (Dygresja) Wskaźniki do funkcji Wskaźniki do funkcji deklaracja Wskaźnik do funkcji (ang. function pointer) Jest to zmienna, w której zapisuje się adres funkcji. Dla tego rodzaju wskaźników typ danych wskazywanego obiektu określa: 1 jaki jest typ danych dla wyniku zwracanego przez funkcję, 2 jakie są typy danych argumentów tej funkcji oraz ich liczba. Wskaźnik do funkcji zwracającej wynik typu double o dwóch argumentach jednym typu double i drugim typu int deklaruje się w następujący sposób: double (*funkcja)(double, int); Wtedy nazwą zmiennej dla tego wskaźnika jest funkcja. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
40 (Dygresja) Wskaźniki do funkcji Wskaźniki do funkcji nadawanie wartości Mając następujący wskaźnik do funkcji: double (*fun)(double); // Argument i wynik typu double. można przypisać mu funkcję sin() z biblioteki standardowej: fun = sin; // Po prawej stronie jest nazwa funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
41 (Dygresja) Wskaźniki do funkcji Wskaźniki do funkcji nadawanie wartości Mając następujący wskaźnik do funkcji: double (*fun)(double); // Argument i wynik typu double. można przypisać mu funkcję sin() z biblioteki standardowej: fun = sin; // Po prawej stronie jest nazwa funkcji. Wtedy instrukcja cout << fun(m_pi) << endl; spowoduje wydrukowanie wartości funkcji sin(m_pi). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
42 Klasa dla algorytmu Rungego-Kutty Implementacja metody Rungego-Kutty Korzystając ze wskaźnika do funkcji można zdefiniować uniwersalną klasę dla algorytmu Rungego-Kutty. class RungeKutta { private: double t; // bieżący czas vector<double> u; // bieżąca konfiguracja vector<double> v2, v3, v4; // pomocnicze double dt; // krok int n; // liczba współrzędnych void (*G)(const vector<double>& u, double t, vector<double>& out); // G() reprezentuje prawą stronę równania. Argument u jest // bieżącą konfiguracją układu, a wynik działania funkcji na u // jest zapisywany w wektorze out. public: RungeKutta(const vector<double> u0, double t0, double d, void (*fun)(const vector<double>&, double, vector<double>&)); double gett(void) const { return t; } vector<double> getu(void) const { return u; } void wykonaj_krok(void); }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
43 Konstruktor dla klasy RungeKutta Implementacja metody Rungego-Kutty RungeKutta::RungeKutta( const vector<double> u0, double t0, double d, void (*fun)(const vector<double>&, double, vector<double>&)) { n = u0.size(); u = u0; // Początkowa konfiguracja. v2.reserve(n); // Jawna deklaracja liczby współrzędnych. v3.reserve(n); v4.reserve(n); t = t0; dt = d; G = fun; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
44 Konstruktor dla klasy RungeKutta Implementacja metody Rungego-Kutty RungeKutta::RungeKutta( const vector<double> u0, double t0, double d, void (*fun)(const vector<double>&, double, vector<double>&)) { n = u0.size(); u = u0; // Początkowa konfiguracja. v2.reserve(n); // Jawna deklaracja liczby współrzędnych. v3.reserve(n); v4.reserve(n); t = t0; dt = d; G = fun; } Dla wektorów v2, v3, v4 trzeba jawnie zadeklarować liczbę współrzędnych (w przeciwnym razie w funkcji wykonaj_krok będą występować błędy związane z dostępem do pamięci). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
45 Konstruktor dla klasy RungeKutta Implementacja metody Rungego-Kutty RungeKutta::RungeKutta( const vector<double> u0, double t0, double d, void (*fun)(const vector<double>&, double, vector<double>&)) { n = u0.size(); u = u0; // Początkowa konfiguracja. v2.reserve(n); // Jawna deklaracja liczby współrzędnych. v3.reserve(n); v4.reserve(n); t = t0; dt = d; G = fun; } Dla wektorów v2, v3, v4 trzeba jawnie zadeklarować liczbę współrzędnych (w przeciwnym razie w funkcji wykonaj_krok będą występować błędy związane z dostępem do pamięci). Obliczenia realizujące algorytm zawiera metoda wykonaj_krok(). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
46 Implementacja metody Rungego-Kutty void RungeKutta::wykonaj_krok(void) { const double jedna_trzecia = 1.0 / 3.0; double dt_2 = 0.5 * dt; int i; } v3 = u; G(u, t, v2); // v2 zawiera wartość k1 for (i = 0; i < n; i++) { v2[i] *= dt_2; v4[i] = u[i] + v2[i]; // u + (h/2) * k1 u[i] += jedna_trzecia * v2[i]; // u += (h/6) * k1 } G(v4, t + dt_2, v2); // v2 zawiera wartość k2 for (i = 0; i < n; i++) { v2[i] *= dt; v4[i] = v3[i] * v2[i]; // u + (h/2) * k2 u[i] += jedna_trzecia * v2[i]; // u += (h/3) * k2 } G(v4, t + dt_2, v2); // v2 zawiera wartość k3 for (i = 0; i < n; i++) { v2[i] *= dt; v4[i] = v3[i] + v2[i]; // u + k3 u[i] += jedna_trzecia * v2[i]; // u += (h/3) * k3 } t += dt; G(v4, t, v2); // v2 zawiera wartość k4 for (i = 0; i < n; i++) u[i] += dt_2 * jedna_trzecia * v2[i]; // u += (h/6) * k4 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
47 Przykład: oscylator harmoniczny Implementacja metody Rungego-Kutty Zdefiniowaną klasę RungeKutta można wykorzystać do wyznaczenia (w przybliżeniu) ruchu oscylatora harmonicznego. W tym celu trzeba przygotować funkcję, która zostanie przekazana do konstruktora obiektu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
48 Przykład: oscylator harmoniczny Implementacja metody Rungego-Kutty Zdefiniowaną klasę RungeKutta można wykorzystać do wyznaczenia (w przybliżeniu) ruchu oscylatora harmonicznego. W tym celu trzeba przygotować funkcję, która zostanie przekazana do konstruktora obiektu. static void osc(const vector<double>& y, double x, vector<double>& out) { static const double K = 1.0; out[0] = y[1]; out[1] = - K * y[0]; // Pochodna położenia. // Pochodna prędkości. } (void)x; // Zbędny parametr. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
49 Implementacja metody Rungego-Kutty Przykład: oscylator harmoniczny obliczenia Mając do dyspozycji klasę RungeKutta oraz funkcję osc() zdefiniowane jak wyżej można przeprowadzić obliczenia. Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
50 Implementacja metody Rungego-Kutty Przykład: oscylator harmoniczny obliczenia Mając do dyspozycji klasę RungeKutta oraz funkcję osc() zdefiniowane jak wyżej można przeprowadzić obliczenia. vector<double> y; // Warunek początkowy. y.push_back(1.0); // położenie y.push_back(0.0); // prędkość RungeKutta oscylator(y, 0, 0.01, osc); for (int i = 0; i < KROKI; i++) { double t = oscylator.gett(); y = oscylator.getu(); cout << t << "\t" << y[0] << "\t" << y[1] << endl; } oscylator.wykonaj_krok(); Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
51 Implementacja metody Rungego-Kutty Przykład: oscylator harmoniczny obliczenia Mając do dyspozycji klasę RungeKutta oraz funkcję osc() zdefiniowane jak wyżej można przeprowadzić obliczenia. vector<double> y; // Warunek początkowy. y.push_back(1.0); // położenie y.push_back(0.0); // prędkość RungeKutta oscylator(y, 0, 0.01, osc); for (int i = 0; i < KROKI; i++) { double t = oscylator.gett(); y = oscylator.getu(); cout << t << "\t" << y[0] << "\t" << y[1] << endl; } oscylator.wykonaj_krok(); Wynik zostanie zapisany na standardowe wyjście w postaci trzech kolumn liczb: czas, położenie i prędkość oscylatora. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
52 Implementacja metody Rungego-Kutty Abstrakcyjna klasa dla algorytmu Rungego-Kutty Zamist posługiwać się wskaźnikiem do funkcji, można wykorzystać mechanizm dziedziczenia. Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
53 Implementacja metody Rungego-Kutty Abstrakcyjna klasa dla algorytmu Rungego-Kutty Zamist posługiwać się wskaźnikiem do funkcji, można wykorzystać mechanizm dziedziczenia. Zaczynamy od zaprojektowania abstrakcyjnej klasy. class RungeKutta { private: double t; vector<double> u; vector<double> v2, v3, v4; double dt; int n; // bieżący czas // bieżąca konfiguracja // pomocnicze // krok // liczba współrzędnych protected: virtual void G(const vector<double>& in, double t, vector<double>& out) = 0; public: RungeKutta(const vector<double> u0, double t0, double d); double gett(void) const { return t; } vector<double> getu(void) const { return u; } void wykonaj_krok(void); }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
54 Implementacja metody Rungego-Kutty Konstruktor i metoda wykonaj krok() Konstruktor dla klasy RungeKutta ma teraz mniej argumentów. RungeKutta::RungeKutta(const vector<double> u0, double t0, double d) { n = u0.size(); u = u0; // Początkowa konfiguracja. v2.reserve(n); // Jawna deklaracja liczby współrzędnych. v3.reserve(n); v4.reserve(n); t = t0; dt = d; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
55 Implementacja metody Rungego-Kutty Konstruktor i metoda wykonaj krok() Konstruktor dla klasy RungeKutta ma teraz mniej argumentów. RungeKutta::RungeKutta(const vector<double> u0, double t0, double d) { n = u0.size(); u = u0; // Początkowa konfiguracja. v2.reserve(n); // Jawna deklaracja liczby współrzędnych. v3.reserve(n); v4.reserve(n); t = t0; dt = d; } Metoda wykonaj_krok() pozostaje bez zmian w zapisie, choć zamiast funkcji wskazywanej przez wskaźnik wywołuje wirtualną metodę G(). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
56 Metoda Rungego-Kutty przykłady Przykład: oscylator harmoniczny klasa pochodna W celu zdefiniowania metody G() odpowiedniej dla naszych obliczeń trzeba stworzyć klasę pochodną od klasy RungeKutta. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
57 Metoda Rungego-Kutty przykłady Przykład: oscylator harmoniczny klasa pochodna W celu zdefiniowania metody G() odpowiedniej dla naszych obliczeń trzeba stworzyć klasę pochodną od klasy RungeKutta. #include "rk.h" class Oscylator : public RungeKutta { protected: void G(const vector <double> &y, double x, vector<double> &out); public: Oscylator(const vector<double> u0, double t0, double d) : RungeKutta(u0, t0, d) {} }; void Oscylator::G(const vector <double> &y, double x, vector<double> &out) { static const double K = 1.0; out[0] = y[1]; out[1] = - K * y[0]; // pochodna położenia // pochodna prędkości } (void)x; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
58 Metoda Rungego-Kutty przykłady Przykład: oscylator harmoniczny obliczenia Obliczenia przeprowadzamy podobnie, jak w poprzednim przypadku, tylko teraz posługujemy się obiektem klasy Oscylator. vector<double> y(1.0, 0.0); // Warunek początkowy y.push_back(1.0); // położenie y.push_back(0.0); // prędkość Oscylator oscylator(y, 0, 0.01); for (int i = 0; i < KROKI; i++) { y = oscylator.getu(); cout << oscylator.gett() << "\t" << y[0] << "\t" << y[1] << endl; } oscylator.wykonaj_krok(); Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
59 Metoda Rungego-Kutty przykłady Przykład: oscylator harmoniczny z tarciem Dla innego modelu (np. oscylatora z tarciem) tworzymy inną klasę pochodną od klasy RungeKutta. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
60 Metoda Rungego-Kutty przykłady Przykład: oscylator harmoniczny z tarciem Dla innego modelu (np. oscylatora z tarciem) tworzymy inną klasę pochodną od klasy RungeKutta. #include "rk.h" class OscylatorTarcie : public RungeKutta { protected: void G(const vector <double> &y, double x, vector<double> &out); public: OscylatorTarcie(const vector<double> u0, double t0, double d) : RungeKutta(u0, t0, d) {} }; void OscylatorTarcie::G(const vector <double> &y, double x, vector<double> &out) { static const double K = 1.0; static const double f = 0.3; out[0] = y[1]; // pochodna położenia out[1] = - K * y[0] - f * y[1]; // pochodna prędkości } (void)x; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
61 Przykład: huśtawka Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Spróbujmy obliczyć jaka powinna być prędkość początkowa (sztywnej) huśtawki o długości l, na której umieścimy ciężar o masie m, aby osiągnęła ona wychylenie 90 o. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
62 Przykład: huśtawka Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Spróbujmy obliczyć jaka powinna być prędkość początkowa (sztywnej) huśtawki o długości l, na której umieścimy ciężar o masie m, aby osiągnęła ona wychylenie 90 o. Zadanie to można łatwo rozwiązać korzystając z zasady zachowania energii jeżeli nie uwzględnia się tarcia. My jednak uwzględnimy tarcie. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
63 Przykład: huśtawka Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Spróbujmy obliczyć jaka powinna być prędkość początkowa (sztywnej) huśtawki o długości l, na której umieścimy ciężar o masie m, aby osiągnęła ona wychylenie 90 o. Zadanie to można łatwo rozwiązać korzystając z zasady zachowania energii jeżeli nie uwzględnia się tarcia. My jednak uwzględnimy tarcie. Ponadto nie będziemy (bo nie możemy) korzystać z założenia, że wychylenie huśtawki jest małe. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
64 Opis ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Położenie ciężaru na huśtawce zawsze znajduje się na okręgu o promieniu l i środku w punkcie zaczepienia huśtawki. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
65 Opis ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Położenie ciężaru na huśtawce zawsze znajduje się na okręgu o promieniu l i środku w punkcie zaczepienia huśtawki. Kąt wychylenia α zdefiniujemy jako kąt między ramionami huśtawki oraz płaszczyzną jej stabilnej równowagi ( pionem ). Wtedy odległość przebywana przez ciężar na huśtawce w czasie t jest równa zmianie kąta α w czasie t pomnożonej przez długość ramienia huśtawki l. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
66 Opis ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Położenie ciężaru na huśtawce zawsze znajduje się na okręgu o promieniu l i środku w punkcie zaczepienia huśtawki. Kąt wychylenia α zdefiniujemy jako kąt między ramionami huśtawki oraz płaszczyzną jej stabilnej równowagi ( pionem ). Wtedy odległość przebywana przez ciężar na huśtawce w czasie t jest równa zmianie kąta α w czasie t pomnożonej przez długość ramienia huśtawki l. Na ciężar na huśtawce działa siła ciężkości, a właściwie jej składowa styczna do toru ruchu ciężaru, dana wzorem: F g (α) = mg sin α gdzie g jest przyspieszeniem ziemskim. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
67 Równanie ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Ponadto na huśtawkę działa tarcie. Będziemy przyjmować, że jest ono proporcjonalne do masy ciężaru na huśtawce i do jego prędkości (liniowej), a współczynnik proporcjonalności oznaczymy przez f. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
68 Równanie ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Ponadto na huśtawkę działa tarcie. Będziemy przyjmować, że jest ono proporcjonalne do masy ciężaru na huśtawce i do jego prędkości (liniowej), a współczynnik proporcjonalności oznaczymy przez f. Prędkość liniowa ciężaru na huśtawce jest równa prędkości kątowej huśtawki pomnożonej przez długość jej ramienia, natomiast prędkość kątowa huśtawki jest pochodną kąta α względem czasu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
69 Równanie ruchu Symulacje ruchu obiektów Metoda Rungego-Kutty przykłady Ponadto na huśtawkę działa tarcie. Będziemy przyjmować, że jest ono proporcjonalne do masy ciężaru na huśtawce i do jego prędkości (liniowej), a współczynnik proporcjonalności oznaczymy przez f. Prędkość liniowa ciężaru na huśtawce jest równa prędkości kątowej huśtawki pomnożonej przez długość jej ramienia, natomiast prędkość kątowa huśtawki jest pochodną kąta α względem czasu. Biorąc pod uwagę wszystkie powyższe obserwacje oraz drugą zasadę dynamiki, dostajemy następujące równanie ruchu na kąt α: d 2 α dt 2 = g l sin α f dα dt (5) Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
70 Przekształcone równanie ruchu Metoda Rungego-Kutty przykłady Równanie (5) można przepisać w postaci układu równań I rzędu: dα dt = ω (6) dω dt = g l sin α f ω Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
71 Przekształcone równanie ruchu Metoda Rungego-Kutty przykłady Równanie (5) można przepisać w postaci układu równań I rzędu: dα dt = ω (6) dω dt = g l sin α f ω Jeżeli wprowadzimy wektor y(t) = [α(t), ω(t)], to: dy 0 dt = y 1 dy 1 dt = g l sin y 0 f y 1 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
72 Metoda Rungego-Kutty przykłady Klasa pochodna w stosunku do RungeKutta Dla równania ruchu (5) można użyć następującej klasy pochodnej od RungeKutta: class Pendulum : public RungeKutta { private: double K; // iloraz g / l double f; // współczynnik tarcia protected: void G(const vector <double> &y, double x, vector<double> &out); public: Pendulum(const vector<double> u0, double t0, double d, double k, double r) : RungeKutta(u0, t0, d), K(k), f(r) {} }; void Pendulum::G(const vector <double> &y, double x, vector<double> &out) { out[0] = y[1]; // pochodna kąta wyhylenia out[1] = - K * sin(y[0]) - f * y[1]; // pochodna prędkości kątowej (void)x; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
73 Metoda Rungego-Kutty przykłady Wyznaczanie krytycznej prędkości początkowej Klasa ta pozwala nam znaleźć ruch wahadła dla ustalonej prędkości początkowej, ale nie wiemy z góry, czy osiągnie ono maksymalne wychylenie. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
74 Metoda Rungego-Kutty przykłady Wyznaczanie krytycznej prędkości początkowej Klasa ta pozwala nam znaleźć ruch wahadła dla ustalonej prędkości początkowej, ale nie wiemy z góry, czy osiągnie ono maksymalne wychylenie. Możemy poszukać krytycznej prędkości metodą bisekcji, tzn. zgadnąć dwie prędkości początkowe takie, że dla jednej z nich maksymalne położenie jest przekraczane, a dla drugiej nie jest osiągane, a później sprawdzić co dzieje się dla wartości ze środka przedziału. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
75 Metoda Rungego-Kutty przykłady Wyznaczanie krytycznej prędkości początkowej Klasa ta pozwala nam znaleźć ruch wahadła dla ustalonej prędkości początkowej, ale nie wiemy z góry, czy osiągnie ono maksymalne wychylenie. Możemy poszukać krytycznej prędkości metodą bisekcji, tzn. zgadnąć dwie prędkości początkowe takie, że dla jednej z nich maksymalne położenie jest przekraczane, a dla drugiej nie jest osiągane, a później sprawdzić co dzieje się dla wartości ze środka przedziału. Następnie jedną z odgadniętych wartości zastępujemy ich średnią i powtarzamy. W ten sposób dla każdego kroku będziemy mieli dwukrotnie mniejszy przedział do przeszukania. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
76 Metoda Rungego-Kutty przykłady Kryterium przekroczenia maksymalnego wychylenia Zauważmy, że jeżeli znak prędkości kątowej zmieni się w trakcie ruchu przy α < π, to maksymalne wychylenie nie zostanie osiągnięte w tym ruchu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
77 Metoda Rungego-Kutty przykłady Kryterium przekroczenia maksymalnego wychylenia Zauważmy, że jeżeli znak prędkości kątowej zmieni się w trakcie ruchu przy α < π, to maksymalne wychylenie nie zostanie osiągnięte w tym ruchu. bool przekroczone(double v0) { if (v0 < 0) v0 = -v0; vector<double> y; y.push_back(0.0); y.push_back(v0); Pendulum oscylator(y, 0, 0.01, 1, 0.3); while (y[1] > 0 && y[0] < M_PI) { oscylator.wykonaj_krok(); y = oscylator.getu(); } } return y[0] >= M_PI; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
78 Metoda Rungego-Kutty przykłady I etap obliczeń liniowe zwiększanie prędkości początkowej Obliczenia można podzielić na dwa etapy. W pierwszym z nich wybieramy ustaloną wartość prędkości początkowej (kątowej) ω 0 = Ω i sprawdzamy, czy przy tej wartości maksymalne wychylenie jest przekroczone. Jeżeli tak, przechodzimy do II etapu obliczeń. Jeżeli nie, zwiększamy ω 0 o Ω i powtarzamy. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
79 Metoda Rungego-Kutty przykłady I etap obliczeń liniowe zwiększanie prędkości początkowej Obliczenia można podzielić na dwa etapy. W pierwszym z nich wybieramy ustaloną wartość prędkości początkowej (kątowej) ω 0 = Ω i sprawdzamy, czy przy tej wartości maksymalne wychylenie jest przekroczone. Jeżeli tak, przechodzimy do II etapu obliczeń. Jeżeli nie, zwiększamy ω 0 o Ω i powtarzamy. // I etap - sartujemy od v0 = V i będziemy ją w każdym kroku zwiększać // o V, aż wahadło przekroczy maksymalne wychylenie. double v0 = V; while (!przekroczone(v0)) v0 += V; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
80 Metoda Rungego-Kutty przykłady I etap obliczeń liniowe zwiększanie prędkości początkowej Obliczenia można podzielić na dwa etapy. W pierwszym z nich wybieramy ustaloną wartość prędkości początkowej (kątowej) ω 0 = Ω i sprawdzamy, czy przy tej wartości maksymalne wychylenie jest przekroczone. Jeżeli tak, przechodzimy do II etapu obliczeń. Jeżeli nie, zwiększamy ω 0 o Ω i powtarzamy. // I etap - sartujemy od v0 = V i będziemy ją w każdym kroku zwiększać // o V, aż wahadło przekroczy maksymalne wychylenie. double v0 = V; while (!przekroczone(v0)) v0 += V; Po zakończeniu tego etapu wiemy, że poszukiwana wartość znajduję się w przedziale [ω 0 Ω, ω 0 ]. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
81 II etap obliczeń bisekcja Metoda Rungego-Kutty przykłady Przeszukujemy przedział [ω 0 Ω, ω 0 ] metodą bisekcji. Robimy to tak, że dla dolnej granicy przedziału maksymalne wychylenie nie jest przekraczane podczas ruchu, a dla jego górnej granicy jest. W każdym kroku sprawdzamy, co dzieje się w środku przedziału i przesuwamy do niego jedną lub drugą granicę (tę, dla której zachowanie się układu jest takie, jak dla środka przedziału). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
82 II etap obliczeń bisekcja Metoda Rungego-Kutty przykłady Przeszukujemy przedział [ω 0 Ω, ω 0 ] metodą bisekcji. Robimy to tak, że dla dolnej granicy przedziału maksymalne wychylenie nie jest przekraczane podczas ruchu, a dla jego górnej granicy jest. W każdym kroku sprawdzamy, co dzieje się w środku przedziału i przesuwamy do niego jedną lub drugą granicę (tę, dla której zachowanie się układu jest takie, jak dla środka przedziału). // II etap - bisekcja. double a = v0, b = v0 - V; while (a - b > epsilon) { double c = 0.5 * (a + b); } if (przekroczone(c)) a = c; else b = c; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
83 II etap obliczeń bisekcja Metoda Rungego-Kutty przykłady Wynikiem obliczeń jest przedział zawierający poszukiwaną wartość. Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
84 II etap obliczeń bisekcja Metoda Rungego-Kutty przykłady Wynikiem obliczeń jest przedział zawierający poszukiwaną wartość. Długość tego przedziału zależy od narzuconej programowi dokładności (stała epsilon w kodzie powyżej). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
85 II etap obliczeń bisekcja Metoda Rungego-Kutty przykłady Wynikiem obliczeń jest przedział zawierający poszukiwaną wartość. Długość tego przedziału zależy od narzuconej programowi dokładności (stała epsilon w kodzie powyżej). Podobne obliczenia można zrobić dla przypadku, w którym wartość początkowego wychylenia huśtawki jest niezerowa. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
86 Wahadło z wymuszaniem Metoda Rungego-Kutty przykłady Do omówionego modelu można bardzo łatwo dodać popychanie w postaci siły proporcjonalnej do pewnej funkcji zależnej od czasu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
87 Wahadło z wymuszaniem Metoda Rungego-Kutty przykłady Do omówionego modelu można bardzo łatwo dodać popychanie w postaci siły proporcjonalnej do pewnej funkcji zależnej od czasu. Jeśli funkcją tą jest cos(x), to równanie ruchu ma postać: d 2 α dt 2 = g l sin α f dα dt + B c cos(ω c t + ϕ c ) (7) gdzie B c jest amplitudą, ω c jest częstością drgań, a ϕ c jest przesunięciem fazowym wymuszającego oscylatora. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
88 Wahadło z wymuszaniem Metoda Rungego-Kutty przykłady Do omówionego modelu można bardzo łatwo dodać popychanie w postaci siły proporcjonalnej do pewnej funkcji zależnej od czasu. Jeśli funkcją tą jest cos(x), to równanie ruchu ma postać: d 2 α dt 2 = g l sin α f dα dt + B c cos(ω c t + ϕ c ) (7) gdzie B c jest amplitudą, ω c jest częstością drgań, a ϕ c jest przesunięciem fazowym wymuszającego oscylatora. W tym modelu można zaobserwować interesujące zachowanie się układu, takie jak rezonans lub chaotyczna ewolucja. Tak, jak poprzednio, można stworzyć dla niego klasę pochodną względem klasy RungeKutta. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
89 Metoda Rungego-Kutty przykłady Definicja klasy dla wahadła z wymuszaniem Klasa pochodna w stosunku do RungeKutta dla wahadła z wymuszaniem class Pendulum : public RungeKutta { private: double K; // iloraz g / l double f; // współczynnik tarcia double B; // amplituda wymuszającego oscylatora double W; // częstość wymuszającego oscylatora double S; // przesunięcie fazowe wymuszającego oscylatora protected: void G(const vector <double> &y, double x, vector<double> &out); public: Pendulum(const vector<double> u0, double t0, double d, double k, double r, double b, double w, double s) : RungeKutta(u0, t0, d), K(k), f(r), B(b), W(w), S(s) {} }; void Pendulum::G(const vector <double> &y, double x, vector<double> &out) { out[0] = y[1]; out[1] = - K * sin(y[0]) - f * y[1] + B * cos(w * x + S); } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
90 Wizualizacja wyników obliczeń Wykres położenia w funkcji czasu dla oscylatora Obliczywszy, na przykład, położenie oscylatora harmonicznego w pewnej liczbie chwil czasu t k takich, że t i t i 1 = t, możemy wykorzystać bibliotekę Qt do utworzenia rysunku zawierającego wykres tej funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
91 Wizualizacja wyników obliczeń Wykres położenia w funkcji czasu dla oscylatora Obliczywszy, na przykład, położenie oscylatora harmonicznego w pewnej liczbie chwil czasu t k takich, że t i t i 1 = t, możemy wykorzystać bibliotekę Qt do utworzenia rysunku zawierającego wykres tej funkcji. 1 Tworzymy klasę pochodną od RungeKutta do reprezentowania oscylatorów harmonicznych oraz obiekt tej klasy reprezentujący oscylator o zadanych parametrach (K, położenie początkowe i prędkość początkowa). 2 Używamy tej klasy do wyznaczenia położenia oscylatora w zadanch chwilach czasu. Wyniki można umieścić w dwóch obiektach klasy vector (w jednym czas, a w drugim położenie oscylatora). 3 W ten sposób otrzymujemy zbiór współrzędnych punktów reprezentujących funkcję do narysowania. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
92 Wizualizacja wyników obliczeń Obliczanie zależności położenia od czasu Otrzymane wektory można przekazać do konstruktora obiektu klasy pochodnej od QWidget, którego metoda paintevent() będzie używać ich przy rysowaniu wykresu. Rafał J. Wysocki Programowanie, część IV 12 kwietnia / 42
93 Wizualizacja wyników obliczeń Obliczanie zależności położenia od czasu Otrzymane wektory można przekazać do konstruktora obiektu klasy pochodnej od QWidget, którego metoda paintevent() będzie używać ich przy rysowaniu wykresu. vector<double> y; // Warunek początkowy y.push_back(1.0); // położenie y.push_back(0.0); // prędkość Oscylator oscylator(1.0, y, 0, 0.01); vector<double> t(kroki); vector<double> q(kroki); for (int i = 0; i < KROKI; i++) { y = oscylator.getu(); t[i] = oscylator.gett(); q[i] = y[0]; oscylator.wykonaj_krok(); } class Obrazek : public QWidget { private: vector<double> x; vector<double> y; double x0, y0, x1, y1; unsigned int rozmiar; protected: void paintevent(qpaintevent *event); public: Obrazek(vector<double>& a, vector<double>& b, QWidget *parent = NULL); }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
94 Wizualizacja wyników obliczeń Rysowanie wykresu położenia w funkcji czasu Obrazek::Obrazek(vector<double>& a, vector<double>& b, QWidget *parent) : QWidget(parent) { x = a; y = b; rozmiar = x.size(); if (y.size() < rozmiar) rozmiar = y.size(); } x0 = x[0]; x1 = x[rozmiar - 1]; y0 = y[0]; y1 = y[rozmiar - 1]; for (unsigned int j = 1; j < rozmiar; j++) { if (x[j] < x0) x0 = x[j]; else if (x[j] > x1) x1 = x[j]; } if (y[j] < y0) y0 = y[j]; else if (y[j] > y1) y1 = y[j]; void Obrazek::paintEvent(QPaintEvent *event) { QPainter painter(this); double w = x1 - x0; double h = y1 - y0; } painter.scale(width() / w, -height() / h); painter.translate(-x0, -y1); QPointF p1(x[0], y[0]); QPointF p2; for (unsigned int j = 1; j < rozmiar; j++) { p2.setx(x[j]); p2.sety(y[j]); painter.drawline(p1, p2); p1 = p2; } (void)event; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
95 Literatura Literatura B. Stroustrup, Język C++ (Wydawnictwo Naukowo-Techniczne, Warszawa 2002). B. Eckel, Thinking in C++. Edycja polska (Wydawnictwo Helion, Gliwice 2002). Pang Tao, Metody obliczeniowe w fizyce (Wydawnictwo Naukowe PWN, Warszawa 2001). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 12 kwietnia / 42
Programowanie, część IV
Programowanie, część IV Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 maja 2012 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część IV 22 maja 2012 1 / 77 Równania ruchu Symulacje
Numeryczne rozwiązywanie równań różniczkowych ( )
Numeryczne rozwiązywanie równań różniczkowych Równanie różniczkowe jest to równanie, w którym występuje pochodna (czyli różniczka). Przykładem najprostszego równania różniczkowego może być: y ' = 2x które
Ćwiczenie M-2 Pomiar przyśpieszenia ziemskiego za pomocą wahadła rewersyjnego Cel ćwiczenia: II. Przyrządy: III. Literatura: IV. Wstęp. l Rys.
Ćwiczenie M- Pomiar przyśpieszenia ziemskiego za pomocą wahadła rewersyjnego. Cel ćwiczenia: pomiar przyśpieszenia ziemskiego przy pomocy wahadła fizycznego.. Przyrządy: wahadło rewersyjne, elektroniczny
Kinematyka: opis ruchu
Kinematyka: opis ruchu Fizyka I (B+C) Wykład IV: Ruch jednostajnie przyspieszony Ruch harmoniczny Ruch po okręgu Klasyfikacja ruchów Ze względu na tor wybrane przypadki szczególne prostoliniowy, odbywajacy
Podstawy fizyki sezon 1 VII. Ruch drgający
Podstawy fizyki sezon 1 VII. Ruch drgający Agnieszka Obłąkowska-Mucha WFIiS, Katedra Oddziaływań i Detekcji Cząstek, D11, pok. 111 amucha@agh.edu.pl http://home.agh.edu.pl/~amucha Ruch skutkiem działania
Nazwisko i imię: Zespół: Data: Ćwiczenie nr 1: Wahadło fizyczne. opis ruchu drgającego a w szczególności drgań wahadła fizycznego
Nazwisko i imię: Zespół: Data: Cel ćwiczenia: Ćwiczenie nr 1: Wahadło fizyczne opis ruchu drgającego a w szczególności drgań wahadła fizycznego wyznaczenie momentów bezwładności brył sztywnych Literatura
DRGANIA SWOBODNE UKŁADU O DWÓCH STOPNIACH SWOBODY. Rys Model układu
Ćwiczenie 7 DRGANIA SWOBODNE UKŁADU O DWÓCH STOPNIACH SWOBODY. Cel ćwiczenia Doświadczalne wyznaczenie częstości drgań własnych układu o dwóch stopniach swobody, pokazanie postaci drgań odpowiadających
Rozwiązywanie równań nieliniowych
Rozwiązywanie równań nieliniowych Marcin Orchel 1 Wstęp Przykłady wyznaczania miejsc zerowych funkcji f : f(ξ) = 0. Wyszukiwanie miejsc zerowych wielomianu n-tego stopnia. Wymiar tej przestrzeni wektorowej
RÓWNANIA NIELINIOWE Maciej Patan
RÓWNANIA NIELINIOWE Maciej Patan Uniwersytet Zielonogórski Przykład 1 Prędkość v spadającego spadochroniarza wyraża się zależnością v = mg ( 1 e c t) m c gdzie g = 9.81 m/s 2. Dla współczynnika oporu c
Programowanie komputerowe. Zajęcia 7
Programowanie komputerowe Zajęcia 7 Klasy Klasy to typy danych, które pozwalają na zgromadzenie w jednej zmiennej (obiekcie) zarówno danych jak i operacji związanych z tymi danymi. Obiekt danej klasy może
Całkowanie numeryczne
Całkowanie numeryczne Poniżej omówione zostanie kilka metod przybliżania operacji całkowania i różniczkowania w szczególności uzależnieniu pochodnej od jej różnic skończonych gdy równanie różniczkowe mamy
Definicje i przykłady
Rozdział 1 Definicje i przykłady 1.1 Definicja równania różniczkowego 1.1 DEFINICJA. Równaniem różniczkowym zwyczajnym rzędu n nazywamy równanie F (t, x, ẋ, ẍ,..., x (n) ) = 0. (1.1) W równaniu tym t jest
Ć W I C Z E N I E N R M-2
INSYU FIZYKI WYDZIAŁ INŻYNIERII PRODUKCJI I ECHNOLOGII MAERIAŁÓW POLIECHNIKA CZĘSOCHOWSKA PRACOWNIA MECHANIKI Ć W I C Z E N I E N R M- ZALEŻNOŚĆ OKRESU DRGAŃ WAHADŁA OD AMPLIUDY Ćwiczenie M-: Zależność
Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,
Fizyka 11. Janusz Andrzejewski
Fizyka 11 Ruch okresowy Każdy ruch powtarzający się w regularnych odstępach czasu nazywa się ruchem okresowym lub drganiami. Drgania tłumione ruch stopniowo zanika, a na skutek tarcia energia mechaniczna
Równania różniczkowe zwyczajne
Równania różniczkowe zwyczajne Zajmiemy się teraz problemem numerycznego rozwiązywania równań różniczkowych zwyczajnych o postaci: z warunkeim początkowym. Zauważmy że przykładowe równanie różniczkowe
MECHANIKA 2. Drgania punktu materialnego. Wykład Nr 8. Prowadzący: dr Krzysztof Polko
MECHANIKA 2 Wykład Nr 8 Drgania punktu materialnego Prowadzący: dr Krzysztof Polko Wstęp Drgania Okresowe i nieokresowe Swobodne i wymuszone Tłumione i nietłumione Wstęp Drgania okresowe ruch powtarzający
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Wstęp do równań różniczkowych
Wstęp do równań różniczkowych Wykład 1 Lech Sławik Instytut Matematyki PK Literatura 1. Arnold W.I., Równania różniczkowe zwyczajne, PWN, Warszawa, 1975. 2. Matwiejew N.M., Metody całkowania równań różniczkowych
Programowanie, część I
11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne
Wstęp do metod numerycznych Rozwiazywanie równań algebraicznych. P. F. Góra
Wstęp do metod numerycznych Rozwiazywanie równań algebraicznych P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2010 Co to znaczy rozwiazać równanie? Przypuśmy, że postawiono przed nami problem rozwiazania
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Metody numeryczne rozwiązywania równań różniczkowych
Metody numeryczne rozwiązywania równań różniczkowych Marcin Orchel Spis treści Wstęp. Metody przybliżone dla równań pierwszego rzędu................ Metoda kolejnych przybliżeń Picarda...................2
Obliczenia iteracyjne
Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej
Metody numeryczne równań różniczkowych zwyczajnych
Metody numeryczne równań różniczkowych zwyczajnych Marcin Jenczmyk m.jenczmyk@knm.katowice.pl 9 maja 2015 M. Jenczmyk XXX Sesja KNM Metody numeryczne R.R.Z. 1 / 18 Omawiany problem dotyczyć będzie numerycznego
Wstęp do równań różniczkowych
Wstęp do równań różniczkowych Wykład 1 Lech Sławik Instytut Matematyki PK Literatura 1. Arnold W.I., Równania różniczkowe zwyczajne, PWN, Warszawa, 1975. 2. Matwiejew N.M., Metody całkowania równań różniczkowych
MECHANIKA II. Dynamika ruchu obrotowego bryły sztywnej
MECHANIKA II. Dynamika ruchu obrotowego bryły sztywnej Daniel Lewandowski Politechnika Wrocławska, Wydział Mechaniczny, Katedra Mechaniki i Inżynierii Materiałowej http://kmim.wm.pwr.edu.pl/lewandowski/
Wykład z modelowania matematycznego. Przykłady modelowania w mechanice i elektrotechnice.
Wykład z modelowania matematycznego. Przykłady modelowania w mechanice i elektrotechnice. 1 Wahadło matematyczne. Wahadłem matematycznym nazywamy punkt materialny o masie m zawieszony na długiej, cienkiej
Dokąd on zmierza? Przemieszczenie i prędkość jako wektory
A: 1 OK Muszę to powtórzyć... Potrzebuję pomocy Dokąd on zmierza? Przemieszczenie i prędkość jako wektory Łódź żegluje po morzu... Płynie z szybkością 10 węzłów (węzeł to 1 mila morska na godzinę czyli
Metody rozwiązywania równań nieliniowych
Metody rozwiązywania równań nieliniowych Rozwiązywanie równań nieliniowych Ogólnie równanie o jednej niewiadomej x można przedstawić w postaci f ( x)=0, x R, (1) gdzie f jest wystarczająco regularną funkcją.
METODY OBLICZENIOWE. Projekt nr 3.4. Dariusz Ostrowski, Wojciech Muła 2FD/L03
METODY OBLICZENIOWE Projekt nr 3.4 Dariusz Ostrowski, Wojciech Muła 2FD/L03 Zadanie Nasze zadanie składało się z dwóch części: 1. Sformułowanie, przy użyciu metody Lagrange a II rodzaju, równania różniczkowego
O 2 O 1. Temat: Wyznaczenie przyspieszenia ziemskiego za pomocą wahadła rewersyjnego
msg M 7-1 - Temat: Wyznaczenie przyspieszenia ziemskiego za pomocą wahadła rewersyjnego Zagadnienia: prawa dynamiki Newtona, moment sił, moment bezwładności, dynamiczne równania ruchu wahadła fizycznego,
Prawa ruchu: dynamika
Prawa ruchu: dynamika Fizyka I (B+C) Wykład X: Równania ruchu Więzy Rozwiazywanie równań ruchu oscylator harminiczny, wahadło ruch w jednorodnym polu elektrycznym i magnetycznym spektroskop III zasada
Fizyka 12. Janusz Andrzejewski
Fizyka 1 Janusz Andrzejewski Przypomnienie: Drgania procesy w których pewna wielkość fizyczna na przemian maleje i rośnie Okresowy ruch drgający (periodyczny) - jeżeli wartości wielkości fizycznych zmieniające
Pochodna i różniczka funkcji oraz jej zastosowanie do obliczania niepewności pomiarowych
Pochodna i różniczka unkcji oraz jej zastosowanie do obliczania niepewności pomiarowych Krzyszto Rębilas DEFINICJA POCHODNEJ Pochodna unkcji () w punkcie określona jest jako granica: lim 0 Oznaczamy ją
Prędkość fazowa i grupowa fali elektromagnetycznej w falowodzie
napisał Michał Wierzbicki Prędkość fazowa i grupowa fali elektromagnetycznej w falowodzie Prędkość grupowa paczki falowej Paczka falowa jest superpozycją fal o różnej częstości biegnących wzdłuż osi z.
Metody numeryczne I Równania nieliniowe
Metody numeryczne I Równania nieliniowe Janusz Szwabiński szwabin@ift.uni.wroc.pl Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/66 Równania nieliniowe 1. Równania nieliniowe z pojedynczym pierwiastkiem
Laboratorium II: Modelowanie procesów fizycznych Skrypt do ćwiczeń
PJWSTK/KMKT-07082006 Laboratorium II: Modelowanie procesów fizycznych Katedra Metod Komputerowych Techniki Polsko Japońska Wyższa Szkoła Technik Komputerowych I. KINETYKA Kinetyka zajmuje się ruchem ciał
Wykład FIZYKA I. Dr hab. inż. Władysław Artur Woźniak. Katedra Optyki i Fotoniki Wydział Podstawowych Problemów Techniki Politechnika Wrocławska
Wykład FIZYKA I 1. Ruch drgający tłumiony i wymuszony Katedra Optyki i Fotoniki Wydział Podstawowych Problemów Techniki Politechnika Wrocławska http://www.if.pwr.wroc.pl/~wozniak/fizyka1.html DRGANIA HARMONICZNE
27. RÓWNANIA RÓŻNICZKOWE CZĄSTKOWE
27. RÓWNANIA RÓŻNICZKOWE CZĄSTKOWE 27.1. Wiadomości wstępne Równaniem różniczkowym cząstkowym nazywamy związek w którym występuje funkcja niewiadoma u dwóch lub większej liczby zmiennych niezależnych i
KADD Minimalizacja funkcji
Minimalizacja funkcji Poszukiwanie minimum funkcji Foma kwadratowa Metody przybliżania minimum minimalizacja Minimalizacja w n wymiarach Metody poszukiwania minimum Otaczanie minimum Podział obszaru zawierającego
Zagadnienia brzegowe dla równań eliptycznych
Temat 7 Zagadnienia brzegowe dla równań eliptycznych Rozważmy płaski obszar R 2 ograniczony krzywą. la równania Laplace a (Poissona) stawia się trzy podstawowe zagadnienia brzegowe. Zagadnienie irichleta
VII. Drgania układów nieliniowych
VII. Drgania układów nieliniowych 1. Drgania anharmoniczne spowodowane symetryczna siła zwrotna 1.1 Różniczkowe równanie ruchu Rozważamy teraz drgania swobodne masy m przytwierdzonej do sprężyny o współczynniku
Drgania układu o wielu stopniach swobody
Drgania układu o wielu stopniach swobody Rozpatrzmy układ składający się z n ciał o masach m i (i =,,..., n, połączonych między sobą i z nieruchomym podłożem za pomocą elementów sprężystych o współczynnikach
Wykład FIZYKA I. 10. Ruch drgający tłumiony i wymuszony. Dr hab. inż. Władysław Artur Woźniak
Wykład FIZYKA I 1. Ruch drgający tłumiony i wymuszony Dr hab. inż. Władysław Artur Woźniak Instytut Fizyki Politechniki Wrocławskiej http://www.if.pwr.wroc.pl/~wozniak/fizyka1.html Siły oporu (tarcia)
Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
Interpolacja, aproksymacja całkowanie. Interpolacja Krzywa przechodzi przez punkty kontrolne
Interpolacja, aproksymacja całkowanie Interpolacja Krzywa przechodzi przez punkty kontrolne Aproksymacja Punkty kontrolne jedynie sterują kształtem krzywej INTERPOLACJA Zagadnienie interpolacji można sformułować
OPTYKA KWANTOWA Wykład dla 5. roku Fizyki
OPTYKA KWANTOWA Wykład dla 5. roku Fizyki c Adam Bechler 006 Instytut Fizyki Uniwersytetu Szczecińskiego Równania (3.7), pomimo swojej prostoty, nie posiadają poza nielicznymi przypadkami ścisłych rozwiązań,
Wyznaczanie przyspieszenia ziemskiego za pomocą wahadła prostego
Ćwiczenie M6 Wyznaczanie przyspieszenia ziemskiego za pomocą wahadła prostego M6.1. Cel ćwiczenia Celem ćwiczenia jest wyznaczenie przyspieszenia ziemskiego poprzez analizę ruchu wahadła prostego. M6..
Ćw. nr 31. Wahadło fizyczne o regulowanej płaszczyźnie drgań - w.2
1 z 6 Zespół Dydaktyki Fizyki ITiE Politechniki Koszalińskiej Ćw. nr 3 Wahadło fizyczne o regulowanej płaszczyźnie drgań - w.2 Cel ćwiczenia Pomiar okresu wahań wahadła z wykorzystaniem bramki optycznej
Elementy rachunku różniczkowego i całkowego
Elementy rachunku różniczkowego i całkowego W paragrafie tym podane zostaną elementarne wiadomości na temat rachunku różniczkowego i całkowego oraz przykłady jego zastosowania w fizyce. Małymi literami
Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.
Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle. Sub Hasla1() Dim wzor_hasla As String Dim haslo As String Dim adres
13. Równania różniczkowe - portrety fazowe
13. Równania różniczkowe - portrety fazowe Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie rzegorz Kosiorowski (Uniwersytet Ekonomiczny 13. wrównania Krakowie) różniczkowe - portrety fazowe 1 /
BADANIE DRGAŃ TŁUMIONYCH WAHADŁA FIZYCZNEGO
ĆWICZENIE 36 BADANIE DRGAŃ TŁUMIONYCH WAHADŁA FIZYCZNEGO Cel ćwiczenia: Wyznaczenie podstawowych parametrów drgań tłumionych: okresu (T), częstotliwości (f), częstotliwości kołowej (ω), współczynnika tłumienia
Metody Lagrange a i Hamiltona w Mechanice
Metody Lagrange a i Hamiltona w Mechanice Mariusz Przybycień Wydział Fizyki i Informatyki Stosowanej Akademia Górniczo-Hutnicza Wykład 8 M. Przybycień (WFiIS AGH) Metody Lagrange a i Hamiltona... Wykład
METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH
METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH Jednym z zastosowań metod numerycznych jest wyznaczenie pierwiastka lub pierwiastków równania nieliniowego. W tym celu stosuje się szereg metod obliczeniowych np:
Iteracyjne rozwiązywanie równań
Elementy metod numerycznych Plan wykładu 1 Wprowadzenie Plan wykładu 1 Wprowadzenie 2 Plan wykładu 1 Wprowadzenie 2 3 Wprowadzenie Metoda bisekcji Metoda siecznych Metoda stycznych Plan wykładu 1 Wprowadzenie
ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH
Transport, studia I stopnia Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Adam Wosatko Postać ogólna równania nieliniowego Często występującym, ważnym problemem obliczeniowym
3. KINEMATYKA Kinematyka jest częścią mechaniki, która zajmuje się opisem ruchu ciał bez wnikania w jego przyczyny. Oznacza to, że nie interesuje nas
3. KINEMATYKA Kinematyka jest częścią mechaniki, która zajmuje się opisem ruchu ciał bez wnikania w jego przyczyny. Oznacza to, że nie interesuje nas oddziaływanie między ciałami, ani też rola, jaką to
KLUCZ PUNKTOWANIA ODPOWIEDZI
Egzamin maturalny maj 009 MATEMATYKA POZIOM ROZSZERZONY KLUCZ PUNKTOWANIA ODPOWIEDZI Zadanie. a) Wiadomości i rozumienie Matematyka poziom rozszerzony Wykorzystanie pojęcia wartości argumentu i wartości
Pochodna i różniczka funkcji oraz jej zastosowanie do rachunku błędów pomiarowych
Pochodna i różniczka unkcji oraz jej zastosowanie do rachunku błędów pomiarowych Krzyszto Rębilas DEFINICJA POCHODNEJ Pochodna unkcji () w punkcie określona jest jako granica: lim 0 Oznaczamy ją symbolami:
Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa. P. F. Góra
Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2012 Uwarunkowanie zadania numerycznego Niech ϕ : R n R m będzie pewna funkcja odpowiednio wiele
Sprawozdanie z zad. nr 4 Wahadło Matematyczne z Fizyki Komputerowej. Szymon Wawrzyniak / Artur Angiel / Gr. 5 / Poniedziałek 12:15
Sprawozdanie z zad. nr 4 Wahadło Matematyczne z Fizyki Komputerowej Szymon Wawrzyniak / Artur Angiel / Gr. 5 / Poniedziałek 12:15 =============================================== =========================
Informatyka I Lab 06, r.a. 2011/2012 prow. Sławomir Czarnecki. Zadania na laboratorium nr. 6
Informatyka I Lab 6, r.a. / prow. Sławomir Czarnecki Zadania na laboratorium nr. 6 Po utworzeniu nowego projektu, dołącz bibliotekę bibs.h.. Największy wspólny dzielnik liczb naturalnych a, b oznaczamy
Wykład 6 Drgania. Siła harmoniczna
Wykład 6 Drgania Ruch, który powtarza się w regularnych odstępach czasu, nazywamy ruchem okresowym (periodycznym). Przemieszczenie cząstki w ruchu periodycznym można wyrazić za pomocą funkcji sinus albo
Programowanie strukturalne i obiektowe. Funkcje
Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy
1 Metody rozwiązywania równań nieliniowych. Postawienie problemu
1 Metody rozwiązywania równań nieliniowych. Postawienie problemu Dla danej funkcji ciągłej f znaleźć wartości x, dla których f(x) = 0. (1) 2 Przedział izolacji pierwiastka Będziemy zakładać, że równanie
Siła sprężystości - przypomnienie
Siła sprężystości - przypomnienie Pomiary siły sprężystości wykonane kilka wykładów wcześniej (z uwzględnieniem kierunku siły). F = kx = 0.13x 0 F x cm mg Prawo Hooke a Ciało m na idealnie gładkiej powierzchni
Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Ruch drgajacy. Drgania harmoniczne. Drgania harmoniczne... Drgania harmoniczne... Notatki. Notatki. Notatki. Notatki. dr inż.
Ruch drgajacy dr inż. Ireneusz Owczarek CNMiF PŁ ireneusz.owczarek@p.lodz.pl http://cmf.p.lodz.pl/iowczarek 1 dr inż. Ireneusz Owczarek Ruch drgajacy Drgania harmoniczne Drgania oscylacje to cykliczna
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
IX. Rachunek różniczkowy funkcji wielu zmiennych. 1. Funkcja dwóch i trzech zmiennych - pojęcia podstawowe. - funkcja dwóch zmiennych,
IX. Rachunek różniczkowy funkcji wielu zmiennych. 1. Funkcja dwóch i trzech zmiennych - pojęcia podstawowe. Definicja 1.1. Niech D będzie podzbiorem przestrzeni R n, n 2. Odwzorowanie f : D R nazywamy
METODY NUMERYCZNE. Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą. prof. dr hab.inż. Katarzyna Zakrzewska
METODY NUMERYCZNE Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą prof. dr hab.inż. Katarzyna Zakrzewska Met.Numer. Wykład 4 1 Rozwiązywanie równań nieliniowych z jedną niewiadomą
3 Podstawy teorii drgań układów o skupionych masach
3 Podstawy teorii drgań układów o skupionych masach 3.1 Drgania układu o jednym stopniu swobody Rozpatrzmy elementarny układ drgający, nazywany też oscylatorem harmonicznym, składający się ze sprężyny
Funkcja kwadratowa. f(x) = ax 2 + bx + c,
Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \
PętlaforwOctave. Roman Putanowicz 13 kwietnia 2008
PętlaforwOctave Roman Putanowicz kwietnia 008 Zakresyioperator : Zakresy(ang. ranges) są wygodnym sposobem definiowania wektorów reprezentujących ciągi arytmetyczne, czyli ciągi w których różnica pomiędzy
Drgania wymuszone - wahadło Pohla
Zagadnienia powiązane Częstość kołowa, częstotliwość charakterystyczna, częstotliwość rezonansowa, wahadło skrętne, drgania skrętne, moment siły, moment powrotny, drgania tłumione/nietłumione, drgania
mechanika analityczna 1 nierelatywistyczna L.D.Landau, E.M.Lifszyc Krótki kurs fizyki teoretycznej
mechanika analityczna 1 nierelatywistyczna L.D.Landau, E.M.Lifszyc Krótki kurs fizyki teoretycznej ver-28.06.07 współrzędne uogólnione punkt materialny... wektor wodzący: prędkość: przyspieszenie: liczba
wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
1.1 Wahadło anharmoniczne(m5)
10 Mechanika 1.1 Wahadło anharmoniczne(m5) Celem ćwiczenia jest zbadanie drgań anharmonicznych wahadła fizycznego(zależność okresu drgań wahadła od amplitudy jego drgań, bilans energetyczny wahadła). Zagadnienia
Metody numeryczne. materiały do wykładu dla studentów
Metody numeryczne materiały do wykładu dla studentów 5. Przybliżone metody rozwiązywania równań 5.1 Lokalizacja pierwiastków 5.2 Metoda bisekcji 5.3 Metoda iteracji 5.4 Metoda stycznych (Newtona) 5.5 Metoda
Drgania. O. Harmoniczny
Dobrej fazy! Drgania O. Harmoniczny Położenie równowagi, 5 lipca 218 r. 1 Zadanie Zegar Małgorzata Berajter, update: 217-9-6, id: pl-ciepło-5, diff: 2 Pewien zegar, posiadający wahadło ze srebra, odmierza
Wyznaczanie przyspieszenia ziemskiego za pomocą wahadła rewersyjnego (Katera)
Politechnika Łódzka FTMS Kierunek: nformatyka rok akademicki: 2008/2009 sem. 2. Termin: 6 V 2009 Nr. ćwiczenia: 112 Temat ćwiczenia: Wyznaczanie przyspieszenia ziemskiego za pomocą wahadła rewersyjnego
Laboratorium 5 Przybliżone metody rozwiązywania równań nieliniowych
Uniwersytet Zielonogórski Wydział Informatyki, Elektrotechniki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych Elektrotechnika niestacjonarne-zaoczne pierwszego stopnia z tyt. inżyniera
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;
Zajęcia: VBA TEMAT: VBA PROCEDURY NUMERYCZNE Metoda bisekcji i metoda trapezów
Zajęcia: VBA TEMAT: VBA PROCEDURY NUMERYCZNE Metoda bisekcji i metoda trapezów W ramach zajęć oprogramujemy jedną, wybraną metodę numeryczną: metodę bisekcji numerycznego rozwiązywania równania nieliniowego
RUCH HARMONICZNY. sin. (r.j.o) sin
RUCH DRGAJĄCY Ruch harmoniczny Rodzaje drgań Oscylator harmoniczny Energia oscylatora harmonicznego Wahadło matematyczne i fizyczne Drgania tłumione Drgania wymuszone i zjawisko rezonansu Politechnika
Zadania z mechaniki dla nanostudentów. Seria 3. (wykład prof. J. Majewskiego)
Zadania z mechaniki dla nanostudentów Seria 3 (wykład prof J Majewskiego) Zadanie 1 Po równi pochyłej o kącie nachylenia do poziomu równym α zsuwa się klocek o masie m, na który działa siła oporu F = m
Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania
Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania Metody optymalizacji Metody poszukiwania ekstremum funkcji jednej zmiennej Materiały pomocnicze do ćwiczeń
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
OBLICZANIE POCHODNYCH FUNKCJI.
OBLICZANIE POCHODNYCH FUNKCJI. ROZWIĄZYWANIE RÓWNAŃ RÓŻNICZKOWYCH. ROZWIĄZYWANIE UKŁADÓW RÓWNAŃ LINIOWYCH. Obliczanie pochodnych funkcji. Niech będzie dana funkcja y(x określona i różniczkowalna na przedziale
Zaawansowane metody numeryczne Komputerowa analiza zagadnień różniczkowych 4. Równania różniczkowe zwyczajne podstawy teoretyczne
Zaawansowane metody numeryczne Komputerowa analiza zagadnień różniczkowych 4. Równania różniczkowe zwyczajne podstawy teoretyczne P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Wstęp
Programowanie, część I
Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
przy warunkach początkowych: 0 = 0, 0 = 0
MODELE MATEMATYCZNE UKŁADÓW DYNAMICZNYCH Podstawową formą opisu procesów zachodzących w członach lub układach automatyki jest równanie ruchu - równanie dynamiki. Opisuje ono zależność wielkości fizycznych,
Instrukcja do ćwiczenia jednopłaszczyznowe wyważanie wirników
Instrukcja do ćwiczenia jednopłaszczyznowe wyważanie wirników 1. Podstawowe pojęcia związane z niewyważeniem Stan niewyważenia stan wirnika określony takim rozkładem masy, który w czasie wirowania wywołuje
Czym jest całka? Całkowanie numeryczne
Całkowanie numeryczne jest to zagadnienie z metod elementów skończonych (MES). Korzystając z całkowania numerycznego możemy obliczyć wartość dowolnej całki jednowymiarowej oznaczonej. Wynik jest zawsze
========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2
Leszek Sochański Arkusz przykładowy, poziom podstawowy (A1) Zadanie 1. Wykresem funkcji kwadratowej f jest parabola o wierzchołku 5,7 Wówczas prawdziwa jest równość W. A. f 1 f 9 B. f 1 f 11 C. f 1 f 1
Funkcja kwadratowa. f(x) = ax 2 + bx + c = a
Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.