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.
Załóżmy, że rozpatrujemy zagadnienie początkowe pierwszego rzędu (zagadnienie Cauchy'ego) :
![]() |
(3.1) |
gdzie ,
jest funkcją ciągłą, a
jest ustalone.
Z ogólnej teorii równań różniczkowych, por. [23] wiadomo, że
Jeśli jest funkcją ciągłą na otoczeniu
, to istnieje rozwiązanie (3.1) określone na pewnym otoczeniu
.
Jeśli dodatkowo założymy, że jest funkcją lipschitzowska na otoczeniu
względem zmiennej
, to
możemy pokazać jednoznaczności rozwiązania, tzn. zachodzi twierdzenie:
Jeśli jest funkcją ciągłą na otoczeniu
oraz
jest funkcją lipschizowską względem
w pewnej kuli
, tzn.
![]() |
to istnieje i
takie, że
jest jednoznacznym rozwiązaniem (3.1).
Od tej pory będziemy przyjmować, że funkcja , 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
.
Zauważmy, że każde rozwiązanie jest krzywą styczną do pola wektorowego.
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 - to stała macierz
,
dla których znamy rozwiązania zadania Cauchy'ego:
![]() |
(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 można wypisać
postać
, w szczególności jeśli
macierz
jest diagonalizowalna,
tzn. istnieje baza wektorów własnych, które zapisane jako kolumny macierzy
dają:
![]() |
gdzie - to macierz diagonalna z wartościami własnymi macierzy
na diagonali:
![]() |
Wtedy wiadomo, że
![]() |
W szczególności jeśli dla wszystkich
to
każde rozwiązanie spełnia
![]() |
a z kolei jeśli istnieje takie, że
,
to istnieje rozwiązanie zagadnienia Cauchy'go z niezerowym warunkiem brzegowym, dla którego
![]() |
Załóżmy, że rozpatrujemy zadanie skalarne tzn. .
Chcemy w jakiś sposób przybliżyć rozwiązanie równania (3.1).
Przybliżamy pochodną poprzez iloraz różnicowy dla pewnego parametru
:
![]() |
i otrzymujemy otwarty schemat Eulera:
![]() |
czy inaczej:
![]() |
znając rozwiązanie w punkcie
możemy
wyznaczyć przybliżone rozwiązanie
w kolejnych punktach
z powyższego wzoru.
Ale można też przybliżyć pochodną biorąc parametr
w tył:
![]() |
i wtedy zastępując pochodną przez taki iloraz otrzymujemy zamknięty schemat Eulera:
![]() |
czy inaczej:
![]() |
Proszę zauważyć, że jeśli znamy rozwiązanie w punkcie , tzn.
, to aby wyznaczyć kolejne przybliżenia rozwiązania w punktach
należy rozwiązać
równania postaci:
![]() |
(3.3) |
względem , 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
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
na odcinku
, na którym
, w dyskretnych punktach czasu:
![]() |
Często będziemy opuszczali indeks , o ile to nie będzie powodowało niejasności.
Wartość rozwiązania w punkcie
, czyli
będzie przybliżana przez
, spełniające odpowiedni schemat.
Wygodnie jest też oznaczać
.
Górny indeks
będziemy często opuszczali, jeśli
będzie ustalone.
Tak więc otwarty schemat Eulera możemy zapisać jako:
![]() |
(3.4) |
a zamknięty schemat Eulera możemy zapisać jako:
![]() |
(3.5) |
Kolejnym wyprowadzeniem otwartego schematu Eulera (3.4) jest obcięcie rozwinięcia szeregu Taylora rozwiązania:
![]() |
(3.6) |
Zostawiamy tylko pierwsze dwa człony i otrzymujemy
![]() |
czyli wstawiając za przybliżenie
, a
za przybliżenie
otrzymujemy znów otwarty schemat Eulera (3.4).
Analogicznie możemy wyprowadzić zamknięty schemat Eulera (3.5) rozwijając rozwiązanie w
dla
.
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 spełniająca odpowiedni warunek początkowy.
Zatem znając rozwiązanie przybliżone dla
tzn. mając
, możemy wyznaczyć
,
przybliżenie rozwiązania
, 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 .
Otwarty schemat Eulera daje nam ciąg:
![]() |
Ustalmy , czyli
. Wtedy
![]() |
Dla zamkniętego schematu Eulera otrzymujemy analogicznie:
![]() |
czyli
![]() |
Popatrzmy jak te dwa schematy działają (w praktyce) na wykresach dla i
, 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 ,
stąd otrzymujemy równanie liniowe ze stałymi współczynnikami (zlinearyzowane równanie wahadła):
![]() |
gdzie to prędkość kątowa, a
dla
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 .
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 , którego rozwiązaniem jest
z
:
![]() |
dla ustalonego i
.
Zatem: , a
z
i
Dla zamkniętego schematu Eulera jest analogicznie:
![]() |
czy równoważnie
![]() |
czyli w każdym kroku dla ustalonego musimy rozwiązać układ dwóch równań liniowych.
Widać, że mimo małego kroku rzędu () 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 i warunek początkowy
i
.
Wtedy schematy Eulera przybierają odpowiednio formę:
schemat otwarty Eulera:
![]() |
z i
.
Znając
otrzymujemy natychmiast wzór na
.
W przypadku schematu zamkniętego Eulera:
![]() |
z i
, musimy w każdym kroku rozwiązać układ równań nieliniowych:
![]() |
Im 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.
Rozpatrzmy ponownie modelowe zadanie skalarne, ale na długich odcinkach czasu:
![]() |
Rozwiązaniem jest i wtedy
. Im
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 ciąg przybliżeń
jest dodatni i zbiega do zera dla
o ile zachodzi warunek:
![]() |
W przypadku gdy parametr jest ujemny i o dużym module, warunek ten wymusza to, że musimy
wziąć bardzo małe
, 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:
.
Natomiast dla zamkniętego schematu Eulera widzimy, że:
![]() |
Otrzymujemy wtedy, że dla dowolnego zachodzi
i
dla
, czyli nie otrzymujemy żadnego ograniczenia na krok
, 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 o bardzo dużym module, szczególnie na długim
odcinku czasu, ponieważ nie wymusza żadnych ograniczeń na krok
. Wrócimy do
tego problemu w następnych rozdziałach.
Czy rozwiązanie zagadnienia początkowego:
![]() |
jest wyznaczone jednoznacznie? Znajdź wszystkie rozwiązania tego zagadnienia początkowego.
Jest to równanie o zmiennych rozdzielonych (autonomiczne) z warunkiem początkowym
,
więc w postaci uwikłanej
rozwiązanie ma postać
.
Zaimplementuj w octavie otwarty schemat Eulera i zastosuj go do równania:
![]() |
na różnych odcinkach czasu np. lub
i różnych wartości
np.
.
Zmniejszając
sprawdź, czy ten schemat znajdzie rozwiązanie różne od zera.
Następnie weź przybliżenie startowe na poziomie błędu zaokrągleń np.
i sprawdź, jakie schemat znajduje rozwiązania; w szczególności,
czy są one różne od zera.
Rozpatrzmy równanie różniczkowe zwyczajne liniowe jednorodne rzędu o stałych współczynnikach:
![]() |
Poprzez podstawienie
sprowadź to równanie
do równania liniowego jednorodnego ze stałą macierzą:
![]() |
Znajdź wielomian charakterystyczny oraz dla
postać Jordana tej macierzy w zależności
od tego, jakie wartości własne ma
,
Przy założeniu, że ma
jednokrotnych wartości własnych rzeczywistych, znajdź
i dla
znajdź rozwiązanie zadania początkowego dla tego
równania z
warunkami początkowymi:
Dla i macierzy
kolejno
,
,
dla rożnych wartości parametrów
, np.
,
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()
.
Zaimplementuj w octavie otwarty schemat Eulera i zastosuj go do równania
z
dla różnych wartości parametru
np.
. Narysuj na monitorze wykresy przybliżonych rozwiązań razem z wykresem rozwiązania dokładnego
.
Rozpatrzmy równanie . Policz wartości własne macierzy
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 na odcinku
z
. Porównaj wyniki rysując wykresy na ekranie obu rozwiązań i rozwiązania dokładnego, które należy też wyznaczyć.
Rozwiązanie ogólne - to , gdzie
wektor stałych a funkcja
expm()
octave'a pozwala obliczyć eksponent macierzy.
Udowodnij, że przybliżenia rozwiązania układu równań z
,
otrzymane za pomocą otwartego (lub zamkniętego) schematu Eulera, mają normę
drugą
zbieżną do jeden, tzn.
zbiegają do jeden, dla ustalonego czasu
z
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 . Policz wartości normy drugiej rozwiązań otrzymanych przy pomocy tych schematów i
lsode()
dla ustalonego czasu np. czy
i różnych wartości
.
Naszkicuj na ekranie monitora portrety fazowe równań liniowych dla macierzy
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.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i
Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
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.