21
Numeryczne rozwiązywanie równań żniczkowych Równanie różniczkowe jest to równanie, w którym występuje pochodna (czyli różniczka). Przykladem najprostszego równania różniczkowego może być: ' 2 y x = które można też zapisać jako: 2 dy x dx = Powyższa forma zapisu jest o tyle lepsza, że informuje względem jakiej zmiennej zachodzi żniczkowanie, co jest istotne w przypadku równań zawierających wiele zmiennych. Oczywiście, jak wiadomo, funkcją pierwotną do 2x jest x 2 , czyli (x 2 )’=2x. W rzeczywistości pelne rozwiązanie ma postać: y = 2x + C, gdzie C jest nieznaną stalą, której pochodna po prostu jest równa 0. Aby dowiedzieć się, jaka jest wartość C, musimy , oprócz samej różniczki, znać również tzw. warunek brzegowy (zwany niekiedy warunkiem początkowym), czyli rozwiązanie równania dla określonej wartości x, np. jeżeli wiemy, że dla x = 0 y = 8 (czyli y(0) = 8), to oczywiście C = 8. Pelny zapis powyższego równania różniczkowego będzie mial w takim razie postać: 2 (0) 8 dy x dx y = = Rozwiązaniem tego równania będzie funkcja y = x 2 + 8. Pamiętajmy, że w treści zadania zawsze musi być podany warunek brzegowy, w przeciwnym przypadku zadanie jest nierozwiązywalne. Ogólna postać równania różniczkowego (do której zawsze należy dążyć, odpowiednio przeksztalcając badane równanie) jest następująca: ( 29 0 0 (, ) dy fxy dx yx y = = Jak więc widzimy, rozwiązaniem równania różniczkowego nie jest pojedyncza liczba (jak bylo w przypadku calkowania) lecz funkcja y(x). Istnieją metody analitycznego rozwiązywania równań żniczkowych, jednak jest to zwykle dosyć zlożone, a niekiedy niemożliwe. Przy pomocy arkusza kalkulacyjnego możemy numerycznie wyznaczyć rozwiązanie równania różniczkowego w postaci tabeli x, y oraz wykresu y(x). Metody numeryczne rozwiązywania równań żniczkowych oparte są na interpretacji geometrycznej równania różniczkowego. Najprostszą z nich jest metoda Eulera. Zakladamy, że kolejne punkty rozwiązania oddalone są od siebie na osi x co krok h, a na osi y co y: 1 n n x x h + = + Z definicji pochodnej (jako tangens kąta nachylenia stycznej) wiemy, że: y y h ′= czyli: ( 29 , n n y f x y y h = = Po przeksztalceniu: ( , n n y h f x y = Ponieważ szukamy wzoru na następne y, to do wzoru 1 n n y y y + = +∆ podstawiamy wyżej wyliczone y i otrzymujemy ostatecznie: ( 1 , n n n n y y h f x y + = + Zauważmy, że dla bardzo malych wartości h (odpowiadającej różniczce dx) równanie to jest równoważne równaniu, będącego efektem calkowania równania podstawowego:

Numeryczne rozwi ązywanie równa niczkowychvistula.pk.edu.pl/~sciezor/Kurs_TI_XP/Excel2_lekcja_4.pdf · Metody numeryczne rozwi ązywania równa ń ró żniczkowych oparte s ą na

  • Upload
    danganh

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

Numeryczne rozwiązywanie równań różniczkowych

Równanie różniczkowe jest to równanie, w którym występuje pochodna (czyli różniczka). Przykładem najprostszego równania różniczkowego może być:

' 2y x= które można też zapisać jako:

2dy

xdx

=

Powyższa forma zapisu jest o tyle lepsza, że informuje względem jakiej zmiennej zachodzi różniczkowanie, co jest istotne w przypadku równań zawierających wiele zmiennych. Oczywiście, jak wiadomo, funkcją pierwotną do 2x jest x2, czyli (x2)’=2x. W rzeczywistości pełne rozwiązanie ma postać: y = 2x + C, gdzie C jest nieznaną stałą, której pochodna po prostu jest równa 0. Aby dowiedzieć się, jaka jest wartość C, musimy, oprócz samej różniczki, znać również tzw. warunek brzegowy (zwany niekiedy warunkiem początkowym), czyli rozwiązanie równania dla określonej wartości x, np. jeżeli wiemy, że dla x = 0 y = 8 (czyli y(0) = 8), to oczywiście C = 8. Pełny zapis powyższego równania różniczkowego będzie miał w takim razie postać:

2

(0) 8

dyx

dxy

= =

Rozwiązaniem tego równania będzie funkcja y = x2 + 8. Pamiętajmy, że w treści zadania zawsze musi być podany warunek brzegowy, w przeciwnym przypadku zadanie jest nierozwiązywalne. Ogólna postać równania różniczkowego (do której zawsze należy dążyć, odpowiednio przekształcając badane równanie) jest następująca:

( )0 0

( , )dy

f x ydxy x y

= =

Jak więc widzimy, rozwiązaniem równania różniczkowego nie jest pojedyncza liczba (jak było w przypadku całkowania) lecz funkcja y(x). Istnieją metody analitycznego rozwiązywania równań różniczkowych, jednak jest to zwykle dosyć złożone, a niekiedy niemożliwe. Przy pomocy arkusza kalkulacyjnego możemy numerycznie wyznaczyć rozwiązanie równania różniczkowego w postaci tabeli x, y oraz wykresu y(x). Metody numeryczne rozwiązywania równań różniczkowych oparte są na interpretacji geometrycznej równania różniczkowego. Najprostszą z nich jest metoda Eulera. Zakładamy, że kolejne punkty rozwiązania oddalone są od siebie na osi x co krok h, a na osi y co ∆y:

1n nx x h+ = +

Z definicji pochodnej (jako tangens kąta nachylenia stycznej) wiemy, że: y

yh

∆′ =

czyli:

( ),n n

yf x y y

h

∆′= =

Po przekształceniu:

( ),n ny h f x y∆ = ⋅

Ponieważ szukamy wzoru na następne y, to do wzoru 1n ny y y+ = + ∆ podstawiamy wyżej wyliczone ∆y

i otrzymujemy ostatecznie:

( )1 ,n n n ny y h f x y+ = + ⋅

Zauważmy, że dla bardzo małych wartości h (odpowiadającej różniczce dx) równanie to jest równoważne równaniu, będącego efektem całkowania równania podstawowego:

( )1

1 ,n

n

x

n n n n

x

y y f x y dx+

+ = + ∫

Oczywiście widoczna w tym równaniu całka jest równa polu pod wykresem funkcji, przy założeniu h = dx będącego polem prostokąta ograniczonego wartościami xn i xn+1. Jest to powód, dla którego niekiedy metodę Eulera nazywa się metodą prostokątów. Wyżej opisaną metodę Eulera zaimplementujemy w arkuszu kalkulacyjnym. Rozwiążemy przy jej pomocy przykładowe równanie:

( )0 1

dyxy

dxy

= =

Równanie to ma tę zaletę, że posiada rozwiązanie analityczne i jest ono równe: 2

2

x

y e= , co umożliwi sprawdzenie wyniku, otrzymanego metodą numeryczną. Przede wszystkim należy sporządzić tabelę wartości x, gdzie pierwszą wartością będzie wartość początkowa x (w naszym przykładzie 0), a kolejne będą następowały co krok h. Ilość kroków nie jest określona – od nas zależy, jak długo chcemy badać analizowane równanie. Należy jednak pamiętać, że krok ten musi być możliwie jak najmniejszy (oczywiście w granicach rozsądku). Jeżeli np. rozwiązywane równanie różniczkowe opisuje zjawisko trwające godzinę, to narzucającą się wartością h jest 1 sekunda (czyli co sekundę nadamy stan zjawiska). W naszym przykładzie wybieramy krok h = 0,1, natomiast zbadamy rozwiązanie do wartości x = 1 (nie zapomnijmy o nadaniu wartości zmiennej h). Często jako pierwsza kolumnę podaje się tzw. iterację (i), czyli numerację kolejnych kroków rozwiązania, przy czym pierwsza iteracja jest to tzw. iteracja zerowa – obejmuje ona opis podanych w problemie warunków początkowych (brzegowych).

Następnie wpisujemy, znaną z warunku brzegowego, wartość rozwiązania y w iteracji zerowej (dla x=0 jest ona równa 1, gdyż y(0)=1):

W kolejnej kolumnie (nazwijmy ją Euler) wpisujemy wartość członu Eulera, czyli iloczyn kroku h i funkcji, a w tym przykładzie f(x,y)=x·y, czyli w zerowej iteracji:

Następnie, zgodnie z wzorem Eulera, obliczamy kolejną wartość y (w pierwszej iteracji), równą sumie poprzedniej wartości y i odpowiadającego jej członu Eulera:

W efekcie otrzymujemy:

Musimy teraz policzyć człon Eulera dla pierwszej iteracji. Można oczywiście wpisać formułę =h*C7*D7, jednak można zastosować tutaj adresowanie względne, czyli skopiować formułę z komórki E6 do komórki E7 – będzie ona teraz dotyczyła wartości x i y z pierwszej iteracji:

Jedyne, co nam teraz pozostało, to powielić parę komórek y,Euler dla wszystkich iteracji:

Rozwiązaniem jest oczywiście kolumna y, tak więc graficznym rozwiązaniem będzie wykres y(x):

Metoda Eulera nie jest jednak metodą dokładną, co wynika chociażby z przybliżania pola całkowania prostokątami. Znacznie dokładniejsze są metody, gdzie kolejna wartość y przewidywana jest na podstawie ekstrapolacji stycznej do aktualnie analizowanego odcinka krzywej y(x). Metody te nazywamy metodami Rungego-Kutty. Poniżej zostanie opisana implementacja metody Rungego-Kutty czwartego rzędu (RK4). W metodzie RK4 kolejna wartość y podana jest wzorem:

( )1 1 2 3 4

12 2

6n ny y k k k k+ = + ⋅ + ⋅ + ⋅ +

gdzie czlony k1, k2, k3 i k4 (tzw. współczynniki Rungego-Kutty) dane są wzorami: ( )

( )

1

2 1

3 2

4 3

,

1 1,

2 2

1 1,

2 2

,

n n

n n

n n

n n

k h f x y

k h f x h y k

k h f x h y k

k h f x h y k

= ⋅

= ⋅ + ⋅ + ⋅

= ⋅ + ⋅ + ⋅

= ⋅ + +

Argumenty funkcji f należy rozumieć w sensie jej parametryzacji, np. gdy: ( ), sin cosf x y x y= ⋅

to:

( ) ( )

1

2 1

3 2

4 3

sin cos

1 1sin cos

2 2

1 1sin cos

2 2

sin cos

k x y

k x h y k

k x h y k

k x h y k

= ⋅

= + ⋅ ⋅ + ⋅

= + ⋅ ⋅ + ⋅

= + ⋅ +

Poniżej zostanie ponownie wyznaczone rozwiązanie równania (tego samego, które rozwiązałem wcześniej metodą Eulera):

( )0 1

dyxy

dxy

= =

tym razem metodą Rungego-Kutty. Aby móc porównać rozwiązania, wyznaczone obiema metodami, wykorzystam uprzednią tabelę danych, w szczególności kolumnę x. Kolumnę y, wyznaczoną metodą Eulera, nazwę yE, kolumnę y, wyznaczoną metodą Rungego-Kutty, nazwę yRK. Oczywiście w iteracji zerowej yRK wpisujemy warunek brzegowy wartości y w tym zadaniu, czyli 1.

Następnie kolejno wyliczamy wartości współczynników RK w iteracji zerowej dla f(x,y)=x·y. Wartość k1:

Wartość k2:

Wartość k3:

Wartość k4:

W efekcie otrzymujemy wypełnioną iterację zerową:

W kolejnym kroku wyliczamy wartość yRK dla pierwszej iteracji:

i w rezultacie:

Teraz oczywiście należałoby policzyć współczynniki RK dla pierwszej iteracji. Skorzystajmy jednak po prostu z adresowania względnego i powielmy komórki G6:J6 w wierszu 7, „wyrównując” szereg…

…a potem już pozostaje tylko powielić cały szereg F7:J7 do wszystkich iteracji…

…i w kolumnie yRK znajdziemy rozwiązanie analizowanego równania różniczkowego.

Jak widać, wyniki otrzymane metodą Eulera i metodą Rungego-Kutty są do siebie podobne, aby jednak podobieństwo to stało się wyraźniejsze (i aby dokończyć rozwiązywania równania), do poprzedniego wykresu, przedstawiającego yE(x) dodamy serię yRH(x):

Wyraźnie widoczne jest podobieństwo obu krzywych. Wiemy, że metoda Eulera jest bardzo przybliżona. Na ile jednak dokładna jest metoda Rungego-Kutty? Jak już wspomniałem, przykładowe równanie ma dokładne rozwiązanie analityczne, które można porównać z rozwiązaniami otrzymanymi metodą numeryczną:

Jak widać, wartości otrzymane metodą RK są praktycznie identyczne z wartościami otrzymanymi metodą analityczną. Oznacza to, że jeśli chcemy zależy nam na dokładności obliczeń, powinniśmy używać metody Rungego-Kutty, jeśli natomiast chcemy np. jedynie określić trend zjawiska, wtedy można otrzymać szybkie rozwiązanie metodą Eulera, oczywiście przy odpowiednio małym kroku h. Zalecam rozwiązywanie równań różniczkowych obiema metodami – wyniki muszą być podobne, co pozwala na ich wzajemną samokontrolę. Z przykładem rozwiązania równania różniczkowego można zapoznać się na stronie: http://vistula.pk.edu.pl/~sciezor/calkowanie.xls

Numeryczne rozwiązywanie układów równań różniczkowych i równań różniczkowych drugiego rzędu

Jak dotąd opisałem metody rozwiązywania równań różniczkowych pierwszego rzędu, czyli równań zawierających pierwszą pochodną zmiennej. Często jednak trzeba rozwiązać układ równań różniczkowych lub równanie różniczkowe drugiego rzędu (czyli zawierające drugą pochodną zmiennej). W rzeczywistości te dwa zagadnienia stanowią ten sam problem, gdyż każde równanie różniczkowe drugiego rzędu można sprowadzić do układu dwóch równań różniczkowych pierwszego rzędu. W przypadku, gdy mamy układ równań różniczkowych pierwszego rzędu:

( )( )

, ,

, ,

y g x y z

u f x y z

′ = ′ =

formuły Rungego-Kutty mają następującą postać:

( )

( )

1 1 2 3 4

1 1 2 3 4

12 2

61

2 26

n n

n n

y y k k k k

u u q q q q

+

+

= + ⋅ + ⋅ + ⋅ + = + ⋅ + ⋅ + ⋅ +

gdzie:

( )( )

1

1

, ,

, ,

n n n

n n n

k h g x y u

q h f x y u

= ⋅

= ⋅

2 1 1

2 1 1

1 1 1, ,

2 2 2

1 1 1, ,

2 2 2

n n n

n n n

k h g x h y k u q

q h f x h y k u q

= ⋅ + ⋅ + ⋅ + ⋅

= ⋅ + ⋅ + ⋅ + ⋅

3 2 2

3 2 2

1 1 1, ,

2 2 2

1 1 1, ,

2 2 2

n n n

n n n

k h g x h y k u q

q h f x h y k u q

= ⋅ + ⋅ + ⋅ + ⋅

= ⋅ + ⋅ + ⋅ + ⋅

( )( )

4 3 3

4 3 3

, ,

, ,

n n n

n n n

k h g x h y k u q

q h f x h y k u q

= ⋅ + + +

= ⋅ + + +

W przypadku równań różniczkowych drugiego rzędu dokonujemy podstawienia y’=u, dzięki któremu równanie różniczkowe drugiego rzędu staje się układem równań różniczkowych pierwszego rzędu:

y u

u a u b y c

′ = ′ = ⋅ + ⋅ +

W tym przypadku powyższe wzory na współczynniki k upraszczają się i przyjmują postać (współczynniki q wylicza się, niestety, z powyższych wzorów):

( )

1

2 1

3 2

4 3

1

2

1

2

n

n

n

n

k h u

k h u q

k h u q

k h u q

= ⋅

= ⋅ + ⋅

= ⋅ + ⋅

= ⋅ +

Przykład 1:

( )( )

sin

0 0

0 0

y y y x

y

y

′′ ′+ + =

= ′ =

Zauważmy, że w przypadku równań różniczkowych drugiego rzędu podaje się dwa warunki brzegowe: jeden dotyczący samej wartości y, drugi dotyczący jej pierwszej pochodnej! Pamiętajmy również, że rozwiązaniem równania różniczkowego drugiego rzędu są dwie zależności: y(x) oraz y’(x). Aby móc rozwiązać powyższe równanie, musimy poprzez wprowadzenie parametru u zamienić je na układ dwóch równań różniczkowych pierwszego rzędu:

sin

y u

u x y u

′ = ′ = − −

Układ ten rozwiążemy przy kroku hm równym 0,1 aż do wartości x równej 2:

Jako wartości współczynników RK wpisujemy:

Dla k1:

Dla q1:

Dla k2:

Dla q2:

Dla k3:

Dla q3:

Dla k4:

Dla q4:

Gdy mamy policzone już wszystkie współczynniki RK w zerowej iteracji, możemy przejść do wypełniania pierwszej iteracji.

Obliczamy kolejną wartość y…

…oraz kolejną wartość y’ (czyli u):

Teraz obliczamy wartości współczynników RK dla pierwszej iteracji, oczywiście wykorzystując adresowanie względne (kopiujemy szereg komórek F5:M5 do wiersza 6):

Na koniec powielamy cały szereg D5:M5 do wszystkich iteracji:

Powinniśmy jeszcze przedstawić otrzymane zależności y(x) i y’(x) w postaci wykresów:

Z opisywanym przykładem rozwiązania równania różniczkowego można zapoznać się na stronie: http://vistula.pk.edu.pl/~sciezor/rozniczka2.xls w zakładce Przykład 1

Przykład 2 (wahadło fizyczne): Poniższe równanie opisuje ruch wahadła fizycznego w czasie.

( )( )

2

2sin 0

0 0,8

0 0

d g

dt Lt

t

θ θ

θθ

+ =

= = ′ = =

gdzie: θ – kąt wychylenia wahadła [radiany] θ’ – prędkość kątowa ruchu wahadła [radiany/s] t – czas [s] L – długość wahadła [m] = 0,75 m g – przyspieszenie ziemskie = 9,81 m/s2 Aby móc rozwiązać powyższe równanie, przekształcamy je w układ równań:

sin

u

gu

L

θ

θ

′ = ′ = − ⋅

Po wykonaniu analogicznych, jak w Przykładzie 1 obliczeń, otrzymamy: Wychylenie wahadła w funkcji czasu:

Prędkość kątowa wahadła w funkcji czasu:

Tym razem nie podaję tu pełnej ścieżki rozwiązania – proszę spróbować samemu. Z opisywanym przykładem rozwiązania równania różniczkowego można zapoznać się na stronie: http://vistula.pk.edu.pl/~sciezor/rozniczka2.xls w zakładce wahadło

Przykład 3 (drgania tłumione sprężyny) Poniższe równanie opisuje drgania tłumione sprężyny.

( )( )

2202

2 0

0 1

0 0

d x dxx

dt dtx t

x t

β ω+ + =

= = ′ = =

gdzie: x – rozciągnięcie sprężyny [m] x’ – prędkość ruchu sprężyny [m/s] β – współczynnik tłumienia = 1,8 ω0 – częstotliwość drgań własnych [1/s] = 10 Tym razem nie będzie podpowiedzi. Radzę rozwiązać – poprawność rozwiązania każdy powinien rozpoznać na podstawie poniższych wykresów. Widać, że sprężyna przestanie drgać po ok. 4 s (radzę wziąć mały krok próbkowania: h=0,01).