Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

Politechnika Opolska

Wydział Elektrotechniki, Automatyki i Informatyki


Katedra Automatyzacji Napędów i Robotyki

PRACA DYPLOMOWA
Studia pierwszego stopnia
stacjonarne

Informatyka

APLIKACJA DO SYMULACJI WYBRANYCH


ZJAWISK FIZYCZNYCH

Promotor: Pracę wykonał:


dr inż. Marcin Kulik Karol Kaleta
nr albumu: 99188

Opole, luty 2023


Aplikacja do symulacji wybranych zjawisk fizycznych

Streszczenie

W pracy zaprojektowano oraz zaimplementowano aplikację odpowiedzialną za


symulacje wybranych zjawisk fizycznych. Aplikacja została zbudowana w oparciu
o język programowania Python wraz z niezbędnymi bibliotekami. Oprogramowanie
pozwala na wybranie jednej z kilku dostępnych symulacji zjawisk fizycznych tj.
przewodnictwo cieplne, ruch cząstek oraz symulacja filtra cząstek elektrostatycznych.
Zjawiska są symulowane w dziedzinie czasu oraz przedstawione w postaci
graficznego interfejsu. W aplikacji zaimplementowano metody numeryczne do
rozwiązywania równań różniczkowych cząstkowych oraz równań różniczkowych
zwyczajnych.

Application for simulating selected physical phenomena

Summary

In this work, an application responsible for simulating selected physical


phenomena was designed and implemented. The application was built based on the
Python programming language along with the necessary libraries. The software allows
you to choose from several available simulations of physical phenomena, which are
simulation for heat conduction, particle motion and simulation of electrostatic particle
filter. The phenomena are simulated in the time domain and presented in a graphical
interface. Numerical methods for solving partial differential equations and ordinary
differential equations were implemented in the application.

2
SPIS TREŚCI

1. CEL I ZAKRES PRACY ................................................................................................... 4


2. WPROWADZENIE ........................................................................................................... 5
3. UŻYTE NARZĘDZIA I TECHNOLOGIE ...................................................................... 8
3.1 VISUAL STUDIO CODE ........................................................................................... 8
3.2 PYTHON ..................................................................................................................... 9
3.3 NUMPY ..................................................................................................................... 10
3.4 SCIPY ........................................................................................................................ 10
3.5 TKINTER .................................................................................................................. 11
3.6 MATPLOTLIB .......................................................................................................... 11
4. PROJEKT ......................................................................................................................... 12
4.1 WYMAGANIA FUNKCJONALNE ......................................................................... 12
4.2 WYMAGANIA NIEFUNKCJONALNE .................................................................. 12
4.3 ZAŁOŻENIA PROJEKTU........................................................................................ 12
5. SYMULACJA PRZEWODNICTWA CIEPŁA............................................................... 14
5.1 MODEL MATEMATYCZNY .................................................................................. 14
5.2 ZASTOSOWANE METODY NUMERYCZNE ...................................................... 14
6. SYMULACJA RUCHU CZĄSTEK ................................................................................ 18
6.1 MODEL MATEMATYCZNY .................................................................................. 18
6.2 ZASTOSOWANE METODY NUMERYCZNE ...................................................... 19
7. APLIKACJA KOMPUTEROWA Z GRAFICZNYM INTERFEJSEM ......................... 21
7.1 STRUKTURA PROJEKTU ...................................................................................... 21
7.2 WIDOK STARTOWY .............................................................................................. 21
7.3 WIDOK SYMULACJI PRZEWODNICTWA CIEPŁA ........................................... 22
7.4 WIDOK SYMULACJI RUCHU CZĄSTEK ............................................................ 24
7.5 WIDOK SYMULACJI FILTRA CZĄSTECZEK ELEKTROSTATYCZNYCH .... 26
8. PODSUMOWANIE I WNIOSKI .................................................................................... 28
9. LITERATURA ................................................................................................................. 29

3
1. CEL I ZAKRES PRACY

Celem pracy jest zaprojektowanie oraz implementacja desktopowej aplikacji, która ma za


zadanie symulować wybrane zjawiska fizycznych z wykorzystaniem graficznego interfejsu.
Symulacje odbywać się będą dzięki zaprogramowaniu odpowiednich algorytmów, które
odwzorują wybrane zjawiska fizyczne w dziedzinie czasu. W celu zaprezentowaniu
użytkownikowi w bardziej dokładny sposób rozważanych zjawisk będzie on miał możliwość
edycji wybranych danych wejściowych (parametrów) dostosowanych do własnych potrzeb.
Dzięki temu będzie mógł lepiej zrozumieć działanie symulowanego zjawiska oraz
przeprowadzić bardziej szczegółowe analizy. Edycja parametrów może również ułatwić
użytkownikowi testowanie różnych scenariuszy lub hipotez dotyczących działania
symulowanego zjawiska. Mając na uwadze użycie realnych praw fizyki proces projektowania
odpowiednich algorytmów będzie wymagał dokładnego przeglądu literaturowego w celu
skorzystania z poprawnych modeli matematycznych oraz zastosowania stosownych metod.
Aplikacja będzie wykonana wykorzystując jeden z obecnie najbardziej popularnych
języków programowania - Python, który jest dobrze przystosowany do realizacji zadań takiego
rodzaju. Wykorzystane zostaną do niego takie biblioteki jak: Tkinter, Matplotlib, Scipy czy
Numpy. Stosowanie się do dokumentacji języka programowania - jego bibliotek, oraz
stosownej literatury pozwoli w pełni opracować działającą aplikację.

4
2. WPROWADZENIE

Symulacja zjawisk fizycznych jest jednym z ważniejszych narzędzi wspomagających


badania i naukę w dziedzinie fizyki. Dzięki możliwości przeprowadzenia symulacji w sposób
szybki i łatwy, możliwe jest lepsze zrozumienie działania poszczególnych zjawisk oraz
przeprowadzenie różnego rodzaju obliczeń i eksperymentów. Symulacje mogą być stosowane
do badania zjawisk fizycznych, które są trudne lub niemożliwe do zaobserwowania
w rzeczywistości, takich jak zjawiska kwantowe lub zjawiska zachodzące w warunkach
ekstremalnych, np. w wysokich temperaturach lub ciśnieniach. Symulacje mogą również
pomóc w projektowaniu i testowaniu nowych urządzeń lub technologii, na przykład nowych
rodzajów paneli słonecznych lub układów elektronicznych [1]. Mogą również być stosowane
do prognozowania zjawisk pogodowych lub do analizowania skutków katastrof naturalnych,
takich jak trzęsienia ziemi czy huragany [2]. Symulacje zjawisk fizycznych są również bardzo
przydatne w inżynierii, gdzie mogą być wykorzystywane do projektowania i testowania
różnych urządzeń, takich jak samoloty, pojazdy, budynki czy maszyny. Dzięki obliczeniom
komputerowym można ocenić wpływ różnych czynników na zachowanie się urządzenia, takich
jak temperatura, obciążenie, prędkość czy wibracje, co pozwala na optymalizację projektów,
zwiększenie ich wydajności i bezpieczeństwa [3,4].
Symulacje zjawisk fizycznych są przeprowadzane za pomocą różnych metod
numerycznych, w zależności od złożoności badanego zjawiska i pożądanej dokładności
rozwiązania. Do obliczeń najczęściej stosuje się metodę różnic skończonych lub metodę
elementów skończonych [5] w zagadnieniach o parametrach rozłożonych w przestrzeni.
W przypadku, gdy analizowana jest dynamika zmian parametrów w czasie, stosuję się metody
do rozwiązywania równań różniczkowych zwyczajnych, tj. metoda Eulera, metody Rungego-
Kuty [6].
W pracy została wykorzystana metoda różnic skończonych FDM (ang. - Finite difference
method) do obliczania symulacji przewodnictwa ciepła [7]. Metoda ta to technika numeryczna
stosowana do rozwiązywania równań różniczkowych cząstkowych, takich jak te opisujące
przewodzenie ciepła. Metoda ta polega na podzieleniu dziedziny równania na dyskretną siatkę,
a następnie wykorzystaniu wartości funkcji w punktach siatki do przybliżenia pochodnych
w równaniu. Pozwala to na zapisanie równania w formie, która może być rozwiązana przy
użyciu standardowych technik numerycznych, takich jak metoda jawna lub niejawna. Metoda
różnic skończonych jest często uważana za lepszą niż metoda elementów skończonych,
ponieważ pozwala na rozwiązywanie różniczkowych równań różniczkowych za pomocą
prostszych obliczeń numerycznych [7]. Kolejną zaletą metody różnic skończonych jest to, że
jest ona bardziej wydajna niż metoda elementów skończonych. Dzieje się tak, ponieważ metoda
różnic skończonych opiera się na różniczkowaniu układu równań, co oznacza, że wymaga
mniejszej liczby obliczeń niż metoda elementów skończonych. W rezultacie może być

5
stosowana do rozwiązywania problemów o większej skali, a także do rozwiązywania
problemów z dużą liczbą zmiennych.

Rys. 2.1. Przykład siatek obliczeniowych stosowane przez różne metody numeryczne do obliczeń
rozpraszania akustycznego od sztywnego walca w 2-D; Finite difference – metoda różnic
skończonych, Finite element – Metoda elementów skończonych [8]

Metoda elementów skończonych FEM (ang. – Finite Element Method) jest to kolejna
z metod numerycznych stosowanych do obliczania równań różniczkowych cząstkowych [9].
Metoda ta polega na podzieleniu obszaru rozwiązywania na wiele małych elementów, na
których rozwiązuje się równanie różniczkowe zwyczajne z założeniem, że na granicy między
elementami rozwiązanie jest ciągłe. Dzięki tej metodzie można otrzymać dokładniejsze
rozwiązanie niż w przypadku metody różnic skończonych, co pozwala na lepszą ocenę wpływu
różnych czynników np. na przewodnictwo ciepła. Metoda elementów skończonych ma jednak
pewne ograniczenia, takie jak wspomniane wcześniej wysokie wymagania obliczeniowe i duża
złożoność obliczeń.
Równie ważnym zastosowaniem symulacji są symulacje ruchu cząstek,
a w szczególności w dziedzinie chemii i fizyki. Symulacje pozwalają na rejestrowanie
zachowania cząstek podczas ich ruchu, co umożliwia lepsze zrozumienie zjawisk zachodzących
na poziomie mikroskopowym. Szczególnie przydatne są w przypadku zjawisk, które są trudne
do badania w warunkach laboratoryjnych, np. w przypadku procesów zachodzących w krótkim
czasie lub bardzo małych cząsteczek. Pozwala to na lepsze zrozumienie tych zjawisk
i wyciągnięcie wniosków dotyczących ich przebiegu oraz wpływu na otoczenie. W chemii
symulacja ta może być wykorzystywana do modelowania reakcji chemicznych i badania ich
przebiegu, co pozwala na zaobserwowanie mechanizmów zachodzących w reakcjach i na
optymalizację procesów syntezy nowych związków chemicznych [10]. W fizyce symulacja
ruchu cząstek może być wykorzystywana do badania cieczy, gazów czy ciał stałych, a także do
modelowania ruchu cząstek takich jak elektrony czy protony [11]. W niniejszej pracy został
przedstawiony ruch cząstek, które są naładowanie dodatnio oraz ujemnie.
W stworzonej aplikacji, symulacja ruchu cząstek wykorzystuje między innymi prawo
Coulomba, które jest jednym z podstawowych praw fizyki, opisujące siły elektrostatyczne
działające między elektronami i protonami [12]. W takiej symulacji wylicza się siły

6
elektrostatyczne działające na poszczególne cząstki na podstawie ich ładunków elektrycznych
oraz odległości między nimi. Następnie oblicza się przyspieszenia cząstek na skutek działania
tych sił i wyznacza ich trajektorie w przestrzeni.
Wykorzystując ruch cząstek można przedstawić działanie filtra elektrostatycznego.
Filtry elektrostatyczne to rodzaj filtrów stosowanych do oczyszczania powietrza z pyłów
i innych cząstek stałych [13]. Działają na zasadzie wytwarzania pola elektrostatycznego, które
przyciąga i zatrzymuje pyły i inne cząstki stałe. Można je stosować w systemach
wentylacyjnych czy klimatyzacyjnych, aby zapewnić czyste i zdrowe powietrze
w pomieszczeniach. Filtry elektrostatyczne różnią się między sobą sposobem wytwarzania pola
elektrostatycznego oraz skutecznością oczyszczania powietrza. Są one często stosowane
w połączeniu z innymi rodzajami filtrów, takimi jak filtry wstępne czy filtry higieniczne.

Rys. 2.2. Przykład działania filtra cząsteczek elektrostatycznych; Dirty Air – zanieczyszczone powietrze, Pre-
Filter – filtr wstępny, Ionizer – Jonizator, Collector – kolektor, Carbon Filter (Optional) – Filtr
węglowy (opcjonalny), Clean Air – czyste powietrze [13]

7
3. UŻYTE NARZĘDZIA I TECHNOLOGIE

3.1 VISUAL STUDIO CODE

Visual Studio Code jest jednym z najpopularniejszych edytorów kodu na świecie i jest
szeroko stosowany przez programistów z różnych języków programowania i sektorów. Według
danych z 2022 roku Visual Studio Code był najczęściej pobieranym edytorem kodu na
platformie GitHub, a także został uznany za najlepszy edytor kodu według ankiety Stack
Overflow Developer Survey [14].

Rys. 3.1.1. Widok środowiska programowania Visual Studio Code z otworzonym plikiem main.py

Visual Studio Code ma prosty i przejrzysty interfejs użytkownika, który umożliwia łatwe
i szybkie korzystanie z edytora. Głównym oknem edytora jest obszar tekstowy, w którym

8
programiści mogą pisać i edytować kod. Po lewej stronie znajduje się panel boczny, który
zawiera różne narzędzia i opcje, takie jak przeglądarka plików, historia zmian, okno
debugowania i inne. Na górze znajduje się pasek narzędzi, w którym znajdują się przyciski do
wykonywania różnych operacji, takich jak zapisywanie plików, przeglądanie historii zmian
i uruchamianie kodu. W edytorze Visual Studio Code można także zmienić motyw
kolorystyczny i rozmieszczenie elementów interfejsu według własnych preferencji.

3.2 PYTHON

Python to popularny, wielozadaniowy język programowania o otwartym kodzie


źródłowym. Jest on często wykorzystywany w różnych dziedzinach, takich jak nauka o danych,
przetwarzanie tekstu, tworzenie aplikacji internetowych i wiele innych [15]. Python
charakteryzuje się prostym i czytelnym składnią oraz dużą liczbą gotowych bibliotek i narzędzi,
co czyni go atrakcyjnym dla programistów na różnym poziomie zaawansowania. Język ten jest
również wszechstronny i może być używany zarówno do budowania dużych aplikacji, jak i do
wykonywania prostych zadań skryptowych. Python ma również dużą społeczność
użytkowników i jest wspierany przez ogromną ilość bibliotek i narzędzi, co sprawia, że jest
bardzo elastycznym językiem programowania. Oprócz tego, że jest łatwy do nauki i posiada
szerokie możliwości, Python jest także językiem otwartoźródłowym, co oznacza, że jest
dostępny za darmo i może być używany i modyfikowany przez każdego.
Python jest jednym z najpopularniejszych języków programowania na świecie. W rankingu
TIOBE Index, który ocenia popularność języków programowania, Python zajmuje topowe
miejsce od lat [16].

Rys. 3.2.1. Wykaz najpopularniejszych języków programowania według indexu PYPL (ang. PopularitY of
Programming Language) kolorem czerwonym oraz badania Stack Overflow's Developer Survey
kolorem szarym [17]

9
PYPL to indeks, który pokazuje popularność poszczególnych języków programowania
na świecie. Indeks jest oparty na danych zebranych przez serwis Google Trends, który analizuje
wyszukiwania dotyczące poszczególnych języków programowania w internecie. Indeks PYPL
jest publikowany co miesiąc i jest uważany za dobry wskaźnik trendów w branży
programistycznej, ponieważ uwzględnia nie tylko ilość osób używających danego języka, ale
także ich zainteresowanie nim. Na przykład, jeśli język programowania jest popularny, ale nie
jest wyszukiwany w internecie zbyt często, może zajmować niższą pozycję w rankingu PYPL
niż język mniej popularny, ale bardziej interesujący dla programistów.
Stack Overfl’w's Developer Survey to coroczne badanie przeprowadzane przez serwis Stack
Overflow, który jest największym na świecie forum dla programistów. Badanie obejmuje
pytania dotyczące doświadczenia zawodowego, preferencji technologicznych, oczekiwań
wobec pracy i wiedzy technicznej respondentów. Celem badania jest zdobycie informacji
o tym, jakie technologie są najczęściej używane przez programistów, jakie są ich największe
wyzwania i oczekiwania wobec pracy, a także jakie są ich największe osiągnięcia i sukcesy.
Badanie jest przeprowadzane online i obejmuje programistów z całego świata.

3.3 NUMPY

NumPy to biblioteka Python służąca do obliczeń naukowych, w szczególności do pracy


z dużymi, wielowymiarowymi tablicami i macierzami danych oraz do wykonywania operacji
matematycznych na tych danych. NumPy oferuje szeroki zakres funkcji matematycznych,
z dziedzin takich jak algebra liniowa, statystyka i losowość. Dzięki wysokiej wydajności
NumPy jest popularnym narzędziem wśród naukowców i inżynierów, którzy potrzebują
szybkiego dostępu do dużych ilości danych numerycznych. NumPy oferuje wiele innych
funkcji i narzędzi, takich jak np.linspace() do tworzenia wektora zawierającego równomiernie
rozłożone wartości w podanym zakresie, np.ones() do tworzenia macierzy z samymi
jedynkami, np.min() oraz np.max() które zwracają minimalna i maksymalną wartość elementu
macierzy [18].

3.4 SCIPY

SciPy jest biblioteką Python, która jest rozszerzeniem biblioteki NumPy i udostępnia
szeroki zakres funkcji i narzędzi do pracy z danymi numerycznymi. Scipy zawiera szeroką
gamę narzędzi do pracy z danymi numerycznymi, w tym m.in. funkcje optymalizacyjne
i interpolacyjne, funkcje do obliczania różnic skończonych i całek, funkcje do obliczania,
funkcje do rozwiązywania układów równań liniowych i nieliniowych. Jedną z przydatnych klas
jest sp.csr_matrix() służąca do tworzenia macierzy rzadkich w postaci CSR (ang. Compressed
Sparse Row matrix - Skompresowana macierz rzadka rzędowa) [19]. Macierze rzadkie to
macierze, w których większość elementów jest równa zero. Przechowywanie takich macierzy
w pamięci jest nieefektywne, ponieważ większość pamięci jest zajmowana przez zera. Dlatego
macierze rzadkie są często przechowywane w specjalnych formatach, takich jak CSR, które

10
zajmują mniej pamięci i pozwalają na szybsze wykonywanie operacji na macierzach. SciPy jest
popularnym narzędziem wśród naukowców, inżynierów i innych osób pracujących z dużymi
ilościami danych numerycznych i potrzebujących szybkiego dostępu do szerokiego zakresu
funkcji matematycznych i statystycznych.

3.5 TKINTER

Tkinter to biblioteka standardowa, co oznacza, że jest dostępna dla każdego użytkownika


Pythona bez konieczności instalowania dodatkowych plików, służąca do tworzenia interfejsów
graficznych użytkownika (GUI). Można ją wykorzystać do tworzenia prostych aplikacji
okienkowych z przyciskami, pól tekstowych, list rozwijanych i innymi elementami interfejsu
[20]. Tkinter jest prostym i lekkim narzędziem, które nadaje się do tworzenia prostych aplikacji
okienkowych. Biblioteka Tkinter posiada również możliwość konfiguracji i personalizacji
elementów interfejsu, takich jak kolory tła, kolory tekstu, rozmiary okien i inne. Możliwe jest
również dodawanie akcji do elementów interfejsu, np. wywoływanie określonych funkcji po
naciśnięciu przycisku.

3.6 MATPLOTLIB

Matplotlib jest biblioteką w Pythonie, która pozwala na tworzenie różnego rodzaju


wykresów i innych rodzajów wizualizacji danych. Jest to jedna z najpopularniejszych bibliotek
tego typu w Pythonie i umożliwia szybkie i łatwe tworzenie wizualizacji danych z różnych
dziedzin nauki, technologii czy biznesu. Możliwe jest tworzenie szerokiej gamy różnych
rodzajów wykresów, takich jak wykresy liniowe, słupkowe, kołowe czy punktowe.
W połączeniu z biblioteką Tkinter udostępnia opcje tworzenia rysunku Matplotlib w postaci
widżetu Tkinter, dzięki funkcji FigureCanvasTkAgg [21], co umożliwia wyświetlenie w oknie
aplikacji. Wraz z funkcją animation, która służy do tworzenia animacji, możliwe jest
zaprezentowanie symulacji fizycznej. Matplotlib umożliwia konfigurację szczegółów
wizualizacji, takich jak kolory, oznaczenia osi, legenda i inne. Możliwe jest również tworzenie
wielu rysunków na jednym wykresie lub w osobnych oknach.

11
4. PROJEKT

4.1 WYMAGANIA FUNKCJONALNE

Wymagania funkcjonalne to opis wymagań, które musi spełniać dana aplikacja lub system,
aby działać zgodnie z oczekiwaniami użytkowników. Opisane są z perspektywy użytkownika
i określają, co aplikacja powinna być w stanie zrealizować oraz jakie rezultaty powinny być
osiągnięte. Wymagania funkcjonalne są ważną częścią projektu do projektowania i tworzenia
aplikacji.
Wymagania funkcjonalne aplikacji do symulacji zjawisk fizycznych przedstawiają się
następująco:

- Aplikacja powinna umożliwiać symulacje różnych zjawisk fizycznych,


- Aplikacja powinna umożliwiać wprowadzanie różnych parametrów symulacji,
- Aplikacja powinna umożliwiać wizualizacje wyników symulacji w postaci animacji,
- Aplikacja powinna umożliwiać wstrzymywanie oraz wznawianie symulacji.

4.2 WYMAGANIA NIEFUNKCJONALNE

Wymagania niefunkcjonalne są również jak wymagania funkcjonalne opisem wymagań,


które musi spełniać dana aplikacja lub system, lecz nie są bezpośrednio związane z jego
funkcjami czy też celami. Wymagania niefunkcjonalne dotyczą takich zagadnień jak
bezpieczeństwo, kompatybilność, wydajność, niezawodność, łatwość obsługi itp.
Wymaganie niefunkcjonalne rozważanej aplikacji:

- Aplikacja powinna działać w sposób szybki i efektywny, szczególnie przy dużych


i skomplikowanych symulacjach,
- Aplikacja powinna działać w sposób stabilny, unikając błędów,
- Aplikacja powinna być kompatybilna z różnymi systemami operacyjnymi,
- Aplikacja powinna być prosta w obsłudze,
- Aplikacja powinna posiadać intuicyjny interfejs użytkownika.

4.3 ZAŁOŻENIA PROJEKTU

Założenia projektu odpowiadają celom pracy – po zaprojektowaniu i wdrożeniu aplikacja


powinna dawać możliwość wybierania dostępnych symulacji, przedstawienie ich graficznie
oraz edycje poszczególnych parametrów.

12
Początkowy interfejs ma za zadanie pokazać użytkownikowi wszystkie dostępne opcje
wyboru zaprojektowanych symulacji. Przy wyborze zjawiska fizycznego, będzie możliwość
wybrania tylko jednego ze zjawisk, aby zapewnić prawidłowe działanie aplikacji. Zjawiska
będą korzystać z różnych modeli matematycznych, które podczas działania równoczesnego
mogłyby powodować błędy aplikacji jak i mocne wykorzystanie procesora. W celu przejścia
do początkowego interfejsu aplikacja musi wyłączyć interfejs aktualnej symulacji.
Wybranie symulacji powinno przenieść użytkownika do kolejnego interfejsu, gdzie będzie
mógł przeprowadzić symulacje. Specjalnie podpisane pola będą służyć do edycji parametrów,
które pozwolą na lepszą analizę czy też testowanie różnych scenariuszy. Pola powinny być
zabezpieczone przed wpisywaniem liter, a w pewnych przypadkach liczb
zmiennoprzecinkowych oraz ujemnych co zagrażałoby prawidłowemu funkcjonowaniu
aplikacji.
Interfejs będzie również posiadał przycisk o nazwie „start”, który będzie odpowiedzialny
za odczyt wszystkich poprzednio wpisanych parametrów oraz za uruchomienie animacji. Po
naciśnięciu przycisku powinna nastąpić walidacja parametrów, która sprawdzi czy wszystkie
pola zostały wypełnione oraz czy zostały wypełnione w sposób poprawny. O wszystkich
nieprawidłowo wypełnionych polach użytkownik zostanie poinformowany poprzez specjalny
komunikat wraz z krótką informacją jak zniwelować błąd. Animacja odbywać się będzie
z zastosowaniem wpisanych parametrów oraz stosując odpowiedni model matematyczny.
Ponadto, niektóre z symulacji będą posiadały przyciski „stop” oraz „wznów”, które będą
dostępne po poprawnym uruchomieniu symulacji. Dzięki przyciskowi „stop” użytkownik
będzie w stanie zatrzymać animację w dowolnym momencie, co może być przydatne, jeśli
będzie chciał bardziej przyjrzeć się danemu zjawisku fizycznemu. W tym momencie będzie
można zmieniać parametry symulacji. Przycisk „wznów” pozwalał będzie natomiast na
ponowne rozpoczęcie animacji od momentu, w którym została zatrzymana.
Symulacje zjawisk fizycznych są złożonym zadaniem, ponieważ wymagają zrozumienia
i modelowania praw fizyki, dlatego ważne jest, aby aplikacja była łatwa w użyciu i zrozumiała
oraz aby proces symulacji zjawisk fizycznych był bardziej dostępny dla szerszego grona
użytkowników.
Interfejs aplikacji powinien być jak najbardziej czytelny i prosty w obsłudze, ponieważ
pozwala to użytkownikom na szybsze i łatwiejsze korzystanie z niej. Prosta obsługa aplikacji
oznacza, że użytkownik nie musi posiadać specjalistycznej wiedzy lub umiejętności, aby ją
obsługiwać. Dzięki temu użytkownicy będą mogli skupić się na symulowanych zjawiskach
fizycznych, a nie na problemach związanych z tworzeniem i obsługą aplikacji. Czytelny
interfejs aplikacji umożliwia natomiast łatwe odczytanie informacji i szybkie zrozumienie, jak
działa aplikacja.

13
5. SYMULACJA PRZEWODNICTWA CIEPŁA

5.1 MODEL MATEMATYCZNY

Równanie przewodnictwa ciepła opisuje zmiany temperatury w czasie oraz przestrzeni


i jest zazwyczaj zapisywane w postaci różniczkowej. Może mieć różne postacie w zależności
od rodzaju układu termicznego, który opisujemy oraz od wymiarów układu. Postać równania
przewodnictwa ciepła w dwuwymiarowym układzie we współrzędnych xy zapisać można
następująco

𝑑𝑢(𝑥,𝑦) 𝜕2 𝑢(𝑥,𝑦) 𝜕2 𝑢(𝑥,𝑦) (1)


= 𝛼( + ),
𝑑𝑡 𝜕𝑥 2 𝜕𝑦 2

gdzie: 𝛼 - współczynnik wyrównania temperatur,


u - temperatura w przestrzeni,
t - czas.

5.2 ZASTOSOWANE METODY NUMERYCZNE

Metoda jawna oraz niejawna są metodami analizy numerycznej do rozwiązywania równań


różniczkowych. Metoda jawna polega na wykorzystaniu aktualnego stanu układu do określenia
jest przyszłego stanu, natomiast metoda niejawna polega na rozwiązywaniu ukrytego równania,
które zawiera aktualny stan systemu jak i stan układu z przyszłości [7]. Metoda niejawna jest
trudniejszą metodą do zaimplementowania, lecz stabilniejszą oraz dokładniejszą.

Rys. 5.2.1. Szablon dla metody niejawnej w metodzie różnić skończonych [22]

14
Metoda różnic skończonych polega na przybliżeniu pochodnych różnicami skończonymi,
co dla równania przewodnictwa cieplnego (1) i dyskretyzacji z wykorzystaniem metody
niejawnej prowadzi do zależności [7]

𝑛+1 𝑛 𝑛+1 𝑛+1 𝑛+1 𝑛+1 𝑛+1 𝑛+1


𝑢𝑖,𝑗 − 𝑢𝑖,𝑗 𝑢𝑖+1,𝑗 − 2𝑢𝑖,𝑗 + 𝑢𝑖−1,𝑗 𝑢𝑖,𝑗+1 − 2𝑢𝑖,𝑗 + 𝑢𝑖,𝑗−1 (2)
= + ,
𝑡 𝑥 2 𝑦 2
gdzie: 𝑡 - przyrost w czasie,
x - przyrost w kierunku x,
y - przyrost w kierunku y,
u - temperatura w przestrzeni,
i - numer wiersza,
j - numer kolumny.

Równanie opisujące zależność temperatury w kolejnym kroku czasowym (n+1) w punkcie


w przestrzeni oznaczonym indeksami i oraz j od temperatury w punktach sąsiadujących oraz
temperatury w punkcie i,j w kroku poprzednim (w kroku czasowym n) przedstawia się
następująco

𝑛+1 𝑛+1 𝑛+1 𝑛+1 𝑛+1 𝑛


(1 + 2(𝑟𝑥 + 𝑟𝑦 ))𝑢𝑖,𝑗 − 𝑟𝑥 𝑢𝑖−1,𝑗 − 𝑟𝑥 𝑢𝑖+1,𝑗 − 𝑟𝑦 𝑢𝑖,𝑗−1 − 𝑟𝑦 𝑢𝑖,𝑗+1 = 𝑢𝑖,𝑗 (3)

gdzie:
𝑡
𝑟𝑥 =
𝑥 2
𝑡
𝑟𝑦 =
𝑦 2

Poniżej przedstawiono układ równań realizujący powyższą zależność dla wszystkich punktów
przestrzeni

A ∙ u𝑛+1 = u𝑛 (4)
gdzie:

15
1 −𝑟𝑥 −𝑟𝑦

−𝑟𝑥 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑥 −𝑟𝑦

−𝑟𝑥 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑦

−𝑟𝑦 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑥 −𝑟𝑦

𝐴= −𝑟𝑦 −𝑟𝑥 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑥 ⋱

−𝑟𝑦 −𝑟𝑥 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑦

−𝑟𝑦 ⋱ ⋱ ⋱

⋱ −𝑟𝑥 1 + 2(𝑟𝑥 + 𝑟𝑦 ) −𝑟𝑥

[ −𝑟𝑦 1 ]

Macierz A została stworzona z wykorzystaniem biblioteki Scipy oraz Numpy, które


pozwoliły na utworzenie macierzy rzadkiej bez przechowywania wartości zero w większości
elementów tablicy. Wykorzystując format zapisu CSR możliwe jest o wiele szybsze
wykonywanie operacji na macierzach.

1 self.A = sp.csr_matrix((np.ones(self.Nx),
(np.arange(self.Nx),np.arange(self.Nx))),
shape=(self.Nx_Ny,self.Nx_Ny),dtype=np.float64)
2 self.A = self.A + sp.csr_matrix((np.ones(self.Nx),
(np.arange(self.Nx_Ny-1,self.Nx_Ny-self.Nx-1,-
1),np.arange(self.Nx_Ny-1,self.Nx_Ny-self.Nx-1,-
1))),shape=(self.Nx_Ny,self.Nx_Ny),dtype=np.float64)
3 self.A = self.A + sp.csr_matrix((np.ones(self.Ny-
2),(np.arange(self.Nx,self.Nx_Ny-
self.Nx,self.Nx),np.arange(self.Nx,self.Nx_Ny-
self.Nx,self.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),
dtype=np.float64)
4 self.A = self.A + sp.csr_matrix((np.ones(self.Ny-
2),(np.arange(2*self.Nx-1,self.Nx_Ny-
self.Nx,self.Nx),np.arange(2*self.Nx-1,self.Nx_Ny-
self.Nx,self.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),
dtype=np.float64)
5
6 for i in range(self.Nx-2):
7 self.A = self.A + sp.csr_matrix((np.ones((self.Ny-
2))*(1+2*(self.rx+self.ry)),(np.arange(self.Nx+1+i,self.Nx_
Ny-self.Nx,self.Nx),np.arange(self.Nx+1+i,self.Nx_Ny-
self.Nx,self.Nx))),
shape=(self.Nx_Ny,self.Nx_Ny),dtype=np.float64)
8 self.A = self.A - sp.csr_matrix((np.ones((self.Ny-
2))*self.rx,(np.arange(self.Nx+1+i,self.Nx_Ny-
self.Nx,self.Nx),np.arange(self.Nx+i,self.Nx_Ny-
self.Nx,self.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),
dtype=np.float64)

16
9 self.A = self.A - sp.csr_matrix((np.ones((self.Ny-
2))*self.rx,(np.arange(self.Nx+1+i,self.Nx_Ny-
self.Nx,self.Nx),np.arange(self.Nx+2+i,self.Nx_Ny-
self.Nx,self.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),
dtype=np.float64)
10 self.A = self.A - sp.csr_matrix((np.ones((self.Ny-
2))*self.ry,(np.arange(self.Nx+1+i,self.Nx_Ny-
self.Nx,self.Nx),np.arange(1+i,self.Nx_Ny-
(2*self.Nx),self.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),
dtype=np.float64)
11 self.A = self.A - sp.csr_matrix((np.ones((self.Ny-
2))*self.ry,(np.arange(self.Nx+1+i,self.Nx_Ny-
self.Nx,self.Nx),np.arange(self.Nx+1+i+self.Nx,self.Nx_Ny,s
elf.Nx))),shape=(self.Nx_Ny,self.Nx_Ny),dtype=np.float64)

Listing 5.2.1. Tworzenie macierzy A

Tworzenie macierzy A odbywa się w klasie, dlatego zmienne posiadają przedrostek self.
Wykorzystując klasę csr_martix zostaje stworzona macierz rzadka. Zmienne self.Nx oraz
self.Ny oznaczają liczbę punktów na osi x oraz y, natomiast zmienna self.Nx_Ny jest to iloczyn
tych zmiennych. Zmienne self.rx oraz self.ry przechowują odpowiednio wartość przewodności
cieplnej w kierunku x oraz y. Korzystając z funkcji np.ones można wpisać odpowiednią wartość
do macierzy, a przy użyciu funkcji np.arange można decydować w którym miejscu ta wartość
ma być wpisana.

Rozwiązanie układu równań w kolejnych krokach czasowych jest wektorem wartości


temperatur w badanym obszarze

u𝑛+1 = A−1 u𝑛 (5)

1 for i in range(1,self.Nt):
2 self.U[:,i] = lin.spsolve(self.A,self.U[:,i-1])

Listing 5.2.2. Rozwiązywanie układu równań w kolejnych krokach czasowych

17
6. SYMULACJA RUCHU CZĄSTEK

6.1 MODEL MATEMATYCZNY

Prawo Coulomba jest prawem elektrostatyki, które mówi o tym, jak siły elektrostatyczne
działają pomiędzy różnymi ładunkami elektrycznymi. Siła elektrostatyczna pomiędzy dwoma
ładunkami elektrycznymi jest proporcjonalna do kwadratu ich wartości oraz odwrotnie
proporcjonalna do kwadratu odległości pomiędzy nimi. Korzystając z prawa superpozycji,
które umożliwia rozszerzenie prawa Coulomba można obliczyć siłę z jaką N ładunków, działa
na ładunek q

𝑁 (6)
𝑞𝑖 (𝑟⃗ − 𝑟⃗𝑖 )
𝐹⃗ (𝑟⃗) = 𝑘 ∗ 𝑞 ∗ ∑
|𝑟⃗ − 𝑟⃗𝑖 |3
𝑖=1

gdzie: F - siła,
r - położenie,
k - stała oddziaływań ładunków elektrycznych,
N - ilość ładunków,
q - ładunek.

1 def coulomb(self, particles, dt):


2
3 F_total=0
4
5 for particle in particles:
6 if self == particle:
7 continue
8
9 f = self.attraction(particle)
10 F_total += f
11
12
13 def attraction(self, other):
14
15 distance = self.r - other.r
16 dist3 = np.linalg.norm(distance)**3
17 f=((k*10)*self.q*other.q*distance)/dist3
18
19 return f

Listing 6.1.1. Obliczanie siły działającej na ładunek q

18
Obliczając siłę działającą na ładunek q wykorzystano funkcję o nazwie coulomb, która na
początku przypisuje wartość siły – F_total jako zero. Następnie wykonywana jest pętla tyle
razy, ile jest cząsteczek w symulacji na podstawie wzoru (6). Każdy ładunek przechodzi do
funkcji o nazwie attraction, gdzie obliczana jest jego siła względem ładunku q. Zmienna
distance odpowiada za obliczenie różnicy wektorów położenia ładunków, a zmienna dist3 za
podstawienie jej do potęgi trzeciej. Kolejno obliczana jest siła z jaką ładunek działa na ładunek
q poprzez wykorzystanie zmiennej self.k - stała oddziaływań ładunków elektrycznych,
zmiennej self.q – wartość ładunku oraz wcześniej wspomnianych distance i dist3. Końcowo
wartość siły jest zwracana i dodana do zmiennej F_total.

Wykorzystując prawo dynamiki Newtona, które mówi, że siła działająca na ciało jest równa
masie ciała pomnożonej przez jego przyspieszenie

𝐹𝑐 = 𝑚 ∙ 𝑎 (7)

i jednocześnie stosując wzór na przyspieszenie

⃗⃗
𝑑𝑣
𝑎⃗ = (8)
𝑑𝑡

Podstawiając wszystko pod siebie umożliwi to wyznaczenie wzorów na prędkość oraz


położenie ładunku
𝑑𝑣
𝐹𝑐 = 𝑚 ∙ 𝑑𝑡 (9)

𝑑𝑣 𝐹
= 𝑚𝑐 (10)
𝑑𝑡

𝑑𝑟
𝑣= (11)
𝑑𝑡

𝑑𝑟
=𝑣
𝑑𝑡
(12)
𝑑𝑣 𝐹𝑐
{ 𝑑𝑡 = 𝑚

6.2 ZASTOSOWANE METODY NUMERYCZNE

Metoda Eulera jest to metoda numeryczna do rozwiązywania równań różniczkowych.


Polega na podzieleniu przedziału czasowego, dla którego rozwiązujemy równanie.
Rozwiązanie w kolejnym kroku czasowym jest obliczane jako wartość rozwiązania
w poprzednim kroku plus przybliżenie pochodnej względem czasu w tym kroku. Metoda Eulera
jest prosta w implementacji i łatwa do zrozumienia, ale nie zawsze zapewnia dokładne wyniki.

19
Wykorzystując wzory (12) możliwe jest obliczenie położenia oraz prędkości ładunku q
w danym kroku czasowym

Rys. 6.2.1. Poruszanie się cząsteczek z zaznaczonymi wektorami prędkości „v” oraz wektorami siły „F”

∆𝑣 𝐹𝑐 (13)
=
∆𝑡 𝑚

𝑣𝑡𝑛 − 𝑣𝑡𝑛−1 𝐹𝑡𝑛−1 (14)


=
∆𝑡 𝑚

∆𝑟 (15)
=𝑣
∆𝑡

𝑟𝑡𝑛 − 𝑟𝑡𝑛−1 (16)


= 𝑣𝑡𝑛−1
∆𝑡

𝑟𝑡𝑛 = 𝑣𝑡𝑛−1 ∙ ∆𝑡 + 𝑟𝑡𝑛−1 (17)

𝐹𝑡𝑛−1 (18)
𝑣𝑡𝑛 = ∙ ∆𝑡 + 𝑣𝑡𝑛−1
𝑚

20
7. APLIKACJA KOMPUTEROWA Z GRAFICZNYM
INTERFEJSEM

7.1 STRUKTURA PROJEKTU

Struktura projektu powstała zgodnie z założeniami - wymaganiami funkcjonalnymi,


wymaganiami niefunkcjonalnymi oraz wykorzystując wybrane narzędzia. Dzięki temu
powstała aplikacja do symulacji wybranych zjawisk fizycznych. Projekt został podzielony na
cztery oddzielne pliki python w celu organizacji kodu źródłowego, ułatwienie odczytu oraz
zarządzanie. Pozwoli to również na łatwe rozwijanie aplikacji o kolejne zjawiska fizyczne.

Rys. 7.1.1. Widok przestrzeni roboczej środowiska programowania Visual Studio Code

7.2 WIDOK STARTOWY

Startowy widok aplikacji posiada trzy przyciski z różnymi symulacjami. Każdy


z przycisków jest opisany oraz pozwala użytkownikowi na wybranie w jednym momencie tylko
jednego z nich.

Rys. 7.2.1. Widok startowy aplikacji z dostępnymi trzema symulacjami

21
W celu wyjścia z aplikacji należy kliknąć przycisk „x” umiejscowiony w prawym górnym rogu.
Po naciśnięciu pojawi się również komunikat z zapytaniem, czy na pewno chcemy wyjść
z aplikacji

Rys. 7.2.2. Widok komunikatu po naciśnięciu przycisku wyjścia

7.3 WIDOK SYMULACJI PRZEWODNICTWA CIEPŁA

Symulacja przewodnictwa ciepła oparta jest na metodzie różnic skończonych. Interfejs


graficzny posiada pola do wpisania, które pozwalają na wprowadzanie parametrów do
symulacji. Użytkownik może ustalić:
- Liczbę punktów na osi x oraz y,
- Miejsca początkowe i końcowe na osi x oraz y,
- Liczbę punktów w czasie, która umożliwia wybór ilości kroków czasowych,
- Liczbę kroku czasowego, która decyduje co ile punktów w czasie animacja ma się
wykonać,
- Kilka funkcji początkowych dostępnych z listy.

Rys. 7.3.1. Widok graficzny symulacji przewodnictwa ciepła przed uruchomieniem

22
Po wybraniu parametrów należy nacisnąć przycisk „Start”, który przed włączeniem symulacji
sprawdzi poprawność wpisanych parametrów, a następnie, jeśli wszystko jest poprawne,
włączy symulacje. W przypadku, gdy parametry będą nieodpowiednio wpisane pojawi się
krótki komunikat.

Rys. 7.3.2. Widok komunikatu o niepoprawności wpisanych parametrów

Rys. 7.3.3. Widok graficzny symulacji przewodnictwa ciepła po uruchomieniu dla funkcji początkowej
X2 + Y2

23
Rys. 7.3.4. Widok graficzny symulacji przewodnictwa ciepła po uruchomieniu dla funkcji początkowej
2 2
𝑒 (−𝑋 −𝑌 )

7.4 WIDOK SYMULACJI RUCHU CZĄSTEK

Symulacja ruchu cząstek stosuje prawo Coulomba oraz metodę Eulera. Podobnie jak
symulacja przewodnictwa ciepła, interfejs posiada pola, które pozwalają na edycję parametrów.
Użytkownik może ustalić:
- Liczbę cząsteczek,
- Średnicę cząsteczek,
- Miejsca początkowe i końcowe na osi x oraz y,
- Siłę przyciągania cząsteczek,
- Prędkość poruszania się cząstek.

24
Rys. 7.4.1. Widok graficzny ruchu cząstek przed uruchomieniem

Przycisk „Start” sprawdzi, czy wpisane parametry są poprawne, jeśli tak, uruchomi symulację.
Na wzór rys. 7.3.2 w przypadku źle wpisanych parametrów pojawi się stosowny komunikat.
Na poniższym rys. 7.4.2 można zauważyć włączoną symulację, gdzie znajdują się
dwukolorowe cząsteczki. Niebieskim kolorem oznaczono cząsteczki naładowane ujemnie,
a kolorem czerwonym cząsteczki naładowane dodatnio. Ponadto symulacja ruchu cząsteczek
jest rozszerzona o dwa dodatkowe przyciski: „Stop” oraz „Wznow”. Przycisk „Stop” pozwala
na zatrzymywanie symulacji w dowolnym momencie, natomiast przycisk „Wznow” odpowiada
za rozpoczęcie animacji w momencie, gdy została zatrzymana.

Rys. 7.4.2. Widok graficzny symulacji ruchu cząstek po uruchomieniu dla liczby cząstek równej 30

25
Rys. 7.4.3. Widok graficzny symulacji ruchu cząstek po uruchomieniu dla liczby cząstek równej 7

7.5 WIDOK SYMULACJI FILTRA CZĄSTECZEK


ELEKTROSTATYCZNYCH

Symulacja filtra cząsteczek elektrostatycznych jest dość podobna do symulacji ruchu


cząstek. Interfejs posiada również przyciski o takiej samej metodyce działania jak „Start”,
„Stop” oraz „Wznow”. Na rys 7.5.1 można zaobserwować cząsteczki czarne oznaczające
zanieczyszczenia w powietrzu, które otrzymały ładunek dodatni oraz cząsteczki koloru
niebieskiego symbolizujące „czyste” cząstki powietrza. Cząsteczki poruszają się od lewej
krawędzi do prawej. Zanieczyszczone powietrze zostaje przyciągane do górnej lub dolnej
krawędzi, które są naładowane ujemnie.

Rys. 7.5.1. Widok graficzny symulacji filtra cząsteczek elektrostatycznych po uruchomieniu – krok 1

26
Rys. 7.5.2. Widok graficzny symulacji filtra cząsteczek elektrostatycznych po uruchomieniu – krok 2

Rys. 7.5.3. Widok graficzny symulacji filtra cząsteczek elektrostatycznych po uruchomieniu – krok 3

Rys. 7.5.4. Widok graficzny symulacji filtra cząsteczek elektrostatycznych po uruchomieniu – krok 4

27
8. PODSUMOWANIE I WNIOSKI

Niniejsza praca inżynierska dotycząca aplikacji do symulacji wybranych zjawisk


fizycznych została w pełni zrealizowana. Aplikacja posiada możliwość wyboru jednej z trzech
dostępnych symulacji, które są przedstawiane graficznie. Wdrożone zostały wybrane modele
matematyczne, które po obliczeniach pozwoliły na przewidywanie i opisywanie działań
zjawisk. Symulacje ruchu cząstek oraz przewodnictwa ciepła posiadają edytowalne parametry
do testowania różnych możliwości.
Symulacje zjawisk fizycznych za pomocą aplikacji komputerowych z graficzną
wizualizacją są użytecznym narzędziem do zrozumienia i przewidywania prostych jak
i złożonych systemów. Tworzenie wirtualnych modeli, pozwala na testowanie oraz analizę bez
konieczności przeprowadzania fizycznych eksperymentów, które mogą być czasochłonne
i kosztowne. Aplikacja może być pomocna w nauce, ponieważ pozwala użytkownikowi na
zdobycie wiedzy w sposób empiryczny. Jednocześnie zaprojektowanie oraz realizacja aplikacji
pozwoliła na poszerzenie wiedzy oraz umiejętności w zakresie programowania.
Zastosowane modele matematyczne dobrze poradziły sobie z symulowaniem zjawisk
fizycznych, których w wiarygodny i możliwie dokładny sposób symulowały zjawiska. Moduł
symulacji przewodnictwa ciepła można by rozszerzyć o metodę elementów skończonych, która
jest bardziej dokładna w stosunku do metody różnic skończonych, lecz wymaga większych
nakładów obliczeniowych, a co za tym idzie, większego zużycie zasobów procesora.
Aplikację można stale rozwijać w postaci dodania nowych zjawisk fizycznych do
symulacji, do których aplikacja jest dobrze przystosowana. Również wprowadzenie opcji
wyboru zastosowania różnych modeli matematycznych, pozwoliłoby na lepszą analizę oraz
testowanie najlepszego wyboru modelu matematycznego dla danego zjawiska. Istnieje też duży
potencjał na rozwój interfejsu, poprzez dodatnie nowych funkcji takich jak np. zapis do pliku
graficznej animacji czy możliwość eksportu/importu danych.

28
9. LITERATURA
[1] VINOD., KUMAR R., SINGH S.K.: Solar photovoltaic modeling and simulation: As a renewable
energy solution. Elsevier, 2352-4847, ss. 701-712.

[2] BAUER P., THORPE A., BRUNET G.: The quiet revolution of numerical weather prediction.
Nature, 525, ss. 47-55.

[3] CAO Y., HUANG J., YIN J.: Numerical simulation of three-dimensional ice accretion on an
aircraft wing. Elsevier, 0017-9310, ss. 34-54.

[4] JIANG T., GRZEBIETA R.H., ZHAO X.L.: Predicting impact loads of a car crashing into a
concrete roadside safety barrier. International Journal of Crashworthiness, 9, ss. 45–63.

[5] ADOLPH T., SCHÖNAUER W.: THE FINITE DIFFERENCE ELEMENT METHOD ( FDEM )
WITH EXAMPLES AND ERROR ESTIMATES. ss.1-23, 2009.

[6] BUTCHER J. C.: Numerical Methods for Ordinary Differential Equations, Third Edition. John
Wiley & Sons, Chichester, 2016.

[7] LANGTANGEN H.P., LINGE S.: Finite Difference Computing with PDEs: A Modern Software
Approach. Springer, Cham, 2017.

[8] VERWEIJ M.D., TREEBY B.E., VAN DONGEN K.W.A,. DEMI L.: Simulation of Ultrasound
Fields. Comprehensive Biomedical Physics, ss. 465-500, 2014.

[9] RAO S.S.: The finite element method in engineering. Butterworth-Heinemann, 2018.

[10] HIGHAM D.J.: Modeling and Simulating Chemical Reactions. SIAM, 50(2), ss. 347-368.

[11] KAN H., NAKAMURA H., WATANO S.: Numerical simulation of particle–particle adhesion by
dynamic liquid bridge. Elsevier, 0009-2509, ss. 607-615.

[12] MURRAY J.S., POLITZER P.: The electrostatic potential: an overview. WIREs Comput Mol Sci,
1, ss. 153-163.

[13] Filtry elektrostatyczne, https://www.simplythebestac.com/blog/2019/september/the-benefits-of-


electrostatic-air-filters/, 15.12.2022.

[14] Popularność Visual Studio Code, https://survey.stackoverflow.co/2022/, 15.12.2022.

[15] Przeznaczenie języka Python, https://www.python.org/about/apps/, 10.01.2023.

[16] Python indeks TIOBE, https://www.tiobe.com/tiobe-index/, 15.12.2022.

[17] Python indeks PYPL oraz badania Stack Overflow's Developer Survey,
https://www.stackscale.com/blog/most-popular-programming-languages/, 15.12.2022.

[18] Dokumentacja Numpy, https://numpy.org/doc/, 16.12.2022.

[19] Dokumentacja SciPy, https://docs.scipy.org/doc/, 16.12.2022.

[20] Dokumentacja Tkinter, https://docs.python.org/3/library/tk.html, 16.12.2022.

[21] Dokumentacja Matplotlib, https://matplotlib.org/stable/index.html, 16.12.2022.

[22] Szablon metody niejawnej, https://www.wikiwand.com/en/Alternating-direction_implicit_method,


10.01.2023.

29

You might also like