Zagadnienia

6. Sztywność, zmienny krok całkowania i metoda strzałów

W tym rozdziale zajmiemy się ważnymi schematami rozwiązywania tzw. sztywnych układów równań różniczkowych zwyczajnych. Omówimy schematy ze zmiennym krokiem całkowania i metodę strzałów rozwiązywania zadań brzegowych.

6.1. Sztywne równania różniczkowe zwyczajne

Dość trudno jest podać precyzyjnie poprawną matematycznie definicję sztywności dla dowolnego zadania różniczkowego zwyczajnego. My przyjmiemy definicję pragmatyczną za [13]:

Definicja 6.1

Równanie różniczkowe zwyczajne nazywamy sztywnym (ang. stiff), jeśli numeryczne schematy zamknięte, w szczególności metody zamknięte Adamsa, działają zdecydowanie lepiej niż schematy otwarte przybliżonego rozwiązywania zagadnień początkowych.

Oczywiście definicja nie jest do końca precyzyjna. Podamy też inne definicje sztywności (ang. stiffness) np. dla zagadnień liniowych, jakkolwiek powyższa definicja jest dla nas wygodna, ponieważ podkreśla to, że równania sztywne rozwiązujemy przy pomocy schematów zamkniętych. Za chwilę podamy kilka przykładów sztywnych równań różniczkowych, aby przekonać się, że pojawiają się one dość często w realistycznych modelach nauk przyrodniczych, por. rozdział 6.2.

6.1.1. Przypadek skalarny

W rozdziale 3.3.1 już zobaczyliśmy, że dla modelowego zadania skalarnego:

dxdt=axx0=1a<0.

rozwiązanie uzyskane przy pomocy otwartego schematu Eulera zachowuje własności rozwiązania xt=expa*t, tzn. jest dodatnie i malejące do zera dla t+ tylko wtedy, gdy jest spełniony warunek: h<-1/a. W przypadku gdy a jest bardzo duże, warunek ten wymusza, że musimy stosować bardzo małe h. Natomiast rozwiązanie uzyskane przy pomocy zamkniętego schematu Eulera zachowuje własności powyższe rozwiązania dla dowolnego h>0.

Schemat zamknięty Eulera można zatem uznać za lepszy od schematu otwartego dla tego zagadnienia dla ujemnego a o dużym module.

6.1.2. Przypadek wielowymiarowy

Załóżmy, że rozpatrujemy jednorodne liniowe równanie różniczkowe zwyczajne ze stałymi współczynnikami:

dxdt=Axxt0=β,

gdzie A - to macierz o stałych współczynnikach taka, że w pewnej bazie jest ona diagonalizowalna, tzn. istnieje macierz nieosobliwa C taka, że

A=CΛC-1

z

Λ=λ1λ2λN

Załóżmy, że wszystkie λk<0, wtedy oczywiście rozwiązaniem jest

xt=CeΛt-t0C-1β.

Oznaczmy k-tą kolumnę macierzy C przez ck, tzn. C=c1,,cN, wtedy otrzymujemy:

xt=kαkckeλkt-t0.

dla α=α1,,αNT=C-1β. Jeśli zastosujemy otwarty schemat Eulera do tego zagadnienia, to analogicznie jak w poprzednim rozdziale otrzymujemy, że

xn=I+h*Axn-1=CI+h*ΛC-1xn-1=CI+h*Λnα=kαkck1+hλkn.

Czyli: o ile λk1 (λk<0) tym odpowiednia składowa rozwiązania ckeλkt-t0 szybciej dąży do zera. Z drugiej strony warunek na to, aby odpowiadająca składowa rozwiązania dyskretnego otrzymanego otwartym schematem Eulera nie zmieniała znaku i zbiegała do zera wynosi:

h<1/λk,

czyli jest to warunek ograniczający dopuszczalny zakres wartości h.

Widzimy zatem, że otwarty schemat Eulera dla takiego równania jest zupełnie niepraktyczny na dłuższych odcinkach czasu, ponieważ ograniczenie na h związane jest ze składowymi rozwiązań, które najszybciej zanikają, czyli na dłuższym odcinku czasu nie mają większego wpływu na rozwiązanie. Z kolei dla schematu zamkniętego Eulera nie otrzymujemy żadnych ograniczeń na h, ponieważ:

xn=CI-h*Λ-nα=kαk1-hλk-n.

Widzimy, że dla tego typu równań schemat otwarty zachowuje się gorzej niż odpowiedni schemat zamknięty, co jest zgodne z naszą oryginalną definicją sztywności. W ogólnym przypadku, gdy wszystkie części rzeczywiste wartości własnych macierzy A są ujemne sytuacja jest analogiczna.

Zatem definiujemy zadanie liniowe jednorodne jako sztywne, jeśli:

  1. ReσAx:x<0

  2. maxλkσAReλkminλkσAReλk jest duże.

Tutaj σA oznacza zbiór wartości własnych macierzy A. Oczywiście w tej definicji nie jest doprecyzowane co oznacza <<duże>>, ale łatwo określić, że jeśli stosunek w drugim punkcie jest równy dziesięć, to układ nie jest sztywny, a jeśli 1020 to układ jest sztywny. Rozszerza się powyższą definicję sztywności na układy równań nieliniowych przyjmując, że układ:

dxdt=Ft,x

jest sztywny w obszarze G i dla t z odcinka a,b jeśli Jakobian F, czyli DxFt,x spełnia powyższą definicję dla każdego xG i ta,b.

Wadą powyższej definicji sztywności jest to, że nie obejmuje np. układu skalarnego x.=a*x dla a<0.

6.2. Przykłady schematów sztywnych

W tym rozdziale podamy kilka przykładów równań sztywnych, por. [13].

6.2.1. Oscylator Van der Pola

Równanie Van der Pola opisujące oscylator z nieliniowym tłumieniem:

d2ydx2-a*1-y*y*dydx+y=0a>0,

gdzie a>0 jest parametrem, dla dużego a>1 np. a=1000 powyższe równanie jest sztywne.

6.2.2. Reakcje chemiczne

Rozważmy następujące reakcje chemiczne, które symbolicznie opiszemy następująco:

A0.04Bwolna
B+B3*107C+Bbardzoszybka
B+C104A+Cszybka

co prowadzi do następującego układu równań różniczkowych zwyczajnych:

A:x1=-0.04*x1+104*x2*x3x10=1B:x2=0.04*x1-104*x2*x3-3107x22x20=1C:x3=3107x22x30=1

Czytelnikowi pozostawiamy sprawdzenie z pomocą octave'a, że np. schematy otwarte nie działają najlepiej dla tego problemu.

6.2.3. Równania paraboliczne

Ten przykład jest szczególnym przypadkiem dyskretyzacji równań, których metody dyskretyzacji omawiane są później dokładniej w rozdziale 14.

Rozpatrzmy równanie paraboliczne:

utt,x=2ux2t,x+ft,xx0,1t0,T

z warunkami brzegowymi ut,0=ut,1=0 i początkowym u0,x=u0x.

Dyskretyzując je względem zmiennej przestrzennej x metodą różnic skończonych, tzn. wprowadzając siatkę xk=k*h dla k=0,,N z h=1/N i przybliżając drugą pochodną przez

2ux2t,xut,x-h-2ut,x+ut,x+hh2,

otrzymujemy następujący układ równań różniczkowych zwyczajnych:

dukdtt=uk-1t-2ukt+uk+1th2+fktk=1,,N-1

z u0t=uNt=0 (warunki brzegowe) i warunkiem początkowym uk0=u0k*h i fkt=fk*h,t, por. rozdział 14.

Oczekujemy, że uktut,xk gdzie ut,x jest rozwiązaniem wyjściowego problemu. Nietrudno zauważyć, że powyższy układ równań zwyczajnych można zapisać jako

u=-h-2ANu+f,u0=u0x1,,u0xN-1T

dla u=u1t,,uN-1tT, ft=f1t,,fN-1tT i

AN=2-10-12-1-12-10-12 (6.1)

Można pokazać, że wartości własne AN są dodatnie i

maxλσANλminλσANλ=ON2,

czyli układ jest sztywny dla dużych N, czyli małych h.

Dla przykładowych dużych N możemy sprawdzić, czy rzeczywiście tak jest w octave, że stosunek największej do najmniejszej wartości własnej wynosi ok. 4000 dla N=100, a dla N=103 ten stosunek wynosi ok. 4*105. Tu podajemy kod octave obliczający ten stosunek:


6.3. Schematy zamknięte. Predyktor-korektor

Schematy zamknięte stosujemy dla zadań sztywnych.

Aby obliczyć kolejne przybliżenie xn w schematach zamkniętych, musimy rozwiązać liniowy lub nieliniowy układ równań np. dla zamkniętego schematu Eulera:

xn=xn-1+h*fn,

czyli w każdym kroku musimy rozwiązać układ równań:

gxn=0

dla funkcji gx=redx-hftn,x-xn-1\textcolor.

W ogólności dla zamkniętego schematu k-krokowego liniowego musimy w każdym kroku rozwiązać układ równań względem xn:

0=gxn=redαkxn-hβkftn,xn+j=0k-1αjxn+j-k-hj=0k-1βjfn+j-k.

Analogiczna sytuację widzimy dla zamkniętych schematów jednokrokowych. Powyższe równanie (układ równań) możemy rozwiązać przy pomocy różnych metod np. metody Newtona, czy jakiejś wersji metody iteracji prostej, zob. np. [18], [17]. Zauważmy, że w przypadku otwartego schematu Eulera xn jest punktem stałym dla funkcji Gnx=hftn,x-xn-1, czyli naturalne jest zastosowanie następującej metody iteracyjnej: dla danego x0 liczymy

xk=hftn,xk+xn-1=Gnxkk=1,.

Z odpowiedniej gładkości pola wektorowego f wynika, że xftn,x jest funkcją lipschizowską względem x (lokalnie na K¯=K¯xn-1,ϵ) ze stałą Lipschitza Lf i f jest ograniczona na kuli K¯, tzn. dla xK¯ zachodzi ftn,xM. Wtedy

xK¯Gnx-xn-1h*ftn,xh*M,

i stała Lipschitza Gn wynosi h*Lf, ponieważ

x,yK¯Gnx-Gny=hftn,x-hftn,yhLfx-y.

Zatem jeśli dla odpowiednio małego h zachodzi h*M<ϵ i h*Lfα<1, to Gn jest kontrakcją na K¯. Z tego wynika istnienie xn i zbieżność metody iteracji prostej. W przypadku innych schematów zamkniętych możemy skonstruować analogiczne wersje metody iteracji prostych.

Postawmy kwestię - jak dobierać startowe przybliżenie x0.

Pierwsza opcja to: wziąć x0=xn-1. Z ciągłości rozwiązania wynika, że jeśli h jest dostatecznie małe, to xnxtn i xn-1xtn-h są sobie bliskie, a dokładnie zachodzi xtn-h-xnOh .

Zastanówmy się, czy można dobrać x0 lepiej?

Istnieje możliwość, żeby za x0 brać przybliżenie xtn obliczone jednym krokiem otwartego schematu tego samego rzędu p co schemat zamknięty (oczywiście zbieżnym z tym samym rzędem) tzn.

x0=xn=Φh,tn,xn-l,xn-1

gdzie xn-1,,xn-l są obliczone wczesniej naszym schematem zamkniętym, a xn=Φh,tn,xn-l,xn-1 jest dowolnym l- krokowym otwartym schematem zbieżnym z rzędem p, por. (4.5).

Wtedy widzimy, że x0-xtnOhp więc i o ile h dostatecznie małe x0-xnOhp.

W takim przypadku schemat otwarty nazywamy predyktorem, a schemat zamknięty, który naprawdę stosujemy do rozwiązania zadania początkowego - korektorem. Podsumowując; nazwy schemat predyktor-korektor używa się względem schematu zamkniętego rzędu p, zaimplementowanego w ten sposób, że kolejne xnh przybliżenie xtnh obliczone jest poprzez zastosowanie w każdym kroku czasowym jakiejś metody iteracyjnej rozwiązywania nieliniowego równania (układu równań) z przybliżeniem startowym obliczonym odpowiednim pojedyńczym krokiem schematu otwartego tego samego rzędu (predyktorem). Metoda iteracyjna niekoniecznie musi być taka, jak opisana powyżej. Do rozwiązywania nieliniowego układu równań można stosować też np. metodę Newtona, czy jeszcze inną metodę iteracyjną, por. np. [18] lub [25].

W praktyce bierze się odpowiednie pary schematów tego samego rzędu: np. otwarty schemat Eulera za predyktor i zamknięty schemat Eulera za korektor, czy ogólniej - schemat otwarty Adamsa-Bashfordsa rzędu k za predyktor ze schematem zamkniętym Adamsa-Moultona rzędu k jako korektorem. Popatrzmy, jak wygląda przykładowa implementacja schematu predyktor-korektor w przypadku schematów Eulera: otwartego schematu Eulera wziętego jako predyktor i zamkniętego schematu Eulera, który tu pełni rolę korektora dla równania x.=1+x*x z x0=0 z rozwiązaniem xt=tant. Zaimplementowaliśmy powyższy schemat w octave biorąc jako metodę iteracyjnego rozwiązywania równania nieliniowego w każdym kroku funkcję octave fsolve():

 function [X,t]=predkoreuler(f,t0=0,x0=1,N=100,h=1.0/N)
 # Parametry funkcji:
 #f - wskaznik do pola wektorowego - funkcji dwóch argumentów f(x,t)
 #    przy czym x0 - wektor pionowy dlugosc M;
 # przyklad definicji wskaznika do prostego pola wekt.: f=@(x,t) -x;
 #t0 - czas początkowy
 #h - stały krok dla schematu Eulera
 #N - ilość kroku schematu
 #Funkcja zwraca macierz X wymiaru (N+1)xM długości N+1 taka ze
 #X(k,:) jest przybliżeniem rozwiazania w punkcie czasu t0+(k-1)*h
 #oraz wektor t dlugosci N+1 z dyskretnymi punktami czasowymi
 global xx hh tt
 hh=h;
 M=length(x0);
 X=zeros(N+1,M);
 t=zeros(N+1,1);
 xx=X(1,:)=x0;
 tt=t(1)=t0;
 for k=2:N+1,
   xp=xx+h*f(xx,tt); #predyktor
   g=@(x) x - hh*f(x,tt) - xx; #funkcja pomocnicza dla zamkniętego schematu Eulera
   X(k,:)=xx=fsolve(g,xp); #rozwiązujemy równanie - korektor
   tt+=hh;
   t(k)=tt;
 endfor
 endfunction

6.4. Adaptacyjny dobór kroku całkowania

Stałe w twierdzeniach o zbieżności schematów są znacznie zawyżone i dobór kroku całkowania w oparciu o szacowania z tych twierdzeń jest niepraktyczny. Czy można jakoś oszacować błąd na bieżąco i zmieniać krok całkowania w zależności od tych oszacowań?

Załóżmy, że chcemy użyć konkretnego schematu jednokrokowego rzędu k przybliżonego rozwiązywania zadania początkowego (3.1) takiego, że przy założeniu odpowiedniej gładkości pola wektorowego f otrzymujemy, że błąd metody spełnia dla 0<h<1:

enh=xnh-xtnh=etnhhk+Ohk+1.

dla tnh=t0+n*ha,b, x rozwiązania (3.1), xnh rozwiązania przybliżonego obliczonego naszym schematem i pewnej funkcji et. Można pokazać, że tak rzeczywiście jest, i że funkcja et jest rozwiązaniem odpowiedniego równania różniczkowego. Najważniejsze zaś jest to, że et nie zależy od h. Oznaczmy przez xt;h:=xnh rozwiązanie otrzymane przy pomocy schematu dla ustalonego h i dla t=tnh, a przez et;h:=enh oznaczmy błąd metody w punkcie t=tnh=t0+n*h.

Wtedy

et;h=ethk+Ohk+1,
et;h/2=ethk2k+Ohk+1.

Postępując podobnie jak w ekstrapolacji Richardsona, jeśli odejmiemy stronami te równości to otrzymamy:

et;h-et;h/2=xt;h-xt;h/2=ethk2k2k-1+Ohk+1,

czyli otrzymujemy:

Ex;h/2:=xt;h-xt;h/22k-1=ethk2k+Ohk+1et;h/2.

dla h1, a zatem:

etEx;h/2*2khk.

Otrzymaliśmy w ten sposób estymator błędu.

Jeśli chcemy otrzymać błąd na poziomie ϵ i dla pewnego t obliczyliśmy:

Ex;h/2ethk2ket;h/2,

to możemy wyliczyć h1, dla którego błąd będzie na poziomie ϵ, tzn. przyjmując

et;h1eth1k=ϵ

otrzymujemy

h1=ϵet1/kh2ϵEx;h/21/k. (6.2)

Następnie możemy zastosować ten schemat z krokiem h1.

Oczywiście adapatacyjną zmianę kroku całkowania (ang. adaptive step control) można stosować i do zwiększania kroku w celu obniżania kosztu obliczeń.

To znaczy, że jeśli Ex;h/2>ϵ, to możemy zmniejszyć krok zgodnie z powyższym wzorem i wtedy powtarzamy obliczenia z mniejszym krokiem h1. Jeśli Ex;h/2ϵ to za przybliżenie xt weźmiemy xt;h/2, a do następnego kroku możemy przyjąć nowy większy krok h1 z (6.2).

Oczywiście zamiast połowienia kroku możemy obliczać xt;h/q dla q=3 lub 4 i wtedy otrzymujemy analogiczne wzory.

Można też, zamiast stosowania tego samego schematu dwa razy z krokiem h i potem h/2, obliczać przybliżenie xt, schematem rzędu k, a potem większego rzędu np. k+1, jak to się dzieje np. w metodzie Rungego-Fehlberga, gdzie stosuje się schematy Rungego-Kutty czwartego rzędu i Rungego-Kutty piątego rzędu, por. rozdział 17.2 w [24].

6.5. Metoda strzałów

Metoda strzałów (ang. shooting method) służy rozwiązywaniu zadań brzegowych. Rozpatrujemy w tym przypadku równanie różniczkowe zwyczajne, w którym część warunków początkowych zastępujemy liniowymi lub nieliniowymi warunkami brzegowymi, tzn. szukamy funkcji klasy C1 na odcinku a,b spełniającej:

dxdt=ft,x,ta,b (6.3)
gxa,xb=0

dla g:URm×RmR2m danej funkcji co najmniej ciągłej.

Proszę zauważyć, że ogólnie takie zadanie nie musi mieć rozwiązania nawet w prostym przypadku np.

d2xdt2=-xx0=0xπ=1.

Rozwiązanie ogólne tego równania to c1sint+c2cost i z powyższych warunków brzegowych otrzymujemy sprzeczne warunki na c2: c1sin0+c2cos0=c2=0 i c1sinπ+c2cosπ=-c2=1.

Jeśli istnieje rozwiązanie zadania brzegowego (6.3), to oczywiście jest to szczególny przypadek rozwiązania zadania początkowego (dla pewnej wartości s):

d2xdt2=ft,xta,b, (6.4)
xa=s.

Dodatkowo wiemy, że jeśli f jest funkcją ciągłą, to wartość rozwiązania powyższego zadania początkowego dla t=b, tzn. xb;s jest funkcją ciągłą względem s. A jeśli f jest klasy Ck, to xb;s ma taką samą gładkość jak f, por. np. [23].

Jeśli istnieje rozwiązanie (6.3), to dla pewnego s* zachodzi gs,xb;s*=0. Sprowadziliśmy zadanie brzegowe do zadania nieliniowego znalezienia pierwiastka układu:

Fs:=gs;xb;s=0.
\
Rys. 6.1. Metoda strzałów - przybliżone rozwiązanie zadania brzegowego: d2ydx2=siny z y0=1 i y1=2.
\
Rys. 6.2. Kilka strzałów tzn. wykresów przybliżonych rozwiązań zadania początkowego: d2ykdx2=sinyk z yk0=1 i dykdx0=sk dla kolejnych iteracji sk.

Do rozwiązania tego układu możemy zastosować jakąś metodę rozwiązywania układów równań nieliniowych, np. metodę bisekcji (o ile zadanie jest skalarne), czy metodę Newtona lub iteracji prostych, por. np. [18].

Można się spytać: jak obliczyć wartość Fs dla danego s. Trzeba obliczyć xb;s, które jest wartością rozwiązania zadania początkowego (6.4) dla t=b z warunkiem początkowym xa=s.

Zwykle nie znamy rozwiązań ogólnych tego równania, więc musimy zastosować jakiś schemat rozwiązywania zadania początkowego.

Dla przykładu zastosowaliśmy metodę strzałów do rozwiązania zadania:

d2ydx2=sinyy0=1y1=2.

Wykorzystaliśmy metodę rozwiązywania równań zwyczajnych w octave lsode(), w połączeniu z funkcją octave'a rozwiązywania równań nieliniowych fsolve().

Otrzymaliśmy, że dla s=0.53595 błąd wynosi w przybliżeniu 10-8. Na rysunku 6.1 widzimy wykres rozwiązania, a na rysunku 6.2 widać wykresy przybliżeń rozwiązania, tzn. rozwiązania zadania początkowego z x.=sk dla sk wartości kolejnych iteracji metody Newtona. Na rysunku 6.3 widzimy wykres funkcji Fs.

\
Rys. 6.3. Wykres funkcji sy1;s dla y rozwiązania zadania początkowego: d2ydx2=siny z y0=1 i dydx0=s.

Niestety metoda strzałów w wielu przypadkach może być bardzo niestabilna. Rozpatrzmy bardzo proste liniowe zadanie: d2ydx2+yx=0 z warunkami brzegowymi y0=y20=1, dla którego znamy rozwiązanie yt=et-20+e-t/1+e-20. Zastosowanie metody strzałów z wykorzystaniem standardowej metody rozwiązywania równań zwyczajnych octave'a, czyli funkcją lsode(), daje rozwiązanie przybliżone, dla którego błąd w t=20 wynosi ok. 190. Wynika to z tego, że wartość rozwiązania zadania początkowego d2ydx2+yx=0 y0=1 y0=s dla t=20, tzn. y20;s, jest bardzo niestabilna. Małe zaburzenie s powoduje ogromną zmianę wyniku. W tym przypadku możemy funkcję yt;s, wyliczyć analitycznie, co pozostawiamy jako zadanie. Natomiast zastosowanie metody różnic skończonych daje dobre wyniki, por. rozdział 7.

6.6. Zadania

Ćwiczenie 6.1

Rozpatrzmy następujące zadanie brzegowe:

d2xdt2t-atxt=ft,x0=α,xb=β.

dla f funkcji C.

  1. Pokaż, że to zadanie ma jednoznaczne rozwiązanie dla stałego współczynnika a=Const0.

  2. Przy założeniu, że współczynnik a jest stały, wyznacz wszystkie wartości a, dla których powyższe zadanie może nie mieć rozwiązania.

  3. Pokaż, że jeśli znamy rozwiązania zadania początkowego x1 i x2:

    d2xdt2t-atxt=ftx0=αx0=sk

    dla różnych s1s2 takie, że x1bx2b, to możemy wyznaczyć wzór na s od s1,s2,x1b,x2b takie, że rozwiązanie zadania początkowego dla tego równania z warunkiem początkowym x0=αxb=s będzie rozwiązaniem wyjściowego zadania brzegowego.

Ćwiczenie 6.2 (laboratoryjne)

Rozpatrzmy następujące zadanie brzegowe:

d2xdt2t-atxt=ft,x0=α,xb=β

dla at0.

Zaimplementuj w octave metodę rozwiązywania zadania brzegowego metodą strzałów korzystając z rozwiązania poprzedniego zadania. W szczególności przetestuj dla at=1 i ft=0 z warunkami brzegowymi x0=xb=1 dla b=1,10,20. Porównaj wynik z rozwiązaniem dokładnym xt=et-b+e-t/1+e-b.

Wskazówka: 

Rozwiąż na odcinku 0,b korzystając z funkcji octave lsode() zadanie początkowe dla tego równania z dwoma różnymi warunkami początkowym xk0=α i xk0=sk dla k=1,2 i s1s2. Następnie oblicz s takie, że rozwiązanie zadania początkowego z x0=α i x0=s będzie rozwiązaniem wyjściowego zadania brzegowego.

Ćwiczenie 6.3 (laboratoryjne)

Bazując na otwartym schemacie Eulera zaimplementuj w octave schemat z adaptacyjnym krokiem całkowania korzystający ze wzoru (6.2) w rozdziale 6.4. Następnie dla równania y=-y z y0=1 sprawdź błąd tego schematu dla t=1 i t=100.

Ćwiczenie 6.4 (częściowo laboratoryjne)

Wyprowadź wzór analogiczny do (6.2) w rozdziale 6.4 dla schematu drugiego rzędu obliczając xt;h/q dla q=3, tzn. wzór na oszacowanie błędu bazujący na przybliżeniach rozwiązania otrzymanych danym schematem dla h i h/3. Zastosuj otrzymane wzory dla zadania początkowego z poprzedniego zadania i schematu Heuna.

Ćwiczenie 6.5

Udowodnij, że macierz AN dana wzorem (6.1) jest symetryczna, nieosobliwa i nieujemnie określona, czyli dodatnio określona.

Wskazówka: 

Nieujemną określoność najprościej udowodnić z twierdzenia Gerszgorina, por. [17]. A nieosobliwość macierzy - wprost zakładając, że istnieje niezerowy wektor w jądrze macierzy i dochodząc do sprzeczności.

Ćwiczenie 6.6 (laboratoryjne)

Zaimplementuj w octave schemat predyktor-korektor biorąc za korektor schemat trapezów rzędu dwa, a za predyktor schemat Heuna. Do rozwiązywania nieliniowego układu równań zastosuj funkcję octave'a fsolve(). Przetestuj rząd takiego schematu metodą połowionego kroku, jak opisano w rozdziale 5.4, dla równania x.=1+x*x z x0=0 dla t=1 z rozwiązaniem xt=tant i dla równania wahadła porównując z rozwiązaniem otrzymanym dla równania wahadła przy pomocy funkcji octave'a lsode().

Ćwiczenie 6.7 (laboratoryjne)

Zaimplementuj w octave schemat predyktor-korektor biorąc za korektor zamknięty schemat Eulera, a za predyktor otwarty schemat Eulera. Do rozwiązywania nieliniowego układu równań zastosuj swoje metody rozwiązywania równań nieliniowych tzn.:

  1. metodę iteracji prostych, jak opisano w rozdziale 6.3,

  2. wielowymiarową metodę Newtona.

Przetestuj rząd takiego schematu metodą połowionego kroku, jak opisano w rozdziale 5.4, dla równania x.=1+x*x z x0=0 z rozwiązaniem xt=tant dla t=1 i dla równania wahadła porównując z rozwiązaniem otrzymanym dla równania wahadła przy pomocy funkcji octave'a lsode(). Porównaj czas i ilość iteracji potrzebne do wyliczenia xn każdą z tych metod przy tym samym warunku stopu metody.

Wskazówka: 

Metoda Newtona rozwiązywania Gx=0 jest zdefiniowana następująco: xk+1=xk+hk dla DGxkhk=-Gxk. Układ równań liniowych Ay=b możemy rozwiązać w octave przy użyciu operatora backslash tzn. y=A \ b.

Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.

Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.