Szereg Taylora — Praktycznie

Rozwijanie funkcji w szereg Taylora to chleb powszedni dla fizyków teoretyków. Tymczasem, umiejętność rozwinięcia funkcji w szereg przydaje się też w numeryce, w szczególności w symulacjach komputerowych. W tym krótkim artykule opiszę jak rozwijać funkcje w szereg. Oczywiście zrobię to tak jak lubię — praktycznie. Pokażę też co z tego wynika dla symulacji komputerowych. Wprowadzę też metodę Eulera jako przykład praktycznej aplikacji.

Niniejszy artykuł jest częścią materiałów przygotowywanych na potrzeby kursu Modelowania Fizycznego w Animacji Komputerowej przygotowywanego dla kierunku Informatyki Stosowanej i Systemów Pomiarowych na Wydziale Fizyki i Astronomii Uniwersytetu Wrocławskiego.

Teoria

Szereg Taylora to wielomian, który przybliża naszą funkcję w bliskim otoczeniu. Tylko tyle i aż tyle, bo za tym prostym stwierdzeniem stoi cały aparat matematyczny związany z pochodnymi, szeregami, nieskończonością itp. itd. Ważne jest, aby zrozumieć, że przybliżenie to dotyczy dowolnego punktu x, a nie tylko jednego konkretnego i wyróżnionego punktu. Czyli wzór, który normalnie widzimy w książkach jest bardzo ogólny i opisuje funkcję jako całość.

Podaję wzór z którym będziemy pracować (Wikipedia):

Praktyka

Przybliżymy teraz funkcję z użyciem szeregu Taylora. Przykładową funkcją niech będzie coś prostego, ale ładnego —na przykład funkcja sinus z wygaszeniem: f(x) = sin(x)*exp(-x)

Funkcja jest narysowana po lewej stronie.

Kolejne pochodne funkcji będą potrzebne do rozwinięcia w szereg. Ograniczymy się do dwóch wyrazów, użyjemy pakietu Mathematica [1,2].

Pierwsza pochodna — f ’(x) = e^(-x) (cos(x) — sin(x))
Druga pochodna — f ’’(x) = -2 e^(-x) cos(x)

Możemy teraz zapisać rozwinięcie w szereg wokoło x=π dla jednego wyrazu:

  • ft1(x) = f(pi) + (x-π)*f ’(π)

rozwinięcie w szereg wokoło x=π dla dwóch wyrazów

  • ft2(x) = f(pi) + (x-π)*f ’(π) + (x-π)²/2*f ’’(π)

To można kontynuować dalej, jaki wpływ ma to na wyniki przybliżenia — spójrz do sekcji wyniki.

Wyniki

Przedstawiam kolejne przybliżenia funkcji f(x) z użyciem szeregu Taylora. Takie coś łatwo wykonać korzystając z Wolfram Alpha do różniczkowania i z GnuPlot-a do rysowania funkcji. Polecam, aby wykonać to ćwiczenie samodzielnie. To jedyny sposób aby naprawdę zrozumieć o co chodzi.

Przybliżenie funkcji f(x) szeregiem Taylora wokoło punktu x=π dla jednego wyrazu szeregu.

Rysunek 1. Przybliżenie liniowe funkcji w punkcie x=π, jest to rozwinięcie funkcji wokoło tego punktu do 1. wyrazu szeregu Taylora.

Przybliżenie funkcji f(x) szeregiem Taylora wokoło punktu x=π dla dwóch wyrazów szeregu:

Rysunek 2. Przybliżenie kwadratowe funkcji w punkcie x=π, jest to rozwinięcie funkcji wokoło tego punktu do 2. wyrazu szeregu Taylora.

Okazuje się, że “bliskie otoczenie” wcale nie musi być takie bliskie, przybliżenie Taylora naszej funkcji do 5-go wyrazu szeregu daje naprawdę świetną zgodność:

Rysunek 1. Przybliżenie funkcji w punkcie x=π, jest to rozwinięcie funkcji wokoło tego punktu do 5. wyrazu szeregu Taylora.

Aby wyznaczyć powyższe przybliżenie należy wyznaczyć kolejne pochodne (my pokazaliśmy tylko do 5-go wyrazu), a następnie wyliczyć kolejne 5 wyrazów szeregu wg podanego wzoru, co pozostawiam czytelnikom jako ćwiczenie. W ogóle polecam zrobić sobie całą tą analizę samodzielnie dla własnej, wybranej funkcji…

Po co to wszystko?

Załóżmy, że znamy wartość funkcji w jakimś specyficznym punkcie. Niech to będzie pozycja piłki odbijającej się od Ziemii. Jeśli znamy jej pozycję w danej chwili możemy przybliżyć jej kolejną pozycję (lub poprzednią) z użyciem rozwinięcia w szereg, czyli sprowadzić wzór analityczny opisujący tor ruchu do uproszczonego wzoru opisującego jego kolejny ruch. Stąd dzieli nas już tylko krok od najbardziej podstawowej metody całkowania — metody liniowej Eulera.

Niech funkcja położenia piłki oznaczona jest jako p(t), czyli położenie w czasie. Nie musimy znać jej jawnej postaci, bo z fizyki wiemy, że pierwsza pochodna to prędkość (v), a druga pochodna to przyspieszenie (tu będzie ono stałe i będzie to grawitacja g).

Jeśli czas jest dyskretny, czyli różnica między dwoma krokami wynosi t1-t0=dt, możemy rozwinąć położenie wokoło punktu t0 po to, aby wykonać krok symulacji. Zgodnie z naszymi oznaczeniami niech a=t0, x=t0+dt, wtedy rozwinięcie wokoło punktu t0 wynosi [3]:

p(t1)=p(t0+dt)=p(t0) + dt * p’ (t0) + dt² * p’’ (t0)

Podstawiając nasze wzory fizyczne:

p ’ (t0) = v(t0)
p ’’ (t0) = g

Dostajemy wzór na przyspieszenie ruch piłki w polu grawitacyjnym:

p(t0+dt) = p(t0) + v*dt + g*dt²/2

Niesamowite jest to, że ze względu na fizykę zagadnienia, przybliżony szereg Taylora stał się dokładnym rozwiązaniem tego zagadnienia.

Metoda Eulera

Metoda Eulera jest najprostszą metodą pozwalającą na numeryczne całkowanie równań ruchu. Jest to metoda pierwszego rzędu, czyli taka, która przybliża szukane rozwiązanie w sposób liniowy. Spójrz na Rysunek 1 — on właśnie pokazuje jak słabe jest to przybliżenie! Dlaczego zatem się nią zajmujemy? Bo w praktyce często nawet tak słabe przybliżenie jest wystarczające i z pomocą tej prostej metody możemy wykonać swoje pierwsze symulacje.

Zagadnieniem, które chcemy rozwiązać jest rozwiązanie równania ruchu dla piłki w polu grawitacyjnym. Zagadnienie chcemy rozwiązać numerycznie, bo piłka będzie się np. odbijać od podłoża, czego nie opisze nasz prosty wzór analityczny. Dodatnie dodatkowych sił (np. oporu, sprężyn) dla piłki też będzie możliwe tylko numerycznie.

Naszym równaniem ruchu będzie:

d²y/dt² = g

Równanie to najpierw “przygotujemy” matematycznie, czyli rozbijemy na dwa równania 1-go rzędu:

  • y’ = dy/dt = v (prędkość)
  • v’ = dv/dt = g (przyspieszenie, masa = 1 i przyjęliśmy F=g)

Nasza procedura jest krokowa, znając rozwiązanie w czasie t0 chcemy znaleźć rozwiązanie w czasie t1=t0+dt. Dlatego rozwiniemy teraz prędkość w szereg Taylora z dokładnością do drugiego wyrazu wokoło t1:

  • v(t0+dt)=v(t0) + v’ * dt =v(t0) + g * dt

Podobnie rozwinąć możemy położenie y. Tu zastosujemy rozwinięcie do 1-go wyrazu szeregu Taylora:

  • y(t0+dt) = y(t0) + y’(t0) * dt = y(t0)+v(t0)*dt

Z tego rozwinięcia możemy wyznaczyć naszą pochodną z dokładnością do 1-go wyraz rozwinięcia w szereg:

  • y’ = y(t0+dt)-y(t0) / dt

Kompletny algorytm dla numeryczny dla symulacji z użyciem metody Eulera będzie wyglądał następująco:

  1. Inicjalizuj pozycję y(0) i prędkość v(0)
  2. Pętla obliczeniowa:
  3. y=y+v*dt
  4. v=v+g*dt
  5. Jeśli y < 0 wykonaj v= -v (odbicie)
  6. Narysuj piłkę.
  7. Wróć do punktu 2.

Zauważ, że algorytm jest bardzo prosty.

Zauważ, że w punkcie 5. wykonaliśmy bardzo uproszczoną procedurę obsługi kolizji, która nie jest dokładna. Na tą chwilę nam ona jednak wystarczy.

Poniżej aplikacja w HTML5, która realizuje powyższy algorytm dla piłki odbijającej się od podłoża.

Zadania do samodzielnego wykonania

  1. Wykonaj przybliżenie dla 1,2 i 5 wyrazów dla dowolnej (innej niż w tym artykule) funkcji.
  2. Do powyższego programu dopisz całkowanie ruchu w kierunku poziomym z odbiciami od brzegów.
  3. Dodaj siłę oporu aerodynamicznego zgodnie z formułą Stokes’a dla kuli: https://pl.wikipedia.org/wiki/Op%C3%B3r_aero(hydro)dynamiczny
    Wykonaj kilka symulacji dla różnych współczynników oporu (lub różnych lepkości płynu).
Oferuję pomoc w wykonaniu ww zadań: maciej.matyka@uwr.edu.pl
Zapraszam na moje strony WWW:
Strona domowa: http://panoramix.ift.uni.wroc.pl/~maq/
Strona na uczelni: http://www.ift.uni.wroc.pl/~maq/
Kanał YouTube: https://www.youtube.com/user/maqflp
Strona FB: https://www.facebook.com/ComputerSimulations/
Twitter: https://twitter.com/maqpl

Odnośniki

[1] https://www.wolframalpha.com/input/?i=derivative+of+f(x)%3Dsin(x)*exp(-x)

[2] https://www.wolframalpha.com/input/?i=derivative+of+f(x)+%3D+e%5E(-x)+(cos(x)+-+sin(x))

[3] Matulewski Jacek, Dziubak Tomasz, Sylwestrzak Marcin, Płoszajczak Radosław, Grafika — Fizyka — Metody numeryczne. Symulacje fizyczne z wizualizacją 3D, PWN 2010