Aproximații cu serii Taylor

Ideea de bază a seriilor Taylor este de a reprezenta orice tip de funcție ca o sumă infinită de funcții polinomiale numită seria lui Taylor. Să presupunem că avem o funcție de o singură variabilă reală $f(x)$ de $n$ ori derivabilă într-un punct oarecare $a$, atunci putem exprima funcția prin următoarea serie infinită:

$f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\frac{f'''(a)}{3!}(x-a)^3+... $

sau mai compact:

$f(x)= \sum\limits_{k=0}^{\infty}\frac{f^k(a)}{k!}(x-a)^k $

Pentru unele funcții seria converge pentru orice valoare a lui $x$. Pentru altele doar pentru anumite valori.

Teorema lui Taylor, care poate fi găsită sub mai multe enunțuri, arată în esență că o funcție poate fi aproximată într-un anumit punct cu o sumă finită de termeni din seria lui Taylor.

De exemplu aproximația Taylor de ordin $n$ a funcției $f(x)$ în jurul punctului $a$ este:

$f(x)\approx T_{n,a}(x)=\sum\limits_{k=0}^{n}\frac{f^k(a)}{k!}(x-a)^k $

Aproximația este cu atât mai acurată cu cât numărul $x$ este mai apropiat de $a$ si cu cât numărul de termeni $k$ din aproximare este mai mare.

Restul termenilor de la $n$ la $ \infty$ alcătuiesc restul aproximării $R_{n,a}$. Evaluare acetui termen exprimă eroarea aproximării.

$R_{n,a}(x)=\sum\limits_{k=n}^{\infty}\frac{f^k(a)}{k!}(x-a)^k $

Exemplul 1

Dorim să calculăm dezvoltarea în serie Taylor a funcției $f(x)=sinx$ în jurul punctului $a=0$.

$f(x)=sinx,\quad f(0)=0,$

$f'(x)=cosx, \quad f'(0)=1, $

$f''(x)=-sinx,\quad f''(0)=0 $

$f'''(x)=-cosx, \quad f'''(0)=-1 $

$f^4(x)=sinx, \quad f^4(0)=0 $

$f^5(x)=cosx, \quad f^5(0)=1 $

$f(x)=\frac{0}{0!}x^0+\frac{1}{1!}(x)^1+\frac{0}{2!}(x)^2+\frac{-1}{3!}(x)^3+\frac{0}{4!}(x)^3+\frac{1}{5!}(x)^5+.. = x-\frac{1}{3!}x^3+\frac{1}{5!}x^5-\frac{1}{7!}x^7...$

Să considerăm două situații $x=0.3$ mai apropiat de $a=0$ si $x=0.7$ mai departe de $a=0$. Folosind primii 5 termeni ai dezvoltării în serie Taylor se observă mai jos că aproximarea este mult mai bună pentru prima situație când $x$ este mai aproape de $a=0$.

In [12]:
import numpy as np
x1 = .3
x2 =.6

estimat1 = x1 - x1**3/6 + x1**5/120
exact1 = np.sin(.3)
estimat2 = x2 - x2**3/6 + x2**5/120
exact2 = np.sin(.7)

print'estimatul lui sin(.3) este', estimat1
print'valoarea exacta a lui sin(.3) este', exact1

print'estimatul lui sin(.7) este', estimat2
print'valoarea exacta a lui sin(.7) este', exact2
estimatul lui sin(.3) este 0.29552025
valoarea exacta a lui sin(.3) este 0.295520206661
estimatul lui sin(.7) este 0.564648
valoarea exacta a lui sin(.7) este 0.644217687238

Grafic putem vedea cum se comportă funcțiile care reprezintă primii doi , patru, sase termeni din dezvoltarea în serie Taylor care aproximează $f(x)=sinx$. Cu cât numărul de termeni creste cu atât aproximarea e mai bună.

In [30]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(-8, 8, 160)  
y1 = np.sin(x)
y2 = x
y3 = x - x**3/6
y4 = x - x**3/6 + x**5/120

plt.xlabel('x')
plt.ylabel('f(x)')
plt.ylim(-1.5, 2.5)
plt.title('Aproximarea functiei sin(x)')

plt.plot(x, y1,'-b', label='sin')
plt.plot(x, y2,'-r', label='f2')
plt.plot(x, y3,'-g', label='f4')
plt.plot(x, y4,'-y', label='f5')

plt.legend(loc='upper right')
#plt.grid(True)
Out[30]:
<matplotlib.legend.Legend at 0x109c0dd10>

Exemplu 2

Dezvoltarea în serie Taylor a funcției $f(x)=cosx$ în jurul punctului $a=0$.

$f(x)=1-\frac{1}{2!}x^2+\frac{1}{4!}x^4-\frac{1}{6!}x^6+...$

In [34]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(-8, 8, 160)  
y1 = np.cos(x)
#y2 = 1
y3 = 1 - x**2/2
y4 = 1 - x**2/2 + x**4/24
y2 = 1-x**2/2 + x**4/24+x**6/780

plt.xlabel('x')
plt.ylabel('f(x)')
plt.ylim(-1.5, 2.5)
plt.title('Aproximarea functiei cos(x)')

plt.plot(x, y1,'-b', label='cos')
plt.plot(x, y2,'-r', label='f7')
plt.plot(x, y3,'-g', label='f3')
plt.plot(x, y4,'-y', label='f5')

plt.legend(loc='upper right')
#plt.grid(True)
Out[34]:
<matplotlib.legend.Legend at 0x109e4f3d0>

Alte exemple

Pentru $-1<x<1$ si orice n intreg sau fractionar avem dezvoltarea binomială, $$(1+x)^n= 1+nx + \frac{n(n-1)}{2!}x^2+\frac{n(n-1)(n-2)}{3!}x^3+... $$

Pentru orice $x$,

$$ e^x=1+x+ \frac{1}{2!}x^2+\frac{1}{3!}x^3+...$$

Cum vedem cât de bună este aproximația unei funcții folosind seriile Taylor?

Există mai multe posibilități de a estima acuratețea unei aproximări:

- 1.folosind reprezentări grafice
- 2.folosind inegalitatea lui Taylor

-1. Se reprezintă grafic $|f(x)-T_n|=R_n$, așa numitul rest al aproximării,$\quad T_n$ fiind aproximarea polinomiala de ordin n.

-2. Restul aproximării este definit de inegalitatea $|R_n|<\frac {M}{(n+1)!}|x-a|^{n+1}\quad$unde$ \quad |f^{n+1}(c)|\le M$, c fiind între $a$ și $x$.

Exemplu:$\quad f(x)=x^{1/2}$, dorim să dezvoltăm în serie Taylor această funcție în jurul punctului $a=4$ si ne interezează aproximarea polinomială de ordin $2$.

$f'(x)=\frac{1}{2}x^{-\frac{1}{2}}\quad f'(4)=\frac{1}{2}$

$f''(x)=-\frac{1}{4}x^{-\frac{3}{2}}\quad f''(4)=-\frac{1}{32}$

$f'''(x)=\frac{1}{12}x^{-\frac{4}{3}}$

$f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\frac{f'''(a)}{3!}(x-a)^3+...=f(4)+f'(4)(x-4)+f''(4)(x-4)^2+... $

$f(x)=1+\frac{x}{4}-\frac{1}{64}(x-4)^{2}+...=T_{2}+R_{2}$

Mai jos vedem reprezentarea grafică a funcției $f(x)=x^{1/2}$ precum și a aproximațiilor $T_0=1$, $T_1=1+\frac{x}{4}$, $T_2=1+\frac{x}{4}-\frac{1}{64}(x-4)^{2}$ pentru $a=4$

In [196]:
import matplotlib.pyplot as plt
import numpy as np


%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(0, 10)
x1 = np.linspace(4, 5)
y=np.sqrt(x)
plt.axhline(y=2.,color='k',linestyle='dashed')
y1=1+x/4
y2=1+x/4-(x-4)**2/64
y3=abs(y-y2)



plt.xlabel('x')
plt.ylabel('f(x)')
plt.ylim(0, 5)
plt.title('Aproximatii cu serii Taylor ')

plt.plot(x, y,'-r', label='f(x)')
plt.plot(x, y1,'-b', label='T1',linestyle='dashed')
plt.plot(x, y2,'-g', label='T2',linestyle='dashed')
plt.legend(loc='upper right')
Out[196]:
<matplotlib.legend.Legend at 0x112c80a10>

Eroarea acestei aproximări folosind reprezentarea grafică a restului $|R_n|=(f(x)-T_2)|$ pentru $x$ cuprins între $a=4$ și $5$ este reprezentată mai jos.

In [199]:
import matplotlib.pyplot as plt
import numpy as np


%matplotlib inline
plt.style.use('ggplot')
x = np.linspace(4,5,100)
y=np.sqrt(x)

y2=1+x/4-(x-4)**2/64
y3=abs(y-y2)


plt.xlabel('x')
plt.ylabel('R(x)')
plt.title('Eroarea aproximarii ')
plt.plot(x, y3,'-r', label='r(x)')
Out[199]:
[<matplotlib.lines.Line2D at 0x11157d0d0>]

O altă posibilitate să estimăm eroarea aproximării este să calculăm $R_{n,a}=\frac{M}{(n+1)!}(x-a)^{n+1}$ unde $M$ reprezintă limita superioară a valorii absolute a lui $f^{n+1}(c)$ cu $c$ intre $a$ si $x.$

$ |R_{n,a}|=\frac{|f^{n+1}(c)|}{(n+1)!}|x-a|^{n+1} $

$|R_{2,4}|=\frac{|f^{3}(c)|}{(3)!}|5-4|^{3} \quad a=4, x=5$

$ |R_{2,4}|=\frac{\frac{1}{12}\frac{1}{c^{\frac{4}{3}}}}{3!}1^3$

Dacă $c$ este între $a=4$ si $5$, valoarea maximă a lui $M = \frac{1}{12}\frac{1}{c^{\frac{4}{3}}}$ corespunde lui $c=4$, de unde eroarea maxima a aproximării este $|R_{2,4}|<0,0021$

Unde utilizăm serii Taylor?

În practică aproximațiile sunt utile atunci când avem de rezolvat o problemă care presupune calcule matematice complicate si care în anumite condiții pot fi simplificate pentru a oferi o primă soluție estimativă asupra rezultatului. În fizică în multe situații este convenabil să aproximăm într-un anumit punct o funcție cu o variantă a sa simplificată fără ca rezolvarea problemei să fie afectată semnificativ. Avem mai jos câteva exemple.

  1. Aproximarea unghiurilor mici
  2. Forța gravitațională
  3. Neglijarea efectelor relativiste

Aproximarea unghiurilor mici

În anumite situații se aproximează funcția $f(x)=sinx\approx x$, primul termen al dezvoltării în serie Taylor, sau $cos(x)\approx 1$, sau $tg(x)\approx x$. Dacă luăm ca exemplu funcția $f(x)=sinx$ si calculăm diferența dintre $x-sin(x)=R(x)$ reprezentând eroarea aproximației obținem graficul de mai sus. Acest grafic arată clar că până în $5,6$ grade eroarea este nesemnificativă si aproximația se poate face.

Forța gravitațională

Forța de atracție gravitațională exercitată de Pământ asupra unui corp de masă $m$ variază cu distanța $h$ față de suprafața Pământului conform relației: $$F(h)=K\frac{M_pm}{(R+h)^2}$$ unde $K$ este constanta atracției gravitaționale, $M_p$ este masa Pământului, $R=6371km$ este raza Pământului.

Folosind aproximația binomială $(1\pm x)^n\approx (1\pm x )$ avem $T(h)= K\frac{M_p m}{R^2}=F_0\frac{1}{(1+\frac{h}{R})^2}=F_0(1+\frac{h}{R})^{-2}\approx F_{0}(1-\frac{2h}{R})$

Variația forței de atracție gravitaționale exercitate de Pământ asupra unui corp cu masa de 1kg pe o distanță de la suprafața Pământului până la o rază terestră este arătată în graficul de mai jos.

In [65]:
import matplotlib.pyplot as plt
import numpy as np


%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(0, 6400)  
y = 9.816/(1+x/6371)**2


plt.xlabel('h(km)')
plt.ylabel('F(h)')
plt.title('Variatia fortei gravitationala pana la o inaltime Rp ')
plt.plot(x, y,'-b', label='F')
Out[65]:
[<matplotlib.lines.Line2D at 0x10b973350>]

Dacă se utilizează formula aproximativă dată de formula binomială discutată mai sus si se reprezintă grafic eroarea absolută $|{f(x)-T(x)}|$ pe o înălțime de 10 km față de suprafața Pământului atunci se observă că eroarea absolută este foarte mică (vezi graficul de mai jos).

In [73]:
import matplotlib.pyplot as plt
import numpy as np


%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(0, 10)  
y1 = 9.816/(1+x/6371)**2
y2 = 9.816*(1-(2*x)/6371)
y=abs(y1-y2)


plt.xlabel('h(km)')
plt.ylabel('Eroarea absoluta ')
plt.title('Eroarea absoluta a aproximatiei ')
plt.plot(x, y,'-b', label='E')
Out[73]:
[<matplotlib.lines.Line2D at 0x10c042110>]

Neglijarea efectelor relativiste

In Teoria Relativității restrânse apare în multe relații asa numitul factor relativist sau factor Lorentz $\gamma=\frac{1}{\sqrt{1-\frac{v^2}{c^2}}}=\frac{1}{\sqrt{1-\beta^2}}$. Factorul Lorentz depinde de viteza $v$ așa cum se vede în graficul de mai jos. La viteze mici, numite și nerelativiste, $\gamma\approx 1$. La viteze mai mari ca $250000km/s$ factorul relatist devine mai mare ca $2$ și crește semnificativ.

In [124]:
import matplotlib.pyplot as plt
import numpy as np


%matplotlib inline
plt.style.use('ggplot')

x = np.linspace(0,299000000)
c=300000000
c2=c**2
beta=(x/c)
beta2=beta**2
b=1-beta2
y=np.power(b,-0.5)


plt.xlabel('v(m/s)')
plt.ylabel('gamma')
plt.title('Variatia factorului relativist gamma ')
plt.plot(x, y,'-b', label='g')
Out[124]:
[<matplotlib.lines.Line2D at 0x10eeff690>]

Dacăse dezvoltă în serie Taylor folosind formula binomială, $\gamma=\frac{1}{\sqrt{1-\frac{v^2}{c^2}}}=\frac{1}{\sqrt{1-\beta^2}}=(1-\beta^2)^{-2}=1+\frac{1}{2}\frac{v^2}{c^2}-\frac{3}{8}\frac{v^4}{c^4}+\frac{5}{16}\frac{v^6}{c^6}+...$

Dacă se calculează energia cinetică relativistă $E_c=mc^2-m_0c^2=\frac{m_0c^2}{\sqrt{1-\beta^2}}-m_0c^2\approx m_0c^2(1+\frac{1}{2}\beta-\frac{3}{8}\beta^2+\frac{5}{16}\beta^3+... -1)\approx m_0c^2(\frac{1}{2}\beta-\frac{3}{8}\beta^2+ \frac{5}{16}\beta^3+..)$

La viteze mici termenii de doi în $\beta$ se pot neglija și $E_c\approx m_0c^2\frac{\beta}{2}=\frac {m_0v^2}{2}$, care este expresia clasică a energiei cinetice.