3.1. Wprowadzenie
Załóżmy, że rozpatrujemy
zagadnienie początkowe pierwszego rzędu (zagadnienie Cauchy'ego) :
|
dxdt=ft,xxt0=x0 |
| (3.1) |
gdzie G⊂Rm, f:a,b×G→Rm jest funkcją ciągłą, a t0∈a,b,x0∈G jest ustalone.
Z ogólnej teorii równań różniczkowych, por. [23]
wiadomo, że
Twierdzenie 3.1 (Peano)
Jeśli f jest funkcją ciągłą na otoczeniu t0,x0, to istnieje rozwiązanie (3.1) określone na pewnym otoczeniu t0.
Jeśli dodatkowo założymy, że f jest funkcją lipschitzowska na otoczeniu t0,x0
względem zmiennej x, to
możemy pokazać jednoznaczności rozwiązania, tzn. zachodzi twierdzenie:
Twierdzenie 3.2 (Picarda-Lindelöfa)
Jeśli f jest funkcją ciągłą na otoczeniu t0,x0 oraz f
jest funkcją lipschizowską względem x w pewnej kuli Bt0,x0,δ, tzn.
|
∃L≥0∀t,x,t,y∈Bt0,x0,δft,x-ft,y≤Lx-y, |
|
to istnieje c>0 i x∈C1t0-c,t0+c,Rn takie, że
x jest jednoznacznym rozwiązaniem (3.1).
Od tej pory będziemy przyjmować, że funkcja f, zwana też polem wektorowym, spełnia założenia twierdzenia Picarda-Lindelöfa, tzn. Twierdzenia 3.2, czyli że istnieje jednoznaczne rozwiązanie zadania Cauchy'ego na odcinku t0,T.
Zauważmy, że każde rozwiązanie jest krzywą styczną do pola wektorowego.
3.2. Równania liniowe ze stałymi współczynnikami
W tym podrozdziale krótko przypomnimy teorie dla ważnej klasy równań różniczkowych zwyczajnych,
tzn.
jednorodnych równań liniowych ze stałymi współczynnikami, czyli równań postaci:
gdzie A - to stała macierz n×n,
dla których znamy rozwiązania zadania Cauchy'ego:
|
dxdt=Axxt0=x0 |
| (3.2) |
Znamy wzór na rozwiązanie tego zadania:
gdzie eksponent od macierzy zdefiniowany jest wzorem
Skorzystamy ze znajomości postaci rozwiązania tej klasy równań w rozdziale 6.
W zależności od postaci Jordana macierzy A można wypisać
postać expAt, w szczególności jeśli
macierz A jest diagonalizowalna,
tzn. istnieje baza wektorów własnych, które zapisane jako kolumny macierzy V dają:
gdzie Λ - to macierz diagonalna z wartościami własnymi macierzy A na diagonali:
Wtedy wiadomo, że
|
eAt=Veλ1t⋱eλntV-1. |
|
W szczególności jeśli Reλk<0 dla wszystkich k=1,…,n to
każde rozwiązanie spełnia
a z kolei jeśli istnieje λk takie, że Reλk>0,
to istnieje rozwiązanie zagadnienia Cauchy'go z niezerowym warunkiem brzegowym, dla którego
3.3. Kilka prostych schematów
Załóżmy, że rozpatrujemy zadanie skalarne tzn. m=1.
Chcemy w jakiś sposób przybliżyć rozwiązanie równania (3.1).
Przybliżamy pochodną poprzez iloraz różnicowy dla pewnego parametru h>0:
i otrzymujemy otwarty schemat Eulera:
czy inaczej:
znając rozwiązanie w punkcie t0 xht0=x0 możemy
wyznaczyć przybliżone rozwiązanie xh
w kolejnych punktach tn=t0+nh z powyższego wzoru.
Ale można też przybliżyć pochodną biorąc parametr -h w tył:
i wtedy zastępując pochodną przez taki iloraz otrzymujemy zamknięty schemat Eulera:
czy inaczej:
|
xht+h=xht+hft,xht+h. |
|
Proszę zauważyć, że jeśli znamy rozwiązanie w punkcie t0, tzn. xht0=x0, to aby wyznaczyć kolejne przybliżenia rozwiązania w punktach t=tn=t0+nh należy rozwiązać
równania postaci:
|
gy:=y-hft,y-xht=0 |
| (3.3) |
względem y, co sprawia, że zamknięty schemat Eulera może wydać się mało praktyczny w porównaniu z otwartym schematem Eulera. Dla niektórych równań jest to pozorne. Zauważmy tylko, że im h mniejsze, tym potencjalnie równanie (3.3)
jest łatwiejsze do rozwiązania (dlaczego?). Przyjrzymy się temu problemowi dokładniej w kolejnych rozdziałach.
W dalszej części wykładu założymy, że chcemy przybliżyć rozwiązanie
xt na odcinku t0,T, na którym x∈Ckt0,T, w dyskretnych punktach czasu:
Często będziemy opuszczali indeks h, o ile to nie będzie powodowało niejasności.
Wartość rozwiązania w punkcie tnh, czyli xtn będzie przybliżana przez
xnh, spełniające odpowiedni schemat.
Wygodnie jest też oznaczać ftnh,xnh=fnh.
Górny indeks h będziemy często opuszczali, jeśli h będzie ustalone.
Tak więc otwarty schemat Eulera możemy zapisać jako:
|
xn+1=xn+hfnn>0x0=xt0, |
| (3.4) |
a zamknięty schemat Eulera możemy zapisać jako:
|
xn+1=xn+hfn+1n>0x0=xt0. |
| (3.5) |
Kolejnym wyprowadzeniem otwartego schematu Eulera (3.4) jest obcięcie rozwinięcia szeregu Taylora rozwiązania:
|
xt+h=xt+dxdtth+12d2xdt2th2+… |
| (3.6) |
Zostawiamy tylko pierwsze dwa człony i otrzymujemy
|
xt+h≈xt+dxdtth=xt+fxt,th |
|
czyli wstawiając xn za przybliżenie xtn, a xn+1 za przybliżenie xtn+h=xtn+1
otrzymujemy znów otwarty schemat Eulera (3.4).
Analogicznie możemy wyprowadzić zamknięty schemat Eulera (3.5) rozwijając rozwiązanie w t dla h<0.
Jeszcze innym intuicyjnym wyprowadzeniem schematu otwartego Eulera jest
podążanie za
polem wektorowym.
Jak wiemy, wykresem rozwiązania równania różniczkowego jest
krzywa styczna do zadanego pola wektorowego ft,x spełniająca odpowiedni warunek początkowy.
Zatem znając rozwiązanie przybliżone dla tn tzn. mając xn, możemy wyznaczyć xn+1,
przybliżenie rozwiązania xtn+1, biorąc poprawkę w kierunku pola wektorowego tzn.:
Czyli znów otrzymujemy otwarty schemat Eulera.
Zadajmy pytanie, czy takie schematy są wystarczająco dokładne. Czy one działają stabilnie na dłuższych odcinkach czasu, na których istnieje rozwiązanie?
Sprawdźmy, co się dzieje dla modelowego zadania:
którego rozwiązaniem jest xt=eat.
Otwarty schemat Eulera daje nam ciąg:
|
xnh=xn-1+haxn-1=1+haxn-1=1+han. |
|
Ustalmy t=hn, czyli h=t/n. Wtedy
|
xnh=1+han=1+ta/nn→eatn→∞. |
|
Dla zamkniętego schematu Eulera otrzymujemy analogicznie:
czyli
|
xn=1-ha-1xn-1=1-ah-n=11-at/nn→1e-at=eat. |
|
Popatrzmy jak te dwa schematy działają (w praktyce) na wykresach dla a=1 i
x0=x0=1, por.
rysunki 3.1 - 3.4 dla
otwartego schematu Eulera
i rysunki 3.5 - 3.8 dla zamkniętego schematu Eulera.
Zauważmy, że wykres rozwiązania ze schematu Eulera otwartego jest poniżej
wykresu dokładnego rozwiązania, a dla schematu zamkniętego - powyżej, co widać lepiej na
rysunku 3.9.
Popatrzmy na przypadek dwuwymiarowy.
Weźmy modelowe zadanie wahadła. Dla małych prędkości możemy przyjąć, że sinx≈x,
stąd otrzymujemy równanie liniowe ze stałymi współczynnikami (zlinearyzowane równanie wahadła):
gdzie x to prędkość kątowa, a a=g/l>0 dla g wartości przyspieszenia
ziemskiego i l długości wahadła.
Zapisując to równanie jako układ dwóch równań pierwszego rzędu otrzymujemy:
Przyjmijmy, że a=1.
Znamy rozwiązania:
czyli trajektorie rozwiązania zawarte są w okręgach.
A teraz zastosujmy otwarty schemat Eulera do tego równania z warunkiem początkowym x0,y0T=0,1T, którego rozwiązaniem jest xt=sint z yt=cost:
|
xn+1=xn+hynyn+1=yn-hxnn=0,1,…,N |
|
dla ustalonego h>0 i T=Nh.
Zatem: xn≈xtn=sinnh, a yn≈ytn=cosnh z
x0=0 i y0=1
Dla zamkniętego schematu Eulera jest analogicznie:
|
xn+1=xn+hyn+1yn+1=yn-hxn+1n=0,1,…,N, |
|
czy równoważnie
|
xn+1-hyn+1=xnyn+1+hxn+1=ynn=0,1,…,N |
|
czyli w każdym kroku dla ustalonego n musimy rozwiązać układ dwóch równań liniowych.
Widać, że mimo małego kroku rzędu (h=1e-2) wyniki są wyraźnie gorsze niż
w przypadku skalarnym, mimo że wyjściowe równanie różniczkowe jest liniowe.
Rozważmy wyjściowe równanie wahadła, por. Przykład 2.5.
Znów przyjmijmy, że g=l i warunek początkowy x0=0 i y0=1.
Wtedy schematy Eulera przybierają odpowiednio formę:
schemat otwarty Eulera:
|
xn+1=xn+hynyn+1=yn+hsinxnn=0,1,…,N |
|
z x0=x0=0 i y0=y0=1.
Znając xn,yn otrzymujemy natychmiast wzór na xn+1,yn+1.
W przypadku schematu zamkniętego Eulera:
|
xn+1=xn+hyn+1yn+1=yn-hsinxn+1n=0,1,…,N |
|
z x0=x0=0 i y0=y0=1, musimy w każdym kroku rozwiązać układ równań nieliniowych:
|
xn+1-hyn+1=xnyn+1+hsinxn+1=ynn=0,1,…,N |
|
Im h jest bliższe zera, tym układ jest łatwiejszy do rozwiązania.
Można pokazać, że rozwiązanie wyjściowego równania ma trajektorie okresowe,
co potwierdza wykres na rysunku 3.15 (tu wyliczony przy pomocy dużo dokładniejszego schematu niż schematy Eulera).
W kolejnych rysunkach 3.10-
3.13 - prezentujemy przybliżone rozwiązania
dla nieliniowego równania wahadła, otrzymane przy pomocy obu schematów Eulera.
3.3.1. Absolutna stabilność schematów Eulera
Rozpatrzmy ponownie modelowe zadanie skalarne, ale na długich odcinkach czasu:
Rozwiązaniem jest xt=expat i wtedy limt→+∞xt=0. Im a większe, tym
rozwiązanie szybciej zbiega do zera.
Rozpatrzmy teraz zastosowanie otwartego i zamkniętego schematu Eulera do rozwiązania tego zagadnienia.
Dla otwartego schematu Eulera wiemy już, że:
Zauważmy, że przy ustalonym h ciąg przybliżeń xn jest dodatni i zbiega do zera dla n→+∞ o ile zachodzi warunek:
W przypadku gdy parametr a jest ujemny i o dużym module, warunek ten wymusza to, że musimy
wziąć bardzo małe h, aby otrzymać schematem otwartym Eulera rozwiązanie
przybliżone, które jest dodatnie i malejące do zera, czyli
zachowujące się jak rozwiązanie zagadnienia początkowego: expat.
Natomiast dla zamkniętego schematu Eulera widzimy, że:
Otrzymujemy wtedy, że dla dowolnego a<0 zachodzi
xn>0 i xn→0 dla n→+∞, czyli nie otrzymujemy żadnego ograniczenia na krok h, co jest istotne, jeśli chcemy rozwiązywać równanie na długim odcinku czasu.
Schemat zamknięty Eulera można uznać za lepszy od schematu otwartego dla tego
zagadnienia dla ujemnego a o bardzo dużym module, szczególnie na długim
odcinku czasu, ponieważ nie wymusza żadnych ograniczeń na krok h. Wrócimy do
tego problemu w następnych rozdziałach.
3.4. Zadania
Ćwiczenie 3.1
Czy rozwiązanie yx zagadnienia początkowego:
jest wyznaczone jednoznacznie? Znajdź wszystkie rozwiązania yx tego zagadnienia początkowego.
Wskazówka:
Jest to równanie o zmiennych rozdzielonych (autonomiczne) dydx=fygx z warunkiem początkowym
yx0=y0,
więc w postaci uwikłanej
rozwiązanie ma postać ∫y0y1/fydy=∫x0xgxdx.
Ćwiczenie 3.2 (laboratoryjne)
Zaimplementuj w octavie otwarty schemat Eulera i zastosuj go do równania:
na różnych odcinkach czasu np. 0,1 lub 0,10 i różnych wartości h np. h=1e-1,1e-2,1e-4.
Zmniejszając h sprawdź, czy ten schemat znajdzie rozwiązanie różne od zera.
Następnie weź przybliżenie startowe na poziomie błędu zaokrągleń np.
x0=10-16 i sprawdź, jakie schemat znajduje rozwiązania; w szczególności,
czy są one różne od zera.
Ćwiczenie 3.3
Rozpatrzmy równanie różniczkowe zwyczajne liniowe jednorodne rzędu n o stałych współczynnikach:
|
dnxdtnt+an-1dn-1xdtn-1t+…+a0xt=0. |
|
-
Poprzez podstawienie xkt=dkxdtk k=0,…,n-1 sprowadź to równanie
do równania liniowego jednorodnego ze stałą macierzą:
-
Znajdź wielomian charakterystyczny A oraz dla n=2 postać Jordana tej macierzy w zależności
od tego, jakie wartości własne ma A,
-
Przy założeniu, że A ma n jednokrotnych wartości własnych rzeczywistych, znajdź
eAt i dla n=2 znajdź rozwiązanie zadania początkowego dla tego
równania z
warunkami początkowymi:
dkxdtk0=bkk=0,…,n-1.
Ćwiczenie 3.4 (częściowo laboratoryjne)
Dla n=2 i macierzy A kolejno a,1;0,a, a,0;0,b, a,-b;b,a dla rożnych wartości parametrów a,b, np. a=1,b=10,
naszkicuj na kartce portrety fazowe (wykresy trajektorii) równania jednorodnego:
w otoczeniu zera. Naszkicuj pole wektorowe na ekranie korzystając z funkcji octave'a
quiver()
i portrety fazowe z pomocą funkcji lsode()
.
Ćwiczenie 3.5 (laboratoryjne)
Zaimplementuj w octavie otwarty schemat Eulera i zastosuj go do równania
dydx=ay z y0=1 dla różnych wartości parametru a np. a=-1e-3,-100,-1,1,10. Narysuj na monitorze wykresy przybliżonych rozwiązań razem z wykresem rozwiązania dokładnego yt=expat.
Ćwiczenie 3.6 (częściowo laboratoryjne)
Rozpatrzmy równanie dydx=-201-211y. Policz wartości własne macierzy A=-201-211 i porównaj z wynikiem obliczonym w octavie z użyciem odpowiedniej funkcji np. eig()
. Znajdź rozwiązanie ogólne tego równania.
Przy pomocy otwartego schematu Eulera i funkcji octave'a lsode()
rozwiąż to równanie z y0=1,1T na odcinku 0,100 z h=0.1. Porównaj wyniki rysując wykresy na ekranie obu rozwiązań i rozwiązania dokładnego, które należy też wyznaczyć.
Wskazówka:
Rozwiązanie ogólne - to expAtc, gdzie c wektor stałych a funkcja
expm()
octave'a pozwala obliczyć eksponent macierzy.
Ćwiczenie 3.7 (częściowo laboratoryjne)
Udowodnij, że przybliżenia rozwiązania układu równań dxdt=y;dydt=-x z x0=1,y0=0,
otrzymane za pomocą otwartego (lub zamkniętego) schematu Eulera, mają normę
drugą
zbieżną do jeden, tzn. xn2+yn2 zbiegają do jeden, dla ustalonego czasu t=nh z h dążącym do zera. Zaimplementuj oba schematy Eulera dla tego równania w octave (w przypadku zamkniętego schematu Eulera
użyj operatora backslash: \
w każdym kroku czasowym do rozwiązania odpowiedniego układu dwóch równań liniowych).
Naszkicuj na ekranie monitora portret fazowy przy pomocy plot()
, lsode()
i obu schematów dla różnych wartości h. Policz wartości normy drugiej rozwiązań otrzymanych przy pomocy tych schematów i lsode()
dla ustalonego czasu np. t=1 czy t=1000 i różnych wartości h.
Ćwiczenie 3.8 (laboratoryjne)
Naszkicuj na ekranie monitora portrety fazowe równań liniowych dydx=Ay=a,b;c,dy dla macierzy A o różnych postaciach Jordana przy pomocy plot()
, lsode()
.