Projekt okładki: Ireneusz Gawliński

Ilustracja na okładce: Gerd Altmann/Pixabay

Wydawca: Karol Zawadzki i Renata Włostowska

Koordynator ds. redakcji: Adam Kowalski

Redaktor: Irena Puchalska

Produkcja: Mariola Grzywacka

Publikacja dofinansowana przez Wydział Podstawowych Problemów Techniki Politechniki Wrocławskiej

Książka, którą nabyłeś, jest dziełem twórcy i wydawcy. Prosimy, abyś przestrzegał praw, jakie im przysługują. Jej zawartość możesz udostępnić nieodpłatnie osobom bliskim lub osobiście znanym. Ale nie publikuj jej w Internecie. Jeśli cytujesz jej fragmenty, nie zmieniaj ich treści i koniecznie zaznacz, czyje to dzieło. A kopiując jej część, rób to jedynie na użytek osobisty.

Szanujmy cudzą własność i prawo.

Więcej na www.legalnakultura.pl

Polska Izba Książki

Copyright © by Wydawnictwo Naukowe PWN SA

Warszawa 2023

eBook został przygotowany na podstawie wydania papierowego z 2023 r. (wyd. I)

Warszawa 2023

ISBN: 978-83-01-23144-6

DOI: https://doi.org/10.53271/2023.078

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321; faks 22 69 54 288; infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN: mobisfera.pl

Spis treści

Wstęp

Jak korzystać z podręcznika

Pierwsze kroki

0.1 Znajdowanie miejsca zerowego funkcji 1d

0.1.1 Metoda bisekcji

0.1.2 Metoda Newtona–Rhapsona oraz siecznych

0.2 Znajdowanie minimum (maksimum) funkcji 1d

0.2.1 Metoda złotego podziału

0.2.2 Inne metody

0.3 Ćwiczenia

1 Projekt: Prostokątna Skończona Studnia Kwantowa – stacjonarne równanie Schrödingera w jednym wymiarze

1.1 Podstawy fizyczne: wybrane koncepcje mechaniki kwantowej

1.2 Problem: stany własne cząstki w prostokątnej skończonej studni potencjału

1.3 Metody numeryczne: wyznaczanie miejsc zerowych funkcji charakterystycznych

1.4 Ćwiczenia

2 Projekt: Dyfrakcja światła na szczelinie

2.1 Podstawy fizyczne: elementy fizyki fal

2.2 Problem: dyfrakcja fali na szczelinie

2.3 Metody numeryczne: schematy oparte na lokalnych aproksymacjach funkcji

2.3.1 Pochodne: schematy 2, 3 i 5-punktowy

2.3.2 Kwadratura: metoda prostokątów, trapezów oraz parabol (Simpsona)

2.4 Ćwiczenia

3 Projekt: Wahadło jako wzorzec jednostki czasu

3.1 Podstawy fizyczne: zasady dynamiki Newtona, równanie ruchu

3.2 Problem: wahadło matematyczne jako wzorzec jednostki czasu

3.3 Metody numeryczne: formuły rekurencyjne oparte na lokalnej ekstrapolacji funkcji podcałkowej całki 1-krokowej

3.3.1 Metoda Rungego–Kutty

3.4 Ćwiczenia

4 Projekt: Układ planetarny

4.1 Podstawy fizyczne: prawo powszechnego ciążenia

4.2 Problem: ruch planet w polu grawitacyjnym gwiazdy

4.3 Redukcja ruchu pojedynczej planety w polu centralnym do jednego wymiaru

4.4 Metody numeryczne: algorytm Verleta

4.5 Ćwiczenia

5 Projekt: Grawitacja wewnątrz Gwiazdy

5.1 Podstawy fizyczne: prawo Gaussa, równanie Poissona

5.2 Problem: pole grawitacyjne od ciągłego rozkładu gęstości masy

5.3 Metody numeryczne: Algorytm Numerowa–Cowellsa

5.4 Ćwiczenia

6 Projekt: Mody normalne w falowodzie cylindrycznym

6.1 Podstawy fizyczne: równanie falowe, fala stojąca

6.2 Problem: mody własne w światłowodzie

6.3 Metody numeryczne: metoda strzałów

6.4 Ćwiczenia

7 Projekt: właściwości ściany jako izolatora termicznego

7.1 Podstawy fizyczne: dyfuzja stacjonarna

7.2 Problem: dyfuzja stacjonarna ciepła przez ścianę

7.3 Metody numeryczne: metoda różnic skończonych

7.4 Ćwiczenia

8 Projekt: Kondensator cylindryczny

8.1 Podstawy fizyczne: zasada wariacyjna dla układu elektrostatycznego

8.2 Problem: kondensator cylindryczny

8.3 Metody numeryczne: metoda elementów skończonych (FE)

8.4 Ćwiczenia

Projekty zaawansowane

9 Projekt: Sprzężone oscylatory harmoniczne

9.1 Problem: ruch sprzężonych oscylatorów harmonicznych

9.2 Zadania

10 Projekt: problem Fermiego–Pasty–Ulama–Tsingou

10.1 Problem: Dynamika jednowymiarowego łańcucha oddziałujących mas punktowych

10.2 Zadania

11 Projekt: Zimna gwiazda wodorowa

11.1 Problem: rozkład gęstości masy w zimnej gwieździe wodorowej

11.2 Algorytm numeryczny

11.3 Zadania

12 Projekt: prostokątna studnia kwantowa wypełniona elektronami – idea obliczeń samouzgodnionych

12.1 Problem: studnia kwantowa wypełniona elektronami z neutralizującą ładunek dodatnią galaretą

12.2 Zadania

13 Projekt: równanie Schrödingera zależne od czasu Dawid Dworzański

13.1 Problem: ewolucja czasowa funkcji falowej w 1D studni kwantowej

13.2 Zadania

14 Projekt: równanie Poissona w 2D

14.1 Problem: reguła wariacyjna dla dwuwymiarowego układu elektrostatycznego i teoria jednoznaczności

14.2 Metody numeryczne: metoda elementów skończonych dla układu 2D

14.3 Zadania

Literatura uzupełniająca

A Materiały dodatkowe

A.1 Reprezentacja Eulera liczby zespolonej

A.2 Lokalna reprezentacja funkcji jednej zmiennej w postaci szeregu potęgowego

A.2.1 Szereg Taylora

A.2.2. Wielomiany Lagrange’a

A.3 Równanie ruchu wahadła Wilberforce’a

A.4 Związek dyspersyjny w problemie FPUT

A.5 Równoważność sformułowania różniczkowego i wariacyjnego w elektrostatyce

A.6 1. i 2. prawo jednoznaczności rozwiązań równania Laplace’a

A.6.1 Pierwsze prawo jednoznaczności

A.6.2 Drugie prawo jednoznaczności

A.7 Dyskretyzacja funkcjonału energii całkowitej w elektrostatyce

A.8 Gęstość gwiazdy

A.9 Zależność energii sieci atomów wodoru w układzie regularnym od objętości komórki elementarnej

Wstęp

Modelowanie numeryczne to stosunkowo nowe i potężne narzędzie badawcze. Jego imponujący rozwój, stymulowany rozwojem technologii komputerowych, można obserwować od połowy XX wieku. Obecnie nie istnieje dziedzina nauki czy inżynierii, w której modelowanie numeryczne nie odgrywałoby kluczowej roli. Lista korzyści jest długa. Znajdują się na niej nowe możliwości, takie jak: przewidywanie właściwości układów, badanie właściwości niedostępnych bezpośrednio eksperymentalnie, uzyskiwanie danych ilościowych wymagających ogromnej liczby operacji matematycznych lub przetwarzania wielkich zbiorów danych (Big Data), uczenie maszynowe (Machine Learning) oraz wiele innych. Tym niezwykłym możliwościom towarzyszy łatwość stosowania, szybkie uzyskiwanie wyników oraz relatywnie niskie koszty. Dzięki wymienionym zaletom, badania obliczeniowe stały się niezależnym narzędziem badawczym (obok zawsze najważniejszego eksperymentu i idącej za nim teorii), które z jednej strony jest rozszerzeniem narzędzi teoretycznych, a z drugiej – tworzy nową metodykę, często przypominającą bardziej eksperyment niż teorię (eksperymentowanie na układach wirtualnych). Narzędzie to staje się nieocenionym wsparciem dla badań doświadczalnych, technologii oraz fizyki teoretycznej, gdzie modelowanie matematyczne często na ostatnim etapie wymaga złożonych obliczeń prowadzących do wyników ilościowych.

W świetle tych uwag staje się rzeczą oczywistą, że różne aspekty modelowania numerycznego powinny być ważnym elementem wykształcenia, szczególnie w jednostkach ukierunkowanych na nauki ścisłe i inżynieryjne. Tego rodzaju kursy pojawiają się w ofertach dydaktycznych na całym świecie, nawet w formie niezależnych specjalności na uczelniach wyższych, jak Informatyka Stosowana czy Big Data. Koncentrują się one na różnych aspektach zastosowań komputerów w nauce i technice, w szczególności na modelowaniu numerycznym. Niniejszy podręcznik jest odpowiedzią na potrzeby w tym ostatnim aspekcie, czyli modelowaniu komputerowym. Poziom został dobrany tak, aby kurs mogli realizować studenci pierwszych lat fizyki lub studiów inżynieryjnych. Jest to istotne, ponieważ ze względu na powszechność narzędzi kształcenie tego rodzaju powinno się rozpocząć już na wczesnych etapach studiów w szkole wyższej. Konstrukcja kursu oparta jest na idei nauczania problemowego (problem-based learning) tak, jak sugeruje to tytuł podręcznika: Wstęp do modelowania komputerowego w fizyce. Oznacza to, że nie jest to systematyczny kurs metod numerycznych, lecz pewien zbiór projektów-problemów, a metody numeryczne pojawiają się jako narzędzie ich rozwiązania. W ten sposób poznawanie tych metod staje się funkcją celu, jakim jest rozwiązanie konkretnego problemu, co stanowi czynnik motywujący. Oprócz rozdziału Pierwsze kroki, gdzie studenci poznają metody numeryczne dla podstawowych operacji matematycznych (znajdowanie miejsca zerowego oraz ekstremum funkcji), kurs jest podzielony na projekty: osiem podstawowych i sześć zaawansowanych. Każdy podstawowy projekt rozpoczyna się przedstawieniem podstawowych informacji z zakresu fizyki, koniecznych do realizacji zadania (Podstawy fizyczne), kolejny etap to prezentacja i dyskusja konkretnego zagadnienia wraz z opisem matematycznym (Problem), następnie omawiane są metody numeryczne i algorytmy służące do rozwiązania problemu (Metody numeryczne) oraz proponowane podstawowe wersje programów (repozytorium internetowe), projekt kończy się zestawem ćwiczeń do wykonania (Ćwiczenia). Projekty zaawansowane oparte są na wcześniej wprowadzonych podstawach fizycznych i otwierają możliwość pierwszych badań obliczeniowych, gdzie student może tworzyć swoje własne scenariusze badawcze, uruchamiając w ten sposób indywidualną kreatywność. Podręcznik zawiera materiał wystarczający do realizacji kursu i w zasadzie nie ma potrzeby sięgania do dodatkowych źródeł. Oczywiście rekomendowane jest poszerzanie wiedzy z wykorzystaniem literatury.

Metody numeryczne omawiane w tym podręczniku, oprócz wspomnianych wyżej prostych operacji matematycznych oraz pochodnych i kwadratury funkcji, koncentrują się głównie na równaniach różniczkowych zwyczajnych (ODE – Ordinary Differential Equations) i cząstkowych (PDE – Partial Differential Equations): zagadnienie wartości początkowej, zagadnienie wartości brzegowych, zagadnienie własne. Większość wprowadzanych metod to metody rekurencyjne, oparte na dyskretyzacji zmiennej niezależnej (dla ODE). Dla PDE przedstawiono idee metod różnic skończonych (FD – Finite Difference) i elementów skończonych (FD – Finite Elements), by przy okazji zaprezentować wybraną metodę macierzową (FD) rozwiązania układu równań oraz przykładową metodę iteracyjną optymalizacji (FE), przy czym w obu przypadkach wykorzystano symetrię, by zredukować zagadnienie D do jednego wymiaru, co umożliwia łatwą implementację i realizację projektu w niezbyt obszernych ramach czasowych.

Wartością dodaną kursu jest nauka fizyki, gdyż projekty obejmują wiele jej obszarów, takich jak: mechanika, elementy mechaniki kwantowej, elektrodynamika czy termodynamika. Stanowi on dobry pretekst do efektywnej powtórki oraz rozszerzania i pogłębiania wiedzy z zakresu fizyki. Każdy projekt jest poprzedzony krótkim omówieniem podstaw fizycznych. Omówienia te nie wyczerpują tematów, jednak są skonstruowane tak, żeby były spójne, zawierały informacje niezbędne do realizacji projektów oraz inspirowały do głębszych studiów.

Autorzy dziękują Annie Latosińskiej za twórczą weryfikację manuskryptu. Do tworzenia kodów oraz ich weryfikacji w językach C++ i Python przyczynili się w dużym stopniu studenci Fizyki Technicznej oraz Inżynierii Kwantowej Wydziału Podstawowych Problemów Techniki Politechniki Wrocławskiej.

Jak korzystać z podręcznika

Oczekuje się, że studenci przystępujący do kursu posiadają wiedzę z zakresu fizyki ogólnej na poziomie szkoły wyższej, podstawową znajomość obsługi komputera, wybranego programu graficznego oraz podstawowe umiejętności programowania w wybranym języku.

Przed rozpoczęciem realizacji projektów zaleca się przeczytanie rozdziału Pierwsze kroki oraz wykonanie zamieszczonych ćwiczeń. Opisane tam operacje matematyczne oraz metody numeryczne (wyznaczanie miejsca zerowego oraz mini- mum/maksimum funkcji) są stosunkowo proste i bardzo przydatne. Wykonanie ćwiczeń pozwoli na zapoznanie się ze środowiskiem pracy (komputer, system operacyjny, narzędzia programistyczne i graficzne), co umożliwi skupienie się tylko na aspektach merytorycznych podczas realizacji projektów.

Pierwsze  projektów to projekty podstawowe, zawierające  sekcje: 1. Podstawy fizyczne, 2. Problem, 3. Metody numeryczne, 4. Ćwiczenia. W projekcie  dodatkowo znajduje się sekcja Redukcja ruchu pojedynczej planety do jednego wymiaru. Projekty zaawansowane ( – ) opierają się na wcześniej opisanych podstawach fizycznych, dlatego zawierają już tylko opis problemu, niekiedy opis metod numerycznych (jeśli wcześniej nie zostały wprowadzone) oraz zadania. Realizację projektów podstawowych rozpoczynamy poprzez zapoznanie się z podstawami fizycznymi i charakterystyką układu fizycznego wraz z opisem matematycznym (sekcje i ). W razie potrzeby (np. trudności w zrozumieniu) należy sięgnąć do dodatkowych źródeł. Sekcja trzecia poświęcona jest metodom numerycznym i jest ona kluczowa dla celu kursu. Prezentowane są tu pełne lub skrócone wyprowadzenia algorytmów, ponieważ ich świadome wykorzystanie jest zasadnicze do późniejszej analizy wyników, często obarczonych niefizycznymi cechami związanymi z cyfrowym charakterem analizy. Rekomenduje się również, aby czytelnik samodzielnie wyprowadził wszystkie formuły związane z metodami numerycznymi (jeśli nie są wyprowadzone) na podstawie opisanej metody (jest to zwykle jedno z ćwiczeń), przy czym ważniejsze niż samo wyprowadzenie jest zrozumienie zasady, na jakiej zbudowana jest metoda. Ostatnia część każdego projektu to ćwiczenia, jakie należy wykonać w programie.

Ćwiczenia podzielone są na  kategorie: podstawowe (które powinny być wykonane), uzupełniające (których celem jest pogłębienie i utrwalenie wiedzy) oraz zaawansowane (zawierające trudniejsze zadania dla osób szczególnie zainteresowanych przedmiotem). W ramach ćwiczeń podstawowych (obowiązkowych) duży nacisk położony jest na podstawowe etapy pracy obliczeniowej, takie jak:

1. Testowanie programu. Jest to sprawdzenie dla szczególnego przypadku, dla którego wyniki znane są z innych źródeł (np. analityczne), czy program odtwarza dany wynik. Ten etap zwykle występuje w pierwszych uruchomieniach programu, po eliminacji błędów w kodzie, które nieuchronnie się pojawiają.

2. Testowanie wpływu parametrów kontrolnych oraz ustalenie ich prawidłowych wartości. Jest to bardzo ważny punkt, nieodłączny w pracy fizyka czy inżyniera zajmującego się obliczeniami. Tworzenie i implementacja algorytmów numerycznych zawsze wiąże się z cyfryzacją formuł analitycznych, gdzie pojawiają się pewne parametry techniczne (kontrolne) regulujące ten proces, takie jak krok czasowy czy parametr siatki zmiennej przestrzennej. Nieprawidłowe wartości tych parametrów mogą zaburzać wyniki i sprawiać, że są one nieprawdziwe (niefizyczne). Podstawową metodą badania wpływu parametrów kontrolnych jest test zbieżności, polegający na analizie wyniku w funkcji danego parametru kontrolnego. Pozwala to zwykle ustalić zakresy parametrów, przy których spodziewamy się prawidłowego wyniku. Problem bywa skomplikowany, ponieważ przy wielu parametrach kontrolnych mogą występować korelacje między nimi, jednak celem tego podręcznika jest jedynie zwrócenie uwagi na ten problem. Istnieją również inne metody badania wpływu parametrów kontrolnych, o których będzie można dowiedzieć się podczas kursu.

3. Eksperymenty wirtualne. Jest to najważniejszy etap – cel, do którego prowadziła cała wcześniejsza praca. Jeśli mamy pewność, że program działa poprawnie i znamy właściwe wartości parametrów kontrolnych, możemy przystąpić do analizy problemu. Odbywa się to zwykle poprzez eksperymentowanie na wirtualnym układzie fizycznym, czyli badanie zachowania układu dla różnych parametrów fizycznych (np. ruch planet dla różnych warunków początkowych).

Wersje podstawowe programów znajdują się w repozytorium internetowym (rys. 0.1).

Rysunek 0.1: Repozytorium internetowe; https://wppt.pwr.edu.pl/PhysModelCodeshttps://wppt.pwr.edu.pl/PhysModelCodes

Zaleca się, aby pierwsze – kody były napisane samodzielnie przez studentów w wybranym języku, aby sprawdzić umiejętność programowania i ewentualnie uzupełnić znajomość języka programowania. Wersje wzorcowe to kody w Pythonie, wraz z dokładnymi opisami. Dla zainteresowanych dostępne są również programy w Fortranie oraz C++. Programy nie są optymalizowane pod względem wykorzystania zasobów obliczeniowych, aby zachować przejrzystość implementacji algorytmów. Niektóre ćwiczenia wymagają modyfikacji programów, co sprawia, że stają się okazją do nauki programowania. Oprócz podstawowych projektów (pierwszych ośmiu), książka zawiera propozycje projektów zaawansowanych. Mają one na celu zademonstrowanie możliwych zastosowań poznanych algorytmów do analizy bardziej złożonych zagadnień fizycznych. Zaleca się, aby zaawansowane projekty były realizowane indywidualnie przez studentów zainteresowanych pracą badawczą o charakterze obliczeniowym. Wszystkie zadania proponowane w tym podręczniku można wykonać, korzystając z darmowych narzędzi dostępnych w Internecie (np. Spider dla Pythona, Force dla Fortrana czy Gnuplot do opracowań graficznych).

Pierwsze kroki

Jest to pierwsza sesja w pracowni komputerowej, podczas której uczestnik poznaje podstawowe narzędzia, które będą wykorzystywane podczas nauki. Są to: elementy wybranego języka programowania, środowisko programistyczne oraz wybrany program graficzny. Opisane zostaną algorytmy dla podstawowych operacji matematycznych: wyznaczanie miejsca zerowego oraz ekstremum funkcji D, a także przećwiczone podstawowe operacje programistyczne: instrukcja pętli, tablicowanie funkcji D i D.

0.1 Znajdowanie miejsca zerowego funkcji 1d

0.1.1 Metoda bisekcji

Rysunek 0.2: Metoda bisekcji

Metoda bisekcji pozwala na znalezienie miejsca zerowego funkcji przy wykorzystaniu faktu, że funkcja, przechodząc przez miejsce zerowe, zmienia znak. Rozpoczynamy od sytuacji, w której jesteśmy pewni, że jedno i tylko jedno miejsce zerowe funkcji f(x) znajduje się w przedziale (xl,xr) (rys. 0.2). Oznacza to, że znamy położenie miejsca zerowego z niepewnością Δx = (xr − xl). Strategia dalszego postępowania polega na redukcji przedziału niepewności w kolejnych krokach. Najefektywniejszym sposobem jest podzielenie przedziału z poprzedniego kroku (także wyjściowego) na pół poprzez znalezienie punktu środkowego xm = (xr − xl)∕2. Otrzymujemy dwa przedziały o dwukrotnie mniejszej długości, jednak miejsce zerowe może znajdować się tylko w jednym z nich. W celu jego identyfikacji sprawdzamy warunek f(xl) ⋅f(xm ) < 0, czyli czy funkcja zmienia znak w przedziale (xl,xm ). Jeśli tak, to miejsce zerowe znajduje się właśnie w tym przedziale; jeśli nie, to znajduje się ono w drugim przedziale. Operację powtarzamy, podstawiając za xr = xm (lub xl = xm); po n krokach niepewność redukuje się 2n-krotnie. Całą procedurę kończymy, gdy niepewność będzie mniejsza od założonej wartości 𝜖, czyli gdy spełniony będzie warunek Δx < 𝜖. Można także uprzednio wyznaczyć konieczną liczbę kroków, korzystając z początkowej długości przedziału oraz faktu, że długość przedziału po n krokach zmniejsza się 2n-krotnie i wykonać tylko tyle kroków.

0.1.2 Metoda Newtona–Rhapsona oraz siecznych

Rysunek 0.3: Metoda Newtona–Raphsona

Metoda bisekcji jest bardzo skuteczna, jednak nie jest najbardziej efektywna. Popularnymi metodami alternatywnymi (zwykle bardziej efektywnymi) są metoda siecznych i metoda Newtona–Raphsona. Ta druga jest szczególnie użyteczna, jeśli wraz z funkcją znana jest jawna postać jej pochodnej oraz gdy wiadomo (lub z dużym prawdopodobieństwem przypuszcza się), że w otoczeniu miejsca zerowego funkcja ma człon liniowy w rozwinięciu potęgowym (rys. 0.3). Wówczas w punkcie xn będącym n-tym punktem iteracji tworzymy liniową aproksymację funkcji, co jest prostą operacją, jeśli znamy pochodną. Miejsce zerowe otrzymanej funkcji liniowej xn+1 = xn − f(xn)∕f′(xn ) jest kolejnym przybliżeniem miejsca zerowego f(x). Kryterium zakończenia oparte jest na zmianach położeń kolejnych punktów xn. Jeśli te zmiany w kilku kolejnych krokach nie przekraczają założonej wartości 𝜖, wówczas procedurę kończymy.

Gdy nie znamy jawnej postaci pochodnej funkcji, możemy ją obliczyć numerycznie (np. metodą -punktową, patrz podrozdz. 2.3). Prowadzi to do algorytmu nazywanego metodą siecznych.

0.2 Znajdowanie minimum (maksimum) funkcji 1d

0.2.1 Metoda złotego podziału

Zagadnienie znajdowania minimum (maksimum) funkcji jednej zmiennej jest kluczowe, ponieważ wiele metod wyznaczania minimów w przestrzeniach wielowymiarowych (metody optymalizacji) opiera się na minimalizacjach kierunkowych. Należy zwrócić uwagę, że odwrócenie znaku funkcji powoduje, że maksimum staje się minimum, dlatego omawiane algorytmy dotyczyć będą tylko znajdowania minimum.

Aby zidentyfikować przedział dziedziny (xl,xr), w którym znajduje się minimum, zakładając, że jest tylko jedno, potrzebny jest dodatkowy punkt kontrolny xc położony wewnątrz przedziału (rys. 0.4). Możemy być pewni, że w przedziale znajduje się minimum, jeśli spełnione są warunki f(xc) < f (xl) i f(xc) < f(xr).

Rysunek 0.4: Metoda złotego podziału

Konstruowanie algorytmu polega na wprowadzeniu czwartego punktu wewnątrz (xl,xr), aby powstały dwa -punktowe pokrywające się obszary, żeby można było dla każdego z nich sprawdzić powyższe warunki. Kluczowe jednak staje się położenie czwartego punktu, by redukcja przedziału niepewności w każdym kroku była taka sama. Cel ten osiąga się, jeśli czwarty punkt dzieli dłuższy z przedziałów (xl,xc) i (xc,xr) w proporcji złotego podziału, tzn. hl∕(hl + hs) = hs∕hl (hl – dłuższy segment, hs – krótszy segment). Ten sam warunek musi spełniać podział startowy. W ten sposób dwa nowe pokrywające się przedziały mają taką samą długość. Przez podstawienie x = hs∕hl w powyższej proporcji otrzymujemy równanie x2 + x− 1 = 0 , którego rozwiązanie √-( 5 − 1)∕2 ≈ 0.62 jest proporcją złotego podziału, znanego w architekturze i sztuce już w starożytności. Po n krokach przedział niepewności redukuje się (0.62)n-krotnie, czyli nieco wolniej niż w algorytmie bisekcji wyznaczania miejsca zerowego. Metoda złotego podziału jest bezpieczną i skuteczną metodą wyznaczania ekstremum, choć nie jest ona najbardziej efektywna.

0.2.2 Inne metody

Jeśli funkcja ma znaną jawną postać pochodnej, wówczas wyznaczanie minimum (lub maksimum) sprowadza się do znalezienia miejsca zerowego pochodnej z wykorzystaniem jednej z metod omówionych w poprzedniej sekcji.

Z kolei pewną analogią metody siecznych znajdowania miejsca zerowego funkcji jest metoda parabol do wyznaczania minimum. Mianowicie, korzystając z  punktów x,x ,x l c r, można jednoznacznie lokalnie aproksymować funkcję parabolą. Położenie minimum tej paraboli jest przybliżeniem minimum funkcji, jednak można go potraktować jako czwarty punkt kontrolny x c w opisanej wyżej procedurze iteracyjnej złotego podziału. Sprawdzenie warunków f (x ) < f (x ) c l i f(x ) < f(x ) c r pozwala na identyfikację przedziału, w którym znajduje się minimum. Ponownie aproksymujemy funkcję parabolą w nowym przedziale i procedurę powtarzamy aż do osiągnięcia założonej niepewności 𝜖 (w odniesieniu do długości przedziału w ostatnim kroku). Trzeba zauważyć, że metoda ta będzie skuteczna, jeśli funkcja ma człon kwadratowy w potęgowym rozwinięciu w otoczeniu minimum.

Rysunek 0.5: Metoda simplex

Metoda simplex w D (metoda kładki) jest najprostszą (jednak najmniej efektywną) metodą. Wykorzystuje ona okienko testowe „kładkę” (bez trzeciego punktu kontrolnego) o długości h = (xr − xl). Począwszy od pewnego punktu okienko testowe przesuwane jest w kierunku, w którym funkcja maleje (rys. 0.5). Na przykład przy przesuwaniu okienka w prawo sygnałem pojawienia się minimum jest spełnienie warunku f(xl) < f(xr). W takiej sytuacji przedział testowy jest zmniejszany dwukrotnie i przeszukiwanie zaczyna się od punktu xr w kierunku przeciwnym (w tym przypadku w lewo), aż do spełnienia warunku f(xr) < f(xl), co jest sygnałem do kolejnego zwrotu. Procedurę kończymy, gdy osiągnięta zostaje założona niepewność h < 𝜖. Dużą zaletą metody jest to, że pozwala ona na znalezienie przedziału, gdzie występuje minimum. Po jego znalezieniu można stosować bardziej efektywne, opisane wcześniej metody.

0.3 Ćwiczenia

Obowiązkowe

Korzystając z programu FTABLE, wypisz do pliku tablicę wybranej przez siebie funkcji i zwizualizuj ją przy użyciu programu graficznego.

Zmodyfikuj program FTABLE tak, aby przedstawiał w postaci tabeli funkcję 2D. Utwórz tablicę zaproponowanej przez siebie funkcji i narysuj ją programem graficznym.

Przetestuj program BISEC, znajdując pierwiastki wybranej funkcji kwadratowej i porównując je z wartościami analitycznymi.

Korzystając z programu BISEC, wyznacz liczbę π jako miejsce zerowe funkcji sinus. Jaką precyzję można osiągnąć? Wyjaśnij dlaczego.

Zaawansowane

Napisz program DMINIMUM, który znajdowałby minimum funkcji D z wykorzystaniem jednej z metod opisanych w tym rozdziale (złotego podziału, parabol, simplex). Przetestuj program, znajdując minimum zadanej funkcji kwadratowej. Wyznacz wartość liczby π jako położenie minimum funkcji cosinus. Jaką precyzję można osiągnąć? Wyjaśnij dlaczego.

1 Projekt: Prostokątna Skończona Studnia Kwantowa – stacjonarne równanie Schrödingera w jednym wymiarze

W tym projekcie wykorzystuje się procedurę wyznaczania miejsc zerowych do znajdowania wartości własnych stanów związanych w prostokątnej studni potencjału (program QWELL). Traktując studnię jako najprostszy możliwy model atomu, można dopasować otrzymywane energie własne do pierwszych – energii własnych atomu wodoru, co jest przedmiotem głównego zadania w tym projekcie. Zagadnienie własne pojawia się w kilku obszarach fizyki (mechanika drgań, optyka falowa, mechanika kwantowa) i jest przedmiotem oddzielnego rozdziału (Projekt 6), a także projektu zaawansowanego (Projekt 12), gdzie rozważana jest studnia prostokątna częściowo wypełniona elektronami. Paradoksalnie, mimo że w omawianym projekcie stosowane są metody numeryczne dla najprostszych operacji matematycznych (znajdowanie miejsca zerowego), koncepcje fizyczne, na których jest on oparty, są zaawansowane. Jest to mechanika kwantowa, zwykle jeszcze nieznana na pierwszych latach studiów. Nauka podstaw mechaniki kwantowej wymaga około - -godzinnego kursu oraz znajomości zaawansowanej matematyki, dlatego tutaj ograniczymy się tylko do wprowadzenia wybranych i najprostszych jej idei, w zakresie niezbędnym do świadomego wykonania projektu.