#!/usr/bin/env python # coding: utf-8 # # 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 # 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 get_ipython().run_line_magic('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) # **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 get_ipython().run_line_magic('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) # **Alte exemple** # Pentru $-1