Od okresowości do aproksymacji funkcji

Praca na konkurs "Zobaczyć Matematykę"
Autor:
Szymon Piechaczek kl. IIIe
I Liceum Ogólnokształcące im. A. Osuchowskiego w Cieszynie

Okresowość

Oto wykres funkcji sinus. Tę funkcję trygonometryczną zna każdy, kto skończył szkołę średnią. Nie wydaje się ona być szczególnie skomplikowana jednak jest doskonałym tematem na wprowadzenie do bardziej skomplikowanych zagadnień jako elementarny wręcz przykład funkcji okresowej.

f ( x ) = sinx f( x ) = sinx

Czym jednak jest tak dokładnie funkcja okresowa? Definicja kształtuje się tak:

Jest to funkcja f(x), dla której istnieje taka stała T o następującej własności:
f ( x ) = f ( x + kT ) k C f( x ) = f( x + kT ) ~k in C

Tłumacząc - jest to po prostu funkcja, której wartości powtarzają się co pewną stałą T nazywaną powszechnie okresem. W przypadku funkcji sinus łatwo dostrzec jej okresowość na wykresie stworzonym przy użyciu okręgu jednostkowego (animacja obok). Cosinus natomiast jest funkcją "przesuniętą" w stosunku do sinusa (porównanie obu funkcji obok).

g ( x ) = sin ( x ) h ( x ) = cos ( x ) = sin ( x + π 2 ) g( x )=sin(x) ~~ h( x )=cos(x)= sin( x + {%ipi} over 2)

Właściwości fali

[Rysunek ukazujący amplitudę i okres na wykresie funkcji]

Falę, którą uzyskujemy poprzez narysowanie wykresu funkcji sinus możemy dowolnie przekształcać poprzez zmianę jej okresu, amplitudy oraz przesunięcia φ. Wzór ogólny pojedynczej fali zapisujemy następująco:

y = Asin ( 2 π T x + φ ) y=Asin( {2%ipi} over T x + %ivarphi )

Powiązania między wartościami tych parametrów a wyjściowym wykresem funkcji najprościej będzie dostrzec przez samodzielne eksperymentowanie...

Wzór funkcji: f ( x ) = 4,16 sin ( 2 π 5,12 x )

Przekształcenia funkcji okresowej

Przeciągaj poniższe suwaki aby zmieniać okres i amplitudę funkcji sinus.

Okres
T = 4
Amplituda
A = 2

Jak widzisz poprzez określenie tych dwóch parametrów można uzyskać dowolny kształt fali co przyda nam się podczas omówionej dalej aproksymacji funkcji okresowej.

Sumowanie funkcji

Pojedyncza fala nie pozwoli nam jednak przybliżyć każdej funkcji. Rozważymy teraz sytuacje, w której dodajemy do siebie różniące się fale. Załóżmy, że mamy takie dwie funkcje:

f ( x ) = 2 sin ( 2 π 2 x ) g ( x ) = sin ( 2 π 0,5 x ) f( x )=2sin( {2%ipi}over 2 x ) ~~g( x )=sin( {2%ipi} over 0,5 x )

Po ich zsumowaniu otrzymamy całkiem inną, złożoną funkcję:

h ( x ) = f ( x ) + g ( x ) = 2 sin ( 2 π 2 x ) + sin ( 2 π 0,5 x ) h( x )=f(x)+g(x)=2sin( {2%ipi}over 2 x ) + sin( {2%ipi} over 0,5 x )

Możliwość formowania wyjściowego wykresu znacznie wzrastają jednak sposób jej rysowania zaczyna się znacznie komplikować. Powrócimy zatem do podstaw rysowania funkcji sinus przy użyciu okręgu jednostkowego. Tym razem skorzystamy nie z jednego, a kilku (tylu, ile jest składników sumy) okręgów ściśle powiązanych ze sobą (animacja obok).

Okres sumy funkcji okresowych

Z tematem sumowania funkcji okresowych wiąże się jedno ważne pytanie - czy suma dwóch funkcji okresowych jest okresowa?

Odpowiedź nie jest taka prosta. Inżynier odpowie bez problemu "tak" (pracuje on bowiem na pewnych przybliżeniach) natomiast matematyk odpowie "to zależy". Okresy funkcji muszą spełniać pewną zależność:

aT 1 = bT 2 a , b C aT_1=bT_2 ~a,b in C

Dla poprzedniego przykładu łatwo wskazać takie liczby całkowite a i b. Jednak czasem okres sumy sinusów może być dużo większy niż okres którejkolwiek ze składowych (jest to NWW ich okresów). W niektórych przypadkach suma sinusów nie jest okresowa, np.:

sin ( 2 π 2 x ) + sin ( 2 π 2 ) sin( {2%ipi} over 2 x ) + sin( {2%ipi} over sqrt{2} )

Dla okresów odpowiednio wymiernego i niewymiernego nie istnieje całkowita wspólna wielokrotność. o takich liczbach mówimy, że są niewspółmierne. Dlatego powyższa suma nie jest okresowa (choć w pewnym przybliżeniu na wykresie tego nie widać).

Powróćmy jednak do tematu sumowania naszych funkcji. Spróbujesz teraz sam stworzyć wykres sumy funkcji trygonometrycznych.

Sumy funkcji okresowych

Po uwzględnieniu faktu, że funkcje można do siebie dodawać możliwości kreowania funkcji rosną. Masz do dyspozycji maksymalnie 6 funkcji składowych, których suma zostanie przedstawiona na wykresie i animacji okręgów jednostkowych.

Liczba funkcji składowych: 3
Funkcja składowa 1
Amplituda: 4
Okres: 16
Funkcja składowa 2
Amplituda: 3
Okres: 4
Funkcja składowa 3
Amplituda: 1
Okres: 1.5

Harmoniczny szereg trygonometryczny

A co, jeśli sięgnęlibyśmy po nieskończoną liczbę składników sumy? Taką "sytuację" w matematyce nazywamy szeregiem liczbowym. Szereg trygonometryczny jest niczym innym jak właśnie omawianą wcześniej sumą funkcji trygonometrycznych. Jednak w szeregu funkcyjnym każdą składową można określić za pomocą jednego wzoru. Taki ogólny wzór można zapisać w takiej postaci:

n = 1 N A n sin ( 2 π n T x + φ n ) sum from{n=1} to{N} { A_n sin({2%ipi n} over T x + %ivarphi_n) }

Jak widzisz wzór ten określa sumę N-elementową sinusów, przy czym każdy z nich ma swoją określoną przez n amplitudę i przesunięcie. Ciekawa rzecz ma miejsce z okresem tych funkcji. Zauważ, że każda kolejna z nich to okres pierwszej podzielony przez numer składowej. Kolejne funkcje o takich okresach to składowe harmoniczne pierwszej funkcji (dla n=1, czyli dla tej o największym okresie).

Animacja obok pokazuje wykresy składowych dla n od 1 do 10 oraz wykres całej otrzymanej sumy. Ten najprostszy wzór zakłada, że przesunięcia i amplitudy składowych są jednakowe.

f ( x ) = sin ( 2 π n x ) n = 1 f(x)=sin({2%ipi n} x)~~n=1
g ( x ) = n = 1 1 sin ( 2 π n T x ) g(x) = sum from{n=1} to 1 { sin({2%ipi n} over T x) }

Szereg Fouriera - wprowadzenie

Kiedy w 1807 roku Jean-Baptiste Joseph Fourier wprowadził pewien szereg aby określić, w jaki sposób rozchodzi się ciepło w metalowej płycie, nie wiedział, że jego odkrycie wpłynie tak znacząco na technikę przyczyniając się do rozwoju akustyki, elektronicznego sygnałów i obrazów, fizyki kwantowej i wielu innych dziedzin nauki. Szereg ten ma jedno zasadnicze zastosowanie - przybliżanie dowolnej funkcji okresowej.

Spróbujmy przekształcić wzór szeregu funkcyjnego na szereg Fouriera zapisując go jako nieskończoną sumę:

S ( x ) = a 0 2 + n = 1 ( a n cos ( 2 π n T x ) + b n sin ( 2 π n T x ) ) S(x)=a_0 over 2 + sum from{n=1} to{ %infinite } ({ a_n cos( {2%ipi n} over T x )+b_n sin( {2%ipi n} over T x )})

Zaczniemy od ogólnego wzoru na harmoniczny szeregu trygonometrycznego:

n = 1 N A n sin ( 2 π n T x + φ n ) sum from{n=1} to{N} { A_n sin({2%ipi n} over T x + %ivarphi_n) }

Domyślasz się pewnie, że to, jak będzie wyglądał ostateczny wykres zależy od amplitud i przesunięć składowych. Zatem jak uzyskać te wartości? Skorzystamy z tradycyjnego wzoru na sinusa dwóch kątów:

n = 1 N ( Acos ( φ ) sin ( 2 π n T x ) + Asin ( φ ) cos ( 2 π n T x ) ) sum from{n=1} to{N} ({Acos( %ivarphi )sin( {2%ipi n} over T x )+Asin( %ivarphi )cos( {2%ipi n} over T x )})

Teraz widać, że przesunięcie φ oraz amplituda A mogą zostać ze sobą powiązane we współczynniki a i b:

n = 1 N ( a n sin ( 2 π n T x ) + b n cos ( 2 π n T x ) ) sum from{n=1} to{N} ({ a_n sin( {2%ipi n} over T x )+b_n cos( {2%ipi n} over T x )})

Musimy jeszcze uwzględnić w szeregu składnik zerowy (dla n = 0) przez co wynikowy wzór będzie wyglądał tak (współczynnik dzielimy przez 2 ponieważ upraszcza to obliczenia na później założonych przedziałach okresu):

a 0 2 + n = 1 N ( a n sin ( 2 π n T x ) + b n cos ( 2 π n T x ) ) a_0 over 2 + sum from{n=1} to{N} ({ a_n sin( {2%ipi n} over T x )+b_n cos( {2%ipi n} over T x )})

Jednak wciąż brakuje nam wyprowadzonych współczynników, nazywach współczynnikami Fouriera - an oraz bn. Aby je wyprowadzić musielibyśmy skorzystać z rachunku na liczbach zespolonych co raczej wykracza poza program matematyki w szkole średniej.

Po takim wyprowadzeniu współczynniki te określamy następująco:

a n = 2 T T 2 T 2 f ( x ) cos ( 2 n π T x ) dx n b n = 2 T T 2 T 2 f ( x ) sin ( 2 n π T x ) dx n n 0 a_n = {2 over T} int from{- {T over 2}} to{T over 2} { f(x)cos({{ 2n%pi } over T}x)dx } ~n in setN newline b_n = {2 over T} int from{- {T over 2}} to{T over 2} { f(x)sin({{ 2n%pi } over T}x)dx } ~{n in setN } ~{ n <> 0 }

Wzory te prezentują się na pewno imponująco ale po bliższym przyjrzeniu się im zauważysz, że główną wartością tych współczynników jest pole (wyjaśnia obecność całek oznaczonych) jednego okresu uzyskane z przekształconej funkcji pomnożonej przez daną składową harmoniczną.

Aproksymacja szeregiem Fouriera

Ten zastrzyk teorii z poprzedniego rozdziału może być nieco trudny do zrozumienia. Ważne jest jednak zrozumienie samego procesu przybliżania funkcji. Aproksymacja funkcji, czyli właśnie przybliżenie jej poprzez inną funkcję, pozwala opisać dowolną funkcję okresową według tego samego wzorca. Aby to zrobić musimy dla każdego składnika szeregu obliczyć współczynniki, dla których wyprowadzone wzoru pojawiły się przed momentem.

Przykład - funkcja liniowa

Spróbujemy teraz przybliżyć wykres prostej funkcji y = x. Jednak jak dobrze wiesz, funkcji liniowej do okresowości daleko. Określimy więc zatem ją jedynie w przedziale <-π; π>, przez co funkcja po transformacji będzie "powtarzać" ten fragment co założony okres (równy ).

Oglądając animację po prawej stronie łatwo zauważysz, że im więcej obliczysz elementów szeregu, składników sumy, tym dokładniejszy jest wykres. Dla n = 50 wykres przedstawia już całkiem dobre przybliżenie. Jednak jak wiesz, wzór szeregu Fouriera wskazuje, że n dąży do nieskończoności.

f ( x ) = x n = 1 f( x )=x~n=1

Współczynniki Fouriera

Mamy wzory na współczynniki an i bn, które "pokazują" zwykłemu harmonicznemu sinusowi i cosinusowi jak bardzo ma zniekształcić falę. Przekształćmy je tak, aby służyły nam naszemu przykładowi - funkcji liniowej:

f ( x ) = y T = 2 π a n = 1 π π π xcos ( nx ) dx b n = 1 π π π xsin ( nx ) dx f( x )=y ~ T=2%ipi newline a_n = {1 over {%ipi}} int from{- %ipi} to{%ipi} { xcos(nx)dx } newline b_n = {1 over {%ipi}} int from{- %ipi} to{%ipi} { xsin(nx)dx }

Teraz nie wyglądają już tak źle - stała pomnożona przez całkę (całka to po prostu pole powierchni pod wykresem w pewnym przedziale) z pewnej funkcji okresowej. No właśnie - co to za całka i funkcja okresowa? Spójrz na animację obok.

y = x f ( x ) = xsin ( nx ) g ( x ) = xcos ( nx ) y=x newline f( x )=xsin(nx)~g( x ) = xcos( nx )
Nasza wyjściowa funkcja, z której chcemy uzyskać współczynniki Fouriera

Obliczone współczynniki

Tak, jak pokazano na animacji, możesz obliczć dowolną ilość współczynników, które pozwolą lepiej przybliżyć wyjściową funkcję. Poniższa tabela zawiera komputerowo obliczone współczynniki dla funkcji liniowej:

n an bn

Wyniki całkowania są oczywiście obarczone pewnym błędem. W przypadku tej funkcji cała kolumna an powinna nie zawierać żadnej wartości. Łatwo jednak zauważyć, że współczynniki te nie mają praktycznie znaczenia w porównaniu ze współczynnikami bn.

Zajmijmy się więc tymi drugimi. Spójrz jeszcze raz na kolumnę zawierającą je i spróbuj wywnioskować zależność pomiędzy nimi. Każdy nieparzysty współczynnik jest ujemny... A ich bezwzględne wartości? Kolejne wyniki dzielenia 2 przez n. Tak więc dla tego szczególnego przypadku funkcji liniowej można okreslić wzór na współczynnik b:

b n = 2 ( 1 ) n 1 n n b_n={ 2(-1)^{n-1} } over n ~n in setC

Przykłady aproksymacji funkcji

Nie musimy przybliżać tylko i wyłącznie funkcji liniowej. Poniżej znajduje się więcej przykładów tego, w jaki sposób działa aproksymacja szeregiem Fouriera. Kliknij na nazwę przybliżenia aby pokazać jej wykres.

Wyjściowa funkcja
n an bn

Funkcja kwadratowa

f ( x ) = 1 2 x 2 f( x ) = 1 over 2 x^2

Szereg Fouriera pozwala dobrze przybliżyć funkcję kwadratową już dla kilku elementów. Najwięcej "problemów" sprawiają mu nieparaboliczne załamania na granicach przyjętego okresu.

Wielomian

f ( x ) = 1 10 x ( x + 3 ) ( x + 1 ) ( x 5 2 ) f( x ) = 1 over 10 x ( x + 3 )( x + 1 )( x- 5 over 2 )

W przypadku wielomianu, którego okresowość została nieco wymuszona można zauważyć gwałtowne wzrosty wartości przybliżeń w punktach nieciągłości.

Fala trójkątna

f ( x ) = | x | f( x ) = abs{x}

Tzw. fala trójkątna, będąca funkcją z wartości bezwzględnej z x o pewnym założonym okresie.

Funkcja złożona

f ( x ) = ( x + 2 ) | cos ( 2 x ( x π 6 ) ) | f( x ) = ( x + 2 )abs{ cos(2x(x- %ipi over 6))}

Nawet wielokrotnie złożone funkcje łatwo można aproksymować, jednak liczne ekstrema tej funkcji wymagają większej ilości obliczonych współczynników Fouriera.

Jaką funkcję można aproksymować?

Szereg Fouriera nie przybliży nam jednak dowolnej funkcji. Musi ona spełniać pewne warunki. Po pierwsze i najważniejsze: przybliżana funkcja musi być okresowa.

W poprzednich przykładach radziliśmy sobie z tym poprzez "wymuszenie" okresowości na określonym przedziale zwykłej funkcji. Nasz pierwszy - przykład funkcja f(x) = x - okresowości raczej naturalnie nie przejawia. Jednak jeśli założymy, że jest okresowa w przedziale <-π, π> to taka funkcja staję się okresową falą piłokształtną.

Warunki Dirichleta

Okazuje się jednak, że okresowość to nie jedyny warunek, jaki musi spełniać przybliżana funkcja. Warunki te zostały sformułowane przez Petera Gustava Dirichleta (który notabene udowodnił zbieżność szeregu Fouriera) i nazwane jego nazwiskiem.

1. Funkcja musi być całkowalna w swoim przedziale.

To znaczy, że dla przybliżanej funkcji musimy być w stanie obliczyć pole pod wykresem - tak jak w poprzednich przykładach. Przykładowo: nie obliczymy pola pod wykresem funkcji logarytmicznej dla ujemnych x, prawda? Dlatego nie można jej aproksymować (choć z pewnymi założeniami oczywiście się da).

2. Funkcja w przedziale jednego okresu musi mieć skończoną liczbę maksimów i minimów lokalnych.

Weźmy pewną funkcję o założonym okresie 2π:

f ( x ) = sin ( 1 x ) f( x )=sin( 1 over x )

Ile powyższa funkcja ma maksimów i minimów lokalnych w owym przedziale? Nie policzymy tego, dlatego takich funkcji nie możemy aproksymować.

3. Funkcja w przedziale jednego okresu może mieć tylko skończoną liczbę punktów nieciągłości

W tym przypadku zastrzeżeniem dla przybliżanej funkcji jest fakt, ze nie może ona mieć nieskończenie wielu punktów nieciągłości (czyli, tłumacząc, miejsc, w których wykres z lewej strony nie zmierza do tego samego punktu co wykres z prawej strony) w przedziale okresu.

4. Funkcja musi być funkcją ograniczoną.

W powyższym warunku chodzi o to, aby zbiór wartości funkcji był przedziałem skończonym (tzn. żeby funkcja nie "uciekała" do nieskończoności). Jako przykład może nam przysłużyć funkcja hiperboliczna y=1/x, której zbiór wartości jest nieskończony, nawet zakładając okres .

Efekt Gibbsa

Aproksymacja szeregiem Fouriera posiada pewną niedoskonałość wynikającą z matematycznej natury funkcji trygonometrycznych. Szereg Fouriera jest w stanie aproksymować funkcję, która nie jest ciągła w pewnych punktach (ale takich punktów jest skończenie wiele według warunków Dirichleta) ale z pewną wadą.

Weźmy na przykład funkcję, która ma dwa punkty nieciągłości w zakładanym okresie:

f ( x ) = { ( x + 1 ) 2 2 < x 1 3 | x | x ( , 2 ( 1, ) f( x )= left lbrace binom{(x+1)^2 ~ -2<x<=1}{-3abs{x} ~x in {left ( -%infinite , -2 right rangle } union { left ( 1, %infinite right )} } right none

Na animacji obok widać, że szereg trygonometryczny ma trudności z naśladowaniem funkcji w punktach nieciągłości. Ma to odzwierciedlenie w prawdziwym świecie - jako że aproksymacja szeregiem Fouriera jest wykorzystywana do przetwarzania sygnałów przez układy cyfrowe efekt Gibbsa jest niepożądanym efektem powodującym zakłócenia wyjściowego sygnału.

Efekt Gibbsa przejawia się gwałtownym wzrostem amplitudy składowych szeregu w punktach, gdzie wyjściowa funkcja jest nieciągła.
Przybliżenie szeregiem Fouriera dla: n = 1 n=1

Zastosowania aproksymacji

Sama idea przybliżania funkcji może pozornie wydawać się bezcelowa jednak szereg Fouriera znalazł wiele znaczących zastosowań w dzisiejszym świecie, szczególnie w informatyce.

Kiedy słuchasz kolejnej empetrójki ze swojego odtwarzacza nie przypuszczasz raczej, że jesteś w stanie zmieścić na nim tyle muzyki właśnie dzięki szeregowi Fouriera. Dźwięk jest bowiem niczym innym jak falą, którą komputer zapisuje jako ogromny zbiór punktów na wykresie. Tak zapisany dźwięk zajmuje jednak ogromną ilość pamięci (ok. 1,4 Mbit/s dla dźwięku stereo).

W tym momencie aproksymacja znajduje swoje ważne miejsce - sprawia, że zbiór punktów staje się odpowiednio opisanym szeregiem trygonometrycznym. Takie przekształcenie nazywamy dyskretną transformantą Fouriera (DHT).

Kompresja stratna

Jak już wiesz, dokładność przybliżenia szeregiem zależy od liczby jego składników. Przekłada się to właśnie na kompresję dźwięku cyfrowego. Przykładowo, kompresja MP3 pozwala na wybranie przepustowości transmisji do 320 kb/s. Przy tej granicznej wartości bardzo trudno jest usłyszeć odchylenia od oryginalnego nagrania. Zmniejszając tą wartość do 32 kb/s uzyskujemy znacznie mniejszy rozmiar pliku wyjściowego ale jakość dźwięku spada znacząco.

Poniżej porównanie odpowiednio (od góry) fali dźwiękowej oryginalnej i skompresowanej do 32kb/s:

Na pierwszy rzut oka fale wydają się identyczne, przez co możemy uświadomić sobie przewagę w dokładności zmysłu słuchu nad zmysłem wzroku. Jeśli jednak przyjrzysz się dokładnie, zauważysz delikatne różnice między tymi falami. Dźwięk skompresowany jest uproszczony, jego fala jest "wygładzona" w stosunku do oryginalnej. Wiąże się to z utratą danych o wysokich częstotliwościach przez co słyszalny dźwięk jest przytłumiony.

Własna aproksymacja

Teraz masz możliwość aproksymowania dowolnej wpisanej przez siebie funkcji. Dla funkcji zostanie przydzielony okres wynoszący .

  • Działania algebraiczne, np. 2x(x + 5) / (6 - x) * 2
  • Funkcje, np. sin(2 * pi), abs(-3), pow(2, 5)
  • Stałe, np. pi, e, phi, tau
  • Stosuj kropki zamiast przecinków!
  • Upewnij się, że zakładany okres mieści się w dziedzinie funkcji.

f(x) =

Szereg Fouriera

Wybierz stopień przybliżenia (liczbę składników szeregu, zmiany zostaną zastosowane automatycznie):

n = 10
Powrót do góry

Koniec

Dotarłeś do końca mojej pracy. Była ona jedynie krótki wprowadzeniem do tak obszernego tematu w matematyce jakim jest aproksymacja szeregiem Fouriera oraz transformacja funkcji.

Aby stworzyć pracę na temat taki jak ten musiałem sięgnąć po książki przeznaczone dla studentów oraz notatki z obcojęzycznych wykładów. Całość ma za zadanie zobrazować czytelnikowi tę dziedzinę matematyki przy pomocy animacji i interaktywnych paneli. Mam nadzieję, że dzięki tej pracy naprawdę udą się zobaczyć matematykę.

Bibliografia

Wykorzystane oprogramowanie

  • Aptana Studio 3 - środowisko programistyczne stworzone na bazie NetBeans
  • LibreOffice Math - edytor równań eksprtujący wyniki do MathML
  • Microsoft Mathematics - niezastąpiona pomoc podczas nauki i przygotowywaniu skryptów
  • Inkscape - edytor grafiki wektorowej
  • paint .NET - edytor grafiki rastrowej
  • Audacity - edytor dźwięku (kompresja dźwięku)
  • Graph - rysowanie wykresów

Przy budowie strony wykorzystałem darmowe tła ze strony subtlepatterns.com. Strona została przetestowana pod przeglądarkami Opera 27, Firefox 33, Internet Explorer 10. Aby załadować dodatkowe czcionki wymagane jest połączenie z internetem.

Od strony technicznej

Strona została stworzona w technologii HTML5/CSS3 oraz JavaScript. Wszystkie dynamicznie rysowane wykresy, animacje okręgów jednostkowych to autorskie skrypty (plik fourier.js). Każda aproksymacja jest w czasie rzeczywistym liczona przez przeglądarkę. Tworząc stronę wykorzystałem takie technologie jak:

  • Raphaël - bibliotekę wspomagającą tworzenie obrazów i animacji SVG
  • skrollr.js - bibliotekę umożliwiającą tworzenie stron opartych na paralaksowym przewijaniu
  • MathJax - bibliotekę wyświetlającą wzory matematyczne
  • math.js - parser wyrażeń matematycznych
  • jQuery oraz jQuery UI - frameworki pozwalające tworzyć skomplikowane animacje oraz interaktywne elementy interfejsu