jawny schemat Eulera [globalny błąd O(Δt)] niejawny schemat Eulera [globalny błąd O(Δt)] u(t) f(t,u) [t,u(t)] )]dokładne d u(t) () f(t,u) [t+ Δt,u(t+Δt)] [t+ Δt,u(t+Δt)] Δt)] Δt t Δt t u(t) [t,u(t)] dokładne f(t,u) przesunięcie wyliczane na podstawie średniej arytmetycznej z chwil t i t+δt [wzór trapezów] [t+ Δt,u(t+Δt)] Δt t
dokładność wzóru trapezów a jawnego schematu Eulera: Równanie: Warunek początkowy: u 1 =u(t 1 =0)=1 Rozwiązanie: Punkt t 2 =0.5 u 2 =? [dokładnie: 1.1331] Euler jawny yjeden krok: u 2=u 1+Δt t 1u 1=u 1= 1 wzór trapezów u 2 =u 1 +(t 1 u 1 +t 2 u 2 ) Δt /2 = u 1 +t 2 u 2 Δt /2 jawny Euler u 2 := u 1 +u 2 /8 2 1 2 iteracja funkcjonalna wynik 8/7 niejawny Euler: 4/3=1.333 (pokazać) nieco gorzej niż jawny TR wygląda na bardziej dokładny d od E:
Oszacować błąd lokalny wzoru trapezów 1. rozw. Taylora wstecz 2. dla dowolnej funkcji ciągłej f(t)=f(t+δt)+o(δt) (wstawimy, rząd błędu pozostanie trzeci) 3. Rozwiązać na u(t+δt) Euler miał rząd obcięcia Δt 2 pozbyć się go.
3. Rozwiązać na u(t+δt) [przepisane] 4. Uśrednić z rozwinięciem Taylora do przodu 5. Wynik 6. Korzystamy z równania jawny i niejawny Euler lokalny błąd rzędu drugiego (rząd dokładności 1) wzór trapezów lokalny błąd rzędu trzeciego (rząd dokładności 2)
stabilność bezwzględną wzoru trapezów problem modelowy: WP: u(t=0)=1. rozwiązanie u=exp(λt) zbiór punktów na p. Gaussa, które są nie dalej od ( 2,0) niż od (2,0)
region bzwz. stabilności wzoru trapezów Δt Im (λ) Δt Re(λ) Wniosek: dla λ<0 wzór trapezów bezwzględnie stabilny dla dowolnego kroku czasowego! A stabilny druga bariera Dahlquista: maksymalny rząd dokładności metody A stabilnej =2 schemat trapezów jest najdokładniejszą metodą A stabilną spośród liniowych metod wielokrokowych Implementowana np. w SPICE.
region bzwz. stabilności Eulera: koło o promieniu 1 Δt Im (λ) i środku ( 1,0) Δt Re(λ) region bzwz. stabilności wzoru trapezów Δt Im (λ) niejawna metoda Eulera: region bezwzględnej stabilności Δt Im (λ) Δt Re(λ) między metodami można przechodzić w sposób ciągły 1 1 Δt Re(λ) θ=0,1,1/2 Euler jawny, niejawny i wzór trapezów odpowiednio w wykładzie na temat niejawnych formuł RK zobaczymy, że dokładność rzędu 2 uzyskana tylko dla θ=1/2 region stabilności?
iteracja funkcjonalna a wzór trapezów problem początkowy: u = 100u, u(0)=1 z rozwiązaniem dokładnym u(t)=exp( 100 t ) Δt=0.01 01 = graniczny dla zbieżności IF dla niejawnego Eulera 1,0, 0.5, 0.25, 0.375, 0.3125, 0.34375, 0.328125, 0.33593, 0.33203, 0.333984,...,0.333333 wzór trapezów = używa prawej strony z poprzedniego kroku czasowego z wagą 0.5 co nieco stabilizuje iterację. niestety iteracja funkcjonalna dla Δt=0.02 już przestaje być zbieżna (+1, 1,+1, 1,itd..) wzór trapezów zwiększa zakres zbieżności iteracji dwukrotnie (wyraz podkreślony stabilizuje iteracje) ale to wciąż mało metoda Newtona Raphsona pozostaje
poznane metody: 1) 2) 3) ) Poznane metody: jednokrokowe (1 3), jawna (1) i niejawne (2 3), pierwszego (1 2) i drugiego (3) rzędu dokładności d ś Metody (2 3) A stabilne, metoda (2) nadstabilna jawne metody różnicowe wysokiej dokładności??
jawne metody jednokrokowe wyższego rzędu dokładności niż jawny Euler u =f(t,u), u(0)=u u 0 rozwinięcie Taylora ponownie: liczymy pochodne: RRróżniczkujemy po czasie z RR. czyli podobnie Zależnie od tego gdzie się zatrzymamy uzyskamy błąd lokalny żądanego rzędu
Zależnie od tego gdzie się zatrzymamy uzyskamy błąd lokalny zadanego rzędu np. pomysł: mało przydatny w praktyce ze względu na konieczność analitycznego wyliczenia pochodnych cząstkowych f. Dla metod ogólnych: nie powinniśmy liczyć, że f jest dane wzorem
podejście alternatywne: inspirowane całkowaniem prawa strona = funkcja tylko t z rozwiązaniem: jeśli zastąpimy całkę kwadraturą prostokątów z wywołaniem funkcji w lewym końcu przedziału t n 1 t n u(t n )=u(t n 1 )+Δt f(t n 1 )+ O(Δt 2 ) rozpoznajemy jawny schemat Eulera kwadratura prostokątów z wywołaniem funkcji w prawym końcu przedziału u(t )=u(t 2 n )u(t n 1 )+Δt f(t n ) + O(Δt ) t n 1 t rozpoznajemy niejawny schemat Eulera n kwadratura trapezów u(t n )=u(t n 1 )+Δt f(t n )/2+ Δt f(t n 1 )/2 + O(Δt 3 ) rozpoznajemy niejawny schemat trapezów t n 1 t n
reguła punktu środkowego wzór prostokątów z wywołaniem funkcji w środku przedziału (dokładny dla funkcji liniowej, znoszenie błędów) t n 1 t n 1/2 t n uogólniony wzór na równanie równania u =f(t,u) np. ze schematu Eulera: ale skąd rozwiązanie w środku przedziału? bł d l k l E l O(Δt 2 ) ł kt ś dk błąd lokalny Eulera O(Δt 2 ), czy reguła punktu środkowego zachowa trzeci rząd błędu lokalnego?
sprawdźmy to rozważając bardziej ogólny schemat: obliczone na początku kroku obliczone gdzieś w środku przedziału (t n 1,t n ) z odpowiednio oszacowanym rozwiązaniem u dla tego t (wzór typu Eulera) jest to jawny dwustopniowy schemat Rungego Kutty. potencjalna wyższa dokładność od jawnego Eulera kosztem dwóch wywołań f (podobnie jak we wzorze trapezów, ale RK: jawny) b1,b2,a,c parametry metody jakie muszą być aby RK2 (2 = rząd dokładności) reguła punktu środkowego: należy do tej klasy z b 1 =0, b 2 =1, c=1/2, a =1/2
Jawne metody Rungego Kutty dwustopniowe: wybór parametrów (*) u =f(t,u) jak dobrać b 1,b 2,c,a? metodą brutalnej siły tak aby rozwinięcie Taylora metody zgadzało się z rozwinięciem Taylora dokładnego równania różniczkowego do wyrazów tak wysokiego rzędu ę jak to tylko możliwe przypominamy: rozwinięcie Taylora dla funkcji dwóch zmiennych wstawiamy rozwiązanie dokładne u(t n ), u(t n 1 ) do (*) i rozwijamy względem t n 1, u n 1
to trzeba rozwinąć wstawmy k 2 do rozwinięcia. Zachowajmy człony do Δt 2: (wszystko liczone w t n 1,u n 1 ) rozwinięcie Taylora rozwiązania dokładnego uzyskaliśmy kilka slajdów wcześniej czyli: rząd Δt: b 1 +b 2 =1, rząd Δt 2 : b 2 c=b 2 a=1/2 czyli reguła punktu środkowego: b 1 =0, b 2 =1, c=1/2, a =1/2 ma błąd lokalny rzędu O(Δt 3 ) 1 2 mamy metodę równie dokładną co wzór trapezów ale jawną (co ma swoje zalety i wady) Wyższy rząd błędu do uzyskania tylko w metodach o większej niż 2 liczbie stopni
cztery parametry i trzy równania b 1 +b 2 =1 b 2 c=b 2 a=1/2 pozostaje swoboda w wyborze parametrów reguła punktu środkowego RK2 b 1 =0, b 2 =1, c=1/2, a =1/2 dwa zastosowania jawnego schematu Eulera albo (przesunięty indeks) oszacowanie wstępne w punkcie pośrednim (błąd lokalny rzędu drugiego) oszacowanie docelowe (błąd lokalny oszacowania: rzędu trzeciego) u(t) [t,u(t)] dokładne [t+δt/2,y(t+δt/2)] 1) Szacujemy metodą Eulera punkt środkowy [t+δt/2,u(t+δt/2)] korzystając z f(t,u) w lewym końcu przedziału 2) Wykorzystujemy wartość f w tym punkcie do wyliczenia zmiany y na całym przedziale Δt Δt t
RK punktu środkowego:b 1 +b 2 =1, b 2 cba1/2 c=b 2 a=1/2 inny wybór: b 1 =b 2 =1/2, wtedy musi a=c=1 metoda podobna do wzoru trapezów (ale jawna) u(t) [t,u(t)] dokładne 1) Szacujemy metodą Eulera punkt końcowy [t+δt,u(t+δt)] korzystając z f(t,u) w lewym końcu przedziału 2) krok z t do t+δt wykonujemy biorąc średnią arytmetyczną z f na początku i końcu Δt t metoda RK2 trapezów
dla błędu lokalnego O(Δt 3 ) potrzeba aby, rząd Δt: b 1 +b 2 =1, rząd Δt 2 : b 2 c=b 2 a=1/2 punkt środkowy b2=1, b1=0 [b1+b2]=1 czy ma sens b1=1, 1 b2=0?
Metody Rungego Kutty, forma ogólna są to metody jednokrokowe, czyli można zapisać: metoda RK w s odsłonach (stage) (unikamy słowa krok ) z wzory przedstawiane w formie tabel Butchera c A b
Metody Rungego Kutty, forma ogólna czasem zapisywane w postaci: tutaj U i przybliżone rozwiązanie w chwili t n 1 +c i Δt zazwyczaj niższej dokładności niż rozwiązanie ą końcowe
jawne metody Rungego Kutty jawne: a ij =0 dla j i obcięte sumowanie: odsłona i ta wyliczana na podstawie tylko wcześniejszych odsłon historycznie i wszystkie RK były ł jawne, uogólnienie i okazało ł się przydatne dla problemów sztywnych
Wyprowadzanie formuł RK (a,b,c) 1) Rozwijamy rozwiązanie dokładne w szereg Taylora względem t n 1 2) Podstawiamy rozwiązanie dokładne do ogólnej formy RK i rozwijamy względem t n 1 3) Wartości parametrów a,b,c uzyskujemy z porównania. zazwyczaj w sposób niejednoznaczny najbardziej popularne: jawne formuły 4 etapowe RK4: o 4 tym stopniu zbieżności (4 tym rzędzie dokładności) i 5 tym rzędzie ę błędu ę lokalnego ogólna tabela Butchera: dla jawnych RK4 c 1 =0 (dla każdej jawnej RK, zaczynamy k 1 od wyliczenia prawej strony w kroku początkowym)
klasyczna formuła RK4: u(t) k 1 u k 2 k 3 k 4 4 wywołania f na krok, błąd lokalny O(Δt 5 ) gdy f tylko funkcja czasu RK4 gdy f tylko funkcja czasu RK4 redukuje się do formuły Simpsona :
Jawne schematy RK dla układu równań różniczkowych 2 zmienne zależne u 1, u 2, 2 prawe strony f 1, f 2 zapis wektorowy u n 1, u n, f, U 1, U 2,... U N są wektorami o 2 składowych 2 równania, s odsłon (i=12 1,2,...,s)
Tabela Butchera dla klasycznej jawnej RK4 0 0 0 0 0 1/2 1/2 0 0 0 1/2 0 1/2 0 0 1 0 0 1 0 1/6 1/3 1/3 1/6
Dlaczego RK4 najbardziej popularna: Liczba kroków a rząd zbieżności jawnych metod RK: rząd 1 2 3 4 5 6 7 8 minimalna liczba odsłon 1 2 3 4 6 7 9 11 RK4 wyjątkowo opłacalna RK1 metoda RK w jednej odsłonie b1+b2=1, przy b 1 =1, b2=0 dostaniemy jawnego Eulera warunek a*b2=c*b2 =1/2 nie będzie spełniony jawnyschemat Eulera to jawnametoda RK1
jawny Euler tabela Butchera RK2 trapezów tapeó b 1 =b 2 =1/2, a=c=1 RK2 punktu środkowego 0 0 0 1/2 1/2 0 0 1
Szacowanie błędu ę lokalnego w metodach jednokrokowych Po co? 1) W rachunkach numerycznych musimy znać oszacowanie błędu 2) Aby ustawić krok czasowy tak, aby błąd był akceptowalny 3) Gdy oszacowanie jest w miarę dokładne: można poprawić wynik
Oszacowanie błędu lokalnego w metodach jednokrokowych W każdym kroku generujemy nowy błąd w rachunkach. Znamy jego rząd. dla RK: wstawialiśmy rozwiązanie dokładne do schematu i je rozwijaliśmy w szereg T. wybór b 1 =0, b 2 =1, c=1/2, a =1/2 dawał RK2 punktu środkowego 1 2 Rozwijając do jednego rzędu wyżej z Δt uzyskamy oszacowanie błędu lokalnego d n = u(t n ) u n [przy założeniu, że u(t n 1 ) = u n 1 ] świetny i wzór choć ć mało ł praktyczny
Oszacowanie błędu (lokalnego) w metodach jednokrokowych metodą rzędu p z chwili t n 1 wykonujemy krok do t n może zależeć od t n 1 oraz u n 1, ale nie zależy od Δt folia wcześniej szacowanie błędu: 1) ekstrapolacja Richardsona (step doubling) 2) osadzanie (embedding)
ekstrapolacja Richardsona dwa kroki Δt: dostaniemy lepsze oszacowanie u(t n+1 ) t n 1 t n t n+1 Δt Δt jeden krok 2Δt: dostaniemy gorsze oszacowanie u(t n+1 ) t n 1 t n+1 2Δt szacujemy C n z porównania obydwu rozwiązań
ekstrapolacja Richardsona błąd lokalny u(t n ) u n =d n jest: wykonujemy krok następny od t n do t n+1 odchylenie wyniku numerycznego od dokładnego u(t n+1 ) u n+1 = γ d n +d n+1 1) zakładamy, że krok jest na tyle mały, że stała błędu ę się ę nie zmienia C n C n+1 (lub, ze w jednym kroku zmienia się o O(Δt)] wtedy błąd lokalny popełniony w chwili t n+1 jest d n+1 d n. 2) gdy krok mały: współczynnik wzmocnienia błędu γ 1 (błąd ą popełniony p w kroku pierwszym nie jest istotnie wzmacniany) Przy tym założeniu: błąd po drugim kroku suma błędów γ d n +d n+1 2d n,
ekstrapolacja Richardsona t n 1 t n t n+1 Δt Δt to chwili t n+1 dojdziemy z t n 1 w pojedynczym kroku 2Δt t n 1 t n+1 2Δt dostaniemy gorsze oszacowanie u(t n+1 ) chcemy poznać C n (to + znajomość p da nam oszacowanie błędu): odejmujemy niebieskie wzory tak aby wyeliminować rozwiązanie dokładne (nam niedostępne)
ekstrapolacja Richardsona błąd wykonany po dwóch krokach Δt wynosi więc: pierwszy wniosek: jeśli znamy rząd metody p to potrafimy go podnieść o jeden
ekstrapolacja Richardsona podnosimy rząd dokładności metody algorytm
Przykład: r. dokładne: ekstrapolacja Richardsona Euler (p=1) błąd lokalny O(Δt 2 ) Euler po poprawce: błąd lokalny l O(Δt 3 ) kreski: RK2 punktu środkowego (p=2), b.lok. O(Δt 3 ) znając rząd dokładności możemy radykalnie poprawić dokładność metody przy natdatku (50 procent) numeryki
Euler ekstrapolacja Richardsona RK2 RK2 z odciętym błędem
Oszacowanie błędu lokalnego w metodach jednokrokowych 1) ekstrapolacja Richardsona (step doubling) 2) osadzanie (embedding) cel: szacujemy błąd lokalny metody rzędu p przy pomocy lepszej metody, np. rzędu p+1 obydwie metody szacują rozwiązanie w tych samych chwilach czasowych co daje oszacowanie błędu gorszej metody nie nadaje się do poprawiania schematu p po cóż zresztą poprawiać gdy mamy p+1
celem szacowania błędu nie jest poprawa wyniku, (dla poprawy p zawsze można Δt zmienić) lecz adaptacja Δt : stały krok zawsze może okazać się zbyt wielki albo zbyt mały. JAKI KROK CZASOWY SYMULACJI USTAWIĆ JAKI KROK CZASOWY SYMULACJI USTAWIĆ gdy coś ciekawego zdarza się tylko czasem?
Automatyczna kontrola kroku czasowego dla metod jednokrokowych Program może sam dobierać krok czasowy w zależności od tego co dzieje się w symulacji. Chcemy utrzymać błąd na poziomie zbliżonym do parametru tol. nie większy aby zachować wymaganą dokładność, nie mniejszy aby nie tracić ć czasu casuna rachunki zbyt dokładne Szacujemy błąd lokalny E (ekstrapolacja Richardsona lub metody embedding) E=C[Δt] p+1 chcemy zmienić krok odpowiednio do naszych wymagań z Δt do Δt(nowy) tol=c[δt(nowy)] p+1 Δt(nowy)=(tol/E) 1/(p+1) Δt Δt(nowy)=(S) (S tol /E) 1/(p+1) Δt dla bezpieczeństwa ń S<1 wzór zwiększy zbyt mały krok i vice versa uwaga: błąd jest szacowany, zawsze warto dorzucić sztywne ograniczenia na Δt
Automatyczna kontrola kroku czasowego dla metod jednokrokowych symulacja ustawiająca krok czasowy może wyglądać np. tak: u 0 = warunek początkowy t 0 =0 n=1 do { jeśli E<tol { tn:=tn+δt n:=n+1 (oznacza akceptację wyniku) } Δt:=(S tol /E) 1/(p+1) Δt } while ( t<t)
Przykład: oscylator harmoniczny używane oszacowanie błędu z RK2 Uwaga: tutaj rozwiązania nie poprawiamy przez ekstrapolacje kt tolerancja błędu obcięcia tol=0.1 start RK2 V (t) V (t t) tol=1e 2 x 2 V 2 Δt x (t) x (t) (t) V tol=1e 3 x (t) algorytm ustawia minimalny krok czasowy gdy zmiany prędkości lub położenia są maksymalne
wyniki Konrada Rekiecia RK4 spirala się skręca zamiast rozkręcać E(t) RK2 tol=.1 RK4 przy założonej tolerancji RK4 wcale nie jest dokładniejsze od RK2
dt... tylko pozwala stawiać dłuższe kroki