Professional Documents
Culture Documents
Re000000 99188 Inz
Re000000 99188 Inz
PRACA DYPLOMOWA
Studia pierwszego stopnia
stacjonarne
Informatyka
Streszczenie
Summary
2
SPIS TREŚCI
3
1. CEL I ZAKRES PRACY
4
2. WPROWADZENIE
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
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
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
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
3.6 MATPLOTLIB
11
4. PROJEKT
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:
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
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]
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 ]
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)
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.
1 for i in range(1,self.Nt):
2 self.U[:,i] = lin.spsolve(self.A,self.U[:,i-1])
17
6. SYMULACJA RUCHU CZĄSTEK
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.
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)
⃗⃗
𝑑𝑣
𝑎⃗ = (8)
𝑑𝑡
𝑑𝑣 𝐹
= 𝑚𝑐 (10)
𝑑𝑡
𝑑𝑟
𝑣= (11)
𝑑𝑡
𝑑𝑟
=𝑣
𝑑𝑡
(12)
𝑑𝑣 𝐹𝑐
{ 𝑑𝑡 = 𝑚
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)
=
∆𝑡 𝑚
∆𝑟 (15)
=𝑣
∆𝑡
𝐹𝑡𝑛−1 (18)
𝑣𝑡𝑛 = ∙ ∆𝑡 + 𝑣𝑡𝑛−1
𝑚
20
7. APLIKACJA KOMPUTEROWA Z GRAFICZNYM
INTERFEJSEM
Rys. 7.1.1. Widok przestrzeni roboczej środowiska programowania Visual Studio Code
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
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.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
𝑒 (−𝑋 −𝑌 )
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
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
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.
[17] Python indeks PYPL oraz badania Stack Overflow's Developer Survey,
https://www.stackscale.com/blog/most-popular-programming-languages/, 15.12.2022.
29