Zagadnienia

3. Metody dla równań różniczkowych zwyczajnych

W tym i kilku następnych rozdziałach zajmiemy się schematami rozwiązywania równań różniczkowych zwyczajnych. Ten rozdział jest poświęcony wprowadzeniu najprostszych metod (schematów) rozwiązywania równań różniczkowych zwyczajnych.

3.1. Wprowadzenie

Załóżmy, że rozpatrujemy zagadnienie początkowe pierwszego rzędu (zagadnienie Cauchy'ego) :

dxdt=ft,xxt0=x0 (3.1)

gdzie GRm, f:a,b×GRm jest funkcją ciągłą, a t0a,b,x0G 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.

L0t,x,t,yBt0,x0,δft,x-ft,yLx-y,

to istnieje c>0 i xC1t0-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:

dxdt=Ax

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:

xt=eAt-t0x0,

gdzie eksponent od macierzy zdefiniowany jest wzorem

expB=eB=k=0Bkk!.

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ą:

VΛV-1=A

gdzie Λ - to macierz diagonalna z wartościami własnymi macierzy A na diagonali:

Λ=λ1λn.

Wtedy wiadomo, że

eAt=Veλ1teλntV-1.

W szczególności jeśli Reλk<0 dla wszystkich k=1,,n to każde rozwiązanie spełnia

limt+xt=0,

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

limt+xt=+.

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:

xt+h-xthdxdt

i otrzymujemy otwarty schemat Eulera:

xht+h-xhth=ft,xht

czy inaczej:

xht+h=xht+hft,xht

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ł:

xht-xht-hhdxdt

i wtedy zastępując pochodną przez taki iloraz otrzymujemy zamknięty schemat Eulera:

xht-xht-hh=ft,xht

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 xCkt0,T, w dyskretnych punktach czasu:

tntnh=t0+nhh>0.

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+hxt+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.:

xn+1=xn+hfxn,tn.

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:

dxdt=axx0=1,

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/nneatn.

Dla zamkniętego schematu Eulera otrzymujemy analogicznie:

xnh=xn-1h+haxnh,

czyli

xn=1-ha-1xn-1=1-ah-n=11-at/nn1e-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.

\
Rys. 3.1. Otwarty Euler - cztery punkty.
\
Rys. 3.2. Otwarty Euler - 10 punktów.
\
Rys. 3.3. Otwarty Euler - 100 punktów.
\
Rys. 3.4. Otwarty Euler - na [0,100], 100 punktów.
\
Rys. 3.5. Zamknięty Euler - cztery punkty.
\
Rys. 3.6. Zamknięty Euler - 10 punktów.
\
Rys. 3.7. Zamknięty Euler - 100 punktów.
\
Rys. 3.8. Zamknięty Euler - na [0,100], 100 punktów.

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.

\
Rys. 3.9. Schematy Euler - na [0,1], 20 punktów.

Popatrzmy na przypadek dwuwymiarowy. Weźmy modelowe zadanie wahadła. Dla małych prędkości możemy przyjąć, że sinxx, stąd otrzymujemy równanie liniowe ze stałymi współczynnikami (zlinearyzowane równanie wahadła):

d2xdt2=-ax,

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:

dxdt=ydydt=-ax.

Przyjmijmy, że a=1.

Znamy rozwiązania:

xt=c1sint+c2cost,

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: xnxtn=sinnh, a ynytn=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.

Popatrzmy teraz na rysunki 3.10 - 3.12.

\
Rys. 3.10. Schematy Eulera dla równania 2-wymiarowego - rozwiązanie.
\
Rys. 3.11. Schematy Eulera dla równania 2-wymiarowego - pochodna rozwiązania.
\
Rys. 3.12. Schematy Eulera dla równania 2-wymiarowego - trajektoria.

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.

\
Rys. 3.13. Schematy Eulera dla równania 2-wymiarowego - rozwiązanie.
\
Rys. 3.14. Schematy Eulera dla równania 2-wymiarowego - pochodna rozwiązania.
\
Rys. 3.15. Schematy Eulera dla równania 2-wymiarowego - trajektoria.

3.3.1. Absolutna stabilność schematów Eulera

Rozpatrzmy ponownie modelowe zadanie skalarne, ale na długich odcinkach czasu:

dxdt=ax,x0=1a<0.

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:

xn=1+ahn.

Zauważmy, że przy ustalonym h ciąg przybliżeń xn jest dodatni i zbiega do zera dla n+ o ile zachodzi warunek:

h<-1/a.

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:

xn=1-ah-n.

Otrzymujemy wtedy, że dla dowolnego a<0 zachodzi xn>0 i xn0 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:

dydx=x2/3y0=0.

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:

dydx=x2/3y0=0.

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.
  1. Poprzez podstawienie xkt=dkxdtk k=0,,n-1 sprowadź to równanie do równania liniowego jednorodnego ze stałą macierzą:

    dxdt=Ax,
  2. 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,

  3. 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:

dxdt=Ax

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().

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.