Matematyka, Wzór Taylora i Maclaurina, Przybliżanie Funkcji

Czy zastanawiałeś się kiedyś jak komputer lub kalkulator oblicza np.
\sin 11^{\circ}
\sqrt{13,71}
\ln 8
e^{1,21}

Takie obliczenia wykonuje na co dzień twój komputer w grach, podczas obracania grafiki, czy ogólnie w przestrzeniach 3D. Podobnie smartfon np. przelicza sygnały z czujników przyspieszenia.

Jest Twierdzenie w matematyce, które pozwala na zamianę tych niewdzięcznych funkcji na szereg dodawań, odejmowań, mnożeń i dzieleń.

Oczywiście nie jesteśmy w stanie idealnie zastąpić tych funkcji tylko tymi 4 działaniami.
Nie mniej jednak możemy to zrobić dowolnie dokładnie.

A wręcz możemy z góry zapewnić, że wynik nie będzie różnił się bardziej, niż o np.
0,01
0,0001
0,000001.

Polega to na tym, iż funkcję zastępujemy wielomianem. Ponieważ obliczenie wartości wielomianu dla danej liczby sprowadza się do mnożenia i dodawania.

To natomiast potrafimy zrobić nawet ręcznie dla dowolnej liczby, również z przecinkiem.

Przykładowo dla wielomianu
W(x) =  a_4x^4 + a_3x^3 + a_2x^2 + a_1x + a_0
chcemy obliczyć wartość dla x=1,1

    \begin{multline*} W(1,1) = a_4\cdot (1,1)^4 + a_3\cdot (1,1)^3 + \\ +a_2\cdot (1,1)^2 + a_1\cdot 1,1 + a_0 \end{multline*}

Wprawdzie jest tam także potęgowanie, ale to inaczej mnożenie, bo jest to potęga naturalna.

    \[1,1^4 = 1,1 \ \cdot \ 1,1 \  \cdot \ 1,1 \  \cdot  \ 1,1 .\]

Pierwszy rzut oka.

    \[f(x)=2^x\]

    \[f(x)=\tg x\]

    \[f(x)= \arcsin x\]

Były to funkcje rozwijane w punkcie dla argumentu x_0 =0.

Okazuje się, że funkcje mogą być rozwijane w innym punkcie.
f(x)=2^x rozwijając w punkcie dla argumentu x_0=1
f(x)=\tg x rozwijając w punkcie dla argumentu x_0=45^{\circ}
f(x)=\arcsin x rozwijając w punkcie dla argumentu x_0=\frac{1}{2}
Możemy rozwijać w każdym punkcie, choć nie wszystkie są odpowiednie, ale o tym dalej.

Jak to w matematyce, każde twierdzenie potrzebuje jakiegoś założenia.
Co jest zatem wymagane i jakie są ograniczenia?

Funkcja musi być przynajmniej (n+1) razy różniczkowalna na pewnym przedziale.
Co dla większości typowych funkcji jest od razu spełnione.

Gdyż większość znanych nam funkcji

    \[x^n \quad \frac{1}{x} \quad \ln x \quad \log x \quad \log_a x \quad e^x \quad \sqrt{x}  \quad \sqrt[n]{x} \quad a^x\]

    \[\sin x \quad \cos x \quad \tg x \quad \ctg x \quad \sec x \quad \csc x\]

    \[\arcsin x \quad \arccos x \quad \arctg x \quad \arcctg x\]

    \[\arcsec x \quad \arccsc x\]

    \[\sinh x \quad \cosh x \quad \tgh x \quad  \ctgh x \quad \sech x \quad \csch x\]

    \[\arsinh x \quad \arcosh x \quad \artgh x \quad \arctgh x\]

    \[\arsech x \quad \arcsch x\]

Są różniczkowalne dowolną liczbę razy i to na całym przedziale dziedziny. No z wyjątkiem brzegów dziedziny, gdzie wystarczy nam różniczkowalność jednostronna.

Weźmy przykład do obliczenia e^{1,21}.

Szukamy argumentu, dla którego znamy wartość tej funkcji f(x)=e^x i wartości jej kolejnych pochodnych.

Wiemy, że pochodną funkcji f(x)=e^x jest f^{\prime}(x)=e^x a kolejną pochodną znowu f^{\prime\prime}(x)=e^x itd.

Argument natomiast możemy wybrać np. 0 lub 1, a nawet inne. Generalnie im bliżej tych 1,21 to tym lepiej.

Czasem warto wziąć trochę dalszy argument, a mieć łatwiejsze potem liczby do podstawienia, choć może być to okupione potrzebą większej liczby składników, ale o tym za chwilę.

Wybierę zatem 0 , gdyż e^0=1 co jest dosyć wygodne.
Twierdzenie głosi, że możmemy funkcję f(x)=e^x zapisać tak

    \[e^x=e^0+\frac{e^0}{1!}x+\frac{e^0}{2!}x^2+\frac{e^0}{3!}x^3+\frac{e^0}{4!}x^4+\ldots\]

Ta liczba z wykrzyknikiem to skrótowy zapis mnożeń kolejnych liczb naturalnych np.

    \[3! =1\cdot 2 \cdot 3\]

    \[8! = 1\cdot 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 \cdot 7 \cdot 8\]

Nazywa się to silnią.

    \[e^x=e^0+\frac{e^0}{1!}x+\frac{e^0}{2!}x^2+\frac{e^0}{3!}x^3+\frac{e^0}{4!}x^4+\ldots\]

Im więcej tych składników wypiszemy tym mamy dokładniej.

    \[e^x= \underbrace{e^0}_{\mbox{{\tiny pierwszy}}}+             \underbrace{\frac{e^0}{1!}x}_{\mbox{{\tiny drugi}}}+ 			\underbrace{\frac{e^0}{2!}x^2}_{\mbox{{\tiny trzeci}}}+ 			\underbrace{\frac{e^0}{3!}x^3}_{\mbox{{\tiny czwarty}}}+ 			\frac{e^0}{4!}x^4+\ldots\]

Weźmy do naszego przykładu 4 pierwsze składniki rozwinięcia

    \[e^{1,21} \R{\approx} e^0+\frac{e^0}{1!}\cdot 1,21+\frac{e^0}{2!}\cdot 1,21^2+\frac{e^0}{3!}\cdot 1,21^3\]

Mamy zatem

    \[e^{1,21} \approx 1+1,21+\frac{1}{2}\cdot1,21^2+\frac{1}{6}\cdot1,21^3 \approx 3,23731017\]

to potrafimy nawet ręcznie, pisemnie policzyć.

Pojawia się tylko pytanie na ile dokładne jest to nasze przybliżenie?

Okazuje się, iż cały błąd, który powstał z wypisania nie wszystkich składników rozwinięcia można wyrazić tak.

    \[\frac{e^{\alpha}}{4!}x^4\]

gdzie \alpha jest liczbą pomiędzy 0 a 1,21.
Przypomina to wypisanie kolejnego składnika sumy lecz zamiast x_0 jest \alpha.

    \[e^{1,21} \R{\approx} 1+1,21+\frac{1}{2}\cdot1,21^2+\frac{1}{6}\cdot1,21^3\]

Po dodaniu mamy równość

    \[e^{1,21} \R{=} 1+1,21+\frac{1}{2}\cdot1,21^2+\frac{1}{6}\cdot1,21^3 + \frac{e^{\R{\alpha}}}{4!}1,21^4,\]

gdzie \alpha \in \left[ 0 ; 1,21 \right]

Trzeba przyznać, iż jest to bardzo ciekawe.
Mimo nieznajomości dokładnej wartości e^{1,21} wiemy, że tym dodatkowym składnikiem, zwanym resztą we wzorze Taylora, możemy IDEALNIE “załatać”, tę niedokładność spowodowaną zakończonym wypisywaniem składników.

Wprawdzie niewiadomo ile wynosi \alpha, ale wiadomo, że istnieje taka liczba \alpha z zakresu 0 i 1,21, że wstawiona do tej reszty skompensuje idealnie błąd, gdy tę resztę dodamy do rozwinięcia. tzn.

    \[e^{1,21} \R{=} 1+1,21+\frac{1}{2}\cdot1,21^2+\frac{1}{6}\cdot1,21^3 +\frac{e^{\alpha}}{24}\cdot 1,21^4 .\]

Skoro wiemy w jakim przedziale znajdzie się \alpha to możemy oszacować przy jakiej \alpha ta reszta będzie największa. Co za tym idzie będziemy mieć pewność, że nasz błąd przybliżenia nie jest większy, niż ta reszta.

Dla \alpha równego 1,21 reszta może być największa

    \[\frac{e^{1,21}}{4!}\cdot 1,21^4<?\]

    \[e^{1,21}<e^{1,25}=e\sqrt[4]{e}<e\sqrt[4]{3}<2,72\cdot 1,32<3,6\]

    \[\frac{e^{1,21}}{4!}\cdot 1,21^4<\frac{3,6}{4!}\cdot 1,21^4<0,33\]

tak więc nasz wynik nie różni się bardziej od tego prawdziwego, nieznanego, niż o 0,33.

Nasze przybliżenie możemy poprawić wypisując więcej składników.
Dopiszmy kolejny składnik wynik będzie wynosił.

    \begin{multline*} e^{1,21} \approx 1+1,21+\frac{1}{2}\cdot1,21^2+\frac{1}{6}\cdot1,21^3+ \\  + \frac{1}{24}\cdot 1,21^4 \approx 3,3266 \end{multline*}

z błędem nie większym, niż

    \[\frac{e^{1,21}}{5!}1,21^5 < \frac{3,6}{5!}1,21^5=0,08\]

Zobaczmy co Się stanie jak rozwiniemy naszą funkcję f(x)=e^x bliżej szukanego argumentu tzn. dla x_0=1.

    \begin{multline*} e^x = e^1+e^1(x-1)+\frac{e^1}{2!}(x-1)^2+\frac{e^1}{3!}(x-1)^3+\\ +\frac{e^1}{4!}(x-1)^4+\frac{e^{\alpha}}{5!}(x-1)^5, \end{multline*}

gdzie \alpha jest pomiędzy 1 a 1,21.

W tym wypadku otrzymamy

    \begin{multline*} e^{1,21} \approx e^1+e^1(1,21-1)+\frac{e^1}{2!}(1,21-1)^2+\frac{e^1}{3!}(1,21-1)^3+\\ +\frac{e^1}{4!}(1,21-1)^4\approx 3,3534  \end{multline*}

Z błędem nie większym niż,

    \[\frac{e^{1,21}}{5!}\cdot(1,21-1)^5<0,000012.\]

Z tym, że teraz musimy stosować dokładne przybliżenie liczby e i na nim operować.

Kolejny przykład powiedzmy, że chcemy obliczyć \sin 11^{\circ}.
Szukamy argumentu, dla którego znamy wartość tej funkcji i jej kolejnych pochodnych.

Wiemy, że pochodną sinus jest kosinus, kolejną pochodną sinus, kolejną kosinus itd. (no i jeszcze okresowa zmiana znaku)

    \begin{alignat*}{7} &\left(\sin x\right)^{\prime} &&=& \cos x \\ &\left(\sin x\right)^{\prime\prime } &&=& -\sin x \\ &\left(\sin x\right)^{\prime\prime\prime } &&=& -\cos x \\ &\left(\sin x\right)^{(4) } &&=& \sin x \\ &\left(\sin x\right)^{(5) } &&=& \cos x  \end{alignat*}

Natomiast argument może być np. 0^{\circ} lub 30^{\circ}, 15^{\circ} lub 18^{\circ} a nawet inne. Podobnie jak wcześniej im bliżej tych 11^{\circ} tym dokładniej.
Wybieram zatem 0^{\circ}, gdyż \sin 0^{\circ}=0 i \cos 0^{\circ} = 1.

Twierdzenie mówi, że możemy zapisać

    \[\sin x = \sin 0^{\circ} + \frac{\cos 0^{\circ}}{1!}x - \frac{\sin 0^{\circ}}{2!}x^2- \frac{\cos 0^{\circ}}{3!}x^3 + \ldots\]

Weźmy 4 pierwsze składniki tej sumy (odejmowanie to też dodawanie elementu przeciwnego).
Mamy zatem:

    \[\sin 11^{\circ} \approx \sin 0^{\circ} + \frac{\cos 0^{\circ}}{1!}11^{\circ} - \frac{\sin 0^{\circ}}{2!}\left( 11^{\circ}\right)^2- \frac{\cos 0^{\circ}}{3!}\left(11^{\circ}\right)^3\]

Zamieńmy stopnie na liczby, aby wyglądało to bardziej normalnie, zgodnie z przelicznikiem znanym z trygonometrii.

    \[180^{\circ}=\pi\]

    \[\sin 11^{\circ} \approx 0 + 11^{\circ}\cdot \frac{\pi}{180^{\circ}} - 0 - \frac{1}{6}\cdot (11^{\circ}\cdot \frac{\pi}{180^{\circ}})^3 \approx 0,190807\]

z resztą \frac{\cos \alpha}{5!}\cdot 1,21^5
oraz błędem nie większym, niż

    \[\frac{1\cdot( 11^{\circ}\cdot\frac{\pi}{180^{\circ}})^5}{120}<0,0000022\]

Skąd wiedzieć ile wyrazów należy wypisać, aby uzyskać zadana dokładność.

Powiedzmy, że chcemy obliczyć \sqrt{13,71} z dokładnością przynajmniej 0,0001.
Musimy jeszcze zdecydować się, gdzie będziemy rozwijać, gdyż od tego zależy ile tych wyrazów będzie.

Znamy pierwiastek dla 9 i 16. Decydujemy się na rozwijanie wokół x_0=16
Teraz możemy oszacować ile wyrazów trzeba wypisać aby osiągnąć zadaną dokładność.

Reszta ma postać

    \[R_n(x,x_0)=\frac{\left(\sqrt{\alpha}\right)^{(n+1)}}{(n+1)!}(x-x_0)^{n+1}\]

Tutaj wyszła nam jeszcze jedna ważna kwestia, iż wypadałoby znać wzór na n-tą pochodną funkcji f(x)=\sqrt{x}

    \[f^{(n)}(x)=?\]

Choć nie jest to konieczne, to zaobserwujmy prawidłowość \newline

    \begin{alignat*}{7} & f(x) &&=& \sqrt{x} = x^{\frac{1}{2}}  \\ & f^{\prime}(x) &&=& \frac{1}{2}  x^{-\frac{1}{2}} \\ & f^{\prime\prime}(x) &&=-& \frac{1}{4}  x^{-\frac{3}{2}} \\ & f^{\prime\prime\prime}(x) &&=& \frac{3}{8}  x^{-\frac{5}{2}} \\ & f^{(4)}(x) &&= -&\frac{15}{16}  x^{-\frac{7}{2}} \\ & f^{(5)}(x) &&= &\frac{105}{32}  x^{-\frac{9}{2}}  \end{alignat*}

Sprawdźmy czy 3 pierwsze wyrazy wystarczą n=2
wówczas reszta to

    \[\left|\frac{\frac{3}{8}\cdot \frac{1}{13,71^2\sqrt{13,71}}}{3!}(13,71-16)\right| <\]

    \[<\left|\frac{\frac{3}{8}\cdot \frac{1}{13^2\sqrt{13}}}{3!}(13-16)\right|  < 0,000308\]

czyli za mała dokładność.

Sprawdźmy czy 4 składniki wystarczą n=3

    \begin{multline*} \left|\frac{\frac{-15}{16}\cdot \frac{1}{13,71^3\sqrt{13,71}}}{4!}(13,71-16)\right| <\\ <\left|\frac{\frac{-15}{16}\cdot \frac{1}{13^3\sqrt{13}}}{4!}(13-16)\right| < \\ <0,000015 \end{multline*}

To już zapewni nam dokładność lepszą niż 0,0001.

Tak więc przybliżona wartość \sqrt{13,71} obliczmy w ten sposób:

    \begin{multline*} \sqrt{13,71} \approx \sqrt{16}+\frac{1}{2\sqrt{16}}(13,71-16) + \\ +\frac{\frac{-1\sqrt{16}}{4\cdot 16^2}}{2!}(13,71-16)^2 +\frac{\frac{3\sqrt{16}}{8\cdot 16^3}}{3!}(13,71-16)^3  \approx  \\ \approx 3,70277. \end{multline*}

Warto zdawać sobie sprawę, że jeśli okazało by się, że wyrazów potrzeba dużo, to wtedy trzeba znać wzory wszystkich kolejnych pochodnych.

W przypadku obliczeń ręcznych nie jest to aż tak straszne, lecz w przypadku implementacji tego na komputerze trzeba znać ogólny wzór na n-tą pochodną od razu.

Ponieważ komputer tego sam nie wyprowadzi, tzn. jest to możliwe, ale to rozważania na zupełnie innym poziomie i faktycznie komputery potrafią takie rzeczy robić.

No chyba, że mamy jakiś szczególny przypadek, gdzie z góry znana jest ich wartość po podstawnieniu argumentu wokół, którego rozwijamy.

Teraz formalnie. Funkcję f(x) można rozwinąć w szereg Taylora w punkcie x_0 zgodnie ze wzorem.

    \begin{multline*} f(x)=f(x_0)+f^{\prime}(x_0)(x-x_0)+\\ +\frac{f^{\prime\prime}(x_0)}{2!}(x-x_0)^2+\frac{f^{\prime\prime\prime}(x_0)}{3!}(x-x_0)^3+\\ +\frac{f^{(4)}(x_0)}{4!}(x-x_0)^4+ \ldots \end{multline*}

Oczywiśćie w każdym miejscu możemy zakończyć i dodając resztę we wzorze Taylora.

Jeśli funkcja jest tylko n+1 razy różniczkowalna to wówczas w taki sposób

    \begin{multline*} f(x)=f(x_0)+f^{\prime}(x_0)(x-x_0)+\\ +\frac{f^{\prime\prime}(x_0)}{2!}(x-x_0)^2+\frac{f^{\prime\prime\prime}(x_0)}{3!}(x-x_0)^3+\ldots + \\ +\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n+ \frac{f^{(n+1)}(\R{\alpha})}{(n+1)!}(x-x_0)^{n+1}. \end{multline*}

Ostatnie różniczkowanie, lub wcześniej, zostawiamy sobie na resztę
(Lagrange’a)

Tą resztę we wzorze Taylora, można mieć wiele postaci, ale to nie jest najważniejsze, tę którą używaliśmy do tej pory nazywamy resztą Lagrange’a.

Zapytasz Mateusz, ale po co się tym zajmować? To już od dawna jest wdrożone na bardzo niskim poziomie?
Aby wiedzieć. Nie czułeś/ czułaś nigdy satysfakcji, że coś wiesz?

W kwestii nazewnictwa:
Twierdzenie Taylora mówi o możliwości takiego przedstawienia.
Wzór Taylora to przedstawienie za pomocą wielomianu czyli skończona liczba składników + reszta.

Jeśli funkcja jest dowolnie razy różniczkowalna to takie przedstawienie nazywamy szeregiem Taylora, bo rozwijanie ciągnie się bez końca.
Rozwijanie w punkcie dla argumentu x_0 = 0 nazywamy rozwijanie w szereg Maclaurina.

Istnieje odpowiednik tego twierdzenia na funkcje dwóch zmiennych, a nawet dowolnej liczby zmiennych, nawet poza zbiorem liczb rzeczywistych, a nawet w jeszcze bardziej abstrakcyjnej wersji, co też poświadcza o sile tego twierdzenia.

Funkcja \arctg x jest przykładem, że rozwijanie w złym miejscu może być bardzo wolno zbieżne.
Gdyż mimo 50 stopnia wielomianu to ta aproksymacja nie porusza się za bardzo dalej.

Warto zapamiętać, iż funkcję bardziej poziome nie są najlepsze do rozwijania w szereg Taylor’a.

Tak na marginesie nigdzie nie znalazłem wzoru na n-tą pochodną funkcji \arctg x.
Ponadto wzór na n-tą pochodną \tg x jest bardzo skomplikowany.

Jak komputer oblicza \arctg x?
Na \arctg x stosuje się szereg, który rozwija wokół x_0=0 i otrzymuje się w inny sprytny sposób, ale to już oddzielna historia.