Autorzy:
- Kacper Jurek
- Marcin Żurawel
- Szymon Wójcik
Aby skorzystać ze spisu treści, proszę nacisnąć menu w lewym górnym rogu tego okna.
Projekt polega na zaimplementowaniu metody numerycznej strzałów, która na podstawie różniczki drugiego rzędu i warunków brzegowych wylicza funkcję zbliżoną do funkcji wyliczonej algebraicznie. Program został napisany w Pythonie, graficzny interfejs został stworzony przy pomocy biblioteki matplotlib.pyplot
.
Program był testowany w systemie Windows 10, i działał poprawnie. Zalecamy więc korzystanie z tego systemu przy uruchamianiu programu.
Po uruchomieniu programu powinno wyświelić się okno, gdzie możemy wyróżnić następujące sekcje:
- Step size, gdzie możemy ustawić dokładność naszych argumentów funkcji.
- Equations, gdzie możemy z listy rozsuwalnej wybrać odpowiednie zagadnienia brzegowe.
- Przycisk
plot
, gdzie po naciśnięciu jego otrzymamy wykresy strzałów i wykres funkcji reprezentującej odpowiedź wyznaczoną algebraicznie. - Siatkę, gdzie będą przedstawione graficznie wykresy kolejnych strzałów, oraz funkcji wyznaczonej algebraicznie.
Każde naciśnięcie przycisku plot
spowoduje ponowne uruchomienie algorytmu, co skutkuje różnymi wykresami strzałów.
Rozmiar siatki automatycznie dopasowuje się do wartości otrzymanych funkcji.
Metoda polega na użyciu losowo wybranej wartości y'(x0) do wyliczenia rozwiązania. Otrzymany wynik porównujemy ze znaną drugą wartością brzegową.
Powtarzamy te 2 kroki do momentu znalezienia dostatecznie dokładnego rozwiązania.
Po pierwszych dwóch "strzałach", czyli zgadniętych wartościach y'(x0) zwiększamy dokładność kolejnych strzałów, korzystając z liniowej interpolacji.
Główny algorytm metody strzałów znajduje się w funkcji shooting_method. Wybiera pierwsze 2 strzały losowo - pierwszy ze zbioru {1..5}, drugi ze zbioru {5..10}.
Do wybrania kolejnych używa funkcji linear_interpolation.
Otrzymany po zgadnięciu brakującego założenia problem Cauchy'ego jest rozwiązywany funkcją solve_ivp_second. Implementuje ona metodę Eulera dla równań drugiego rzędu.
Kolejne strzały są wykonywane do momentu uzyskania dokładności 10^-3 (różnica między otrzymaną wartością brzegową a podaną) lub gdy liniowa interpolacja przestaje dawać bardziej precyzyjne wartości (każdy kolejny strzał jest taki sam).