Mathematica i Szereg Taylora

Wiemy że dla każdej n-krotnie różniczkowalnej funkcji f w punkcie a istnieje n-ty wielomian Taylora, to znaczy

f(x)= f(a)+f'(a)(x-a) +((f''(a))/(2!))(((x-a))^2)+…+((Derivative[n][f](a))/(n!))(((x-a))^n)+(Subscript[r, n])(x,a)

gdzie (Subscript[r, n])(x,a) jest jakąś funkcją z właściwością  (lim_(x->a)) (((Subscript[r, n])(x,a))/(((x-a))^n6))=0. Okazuje się że (zakładając że a ma otoczenie w dziedzinie f będące przedziałem) istnieje tylko jeden taki wielomian i tylko jedna taka funkcja (dla danego f i a).

Załóżmy że możemy napisać na dwa sposoby:

f[x]=w[x,(Subscript[x, 0])]+(Subscript[h, 1])[x,(Subscript[x, 0])](((x-(Subscript[x, 0])))^n)

f[x]=v[x,(Subscript[x, 0])]+(Subscript[h, 2])[x,(Subscript[x, 0])](((x-(Subscript[x, 0])))^n)

wtedy

w[x,(Subscript[x, 0])]-v[x,(Subscript[x, 0])]== (Subscript[h, 2])[x,(Subscript[x, 0])](((x-(Subscript[x, 0])))^n)-(Subscript[h, 1])[x,(Subscript[x, 0])](((x-(Subscript[x, 0])))^n)= (Subscript[h, 3])[x,(Subscript[x, 0])](((x-(Subscript[x, 0])))^n)

Niech

w(x,(Subscript[x, 0]))-v(x,(Subscript[x, 0]))==(Subscript[a, n]) (((x-(Subscript[x, 0])))^n)+(Subscript[a, 2]) (((x-(Subscript[x, 0])))^2)+(Subscript[a, 1]) (((x-(Subscript[x, 0])))^1)+(Subscript[a, 0])

Pokażemy że wszystkie (Subscript[a, n])=0.

czyli

(Subscript[a, n]) (((x-(Subscript[x, 0])))^n)+(Subscript[a, 2]) (((x-(Subscript[x, 0])))^2)+(Subscript[a, 1]) (((x-(Subscript[x, 0])))^1)+(Subscript[a, 0])+…==(Subscript[h, 3])(x,(Subscript[x, 0]))(((x-(Subscript[x, 0])))^n)

bierzemy granicę obu storn kiedy x->(Subscript[x, 0])

(Subscript[a, 0])=0

przez indukcję

(Subscript[a, n])=0

Z tego wynika że zarówno wielomiany jak i reszty są te same.

Funkcja Series

Jeśli mamy daną funkcję f, o której wiemy że jest różniczkowalna conajmniej n-razy, możemy znaleźć jej wielomian Taylora o środku a pisząc

Series[f[x],{x,a,4}]

Czwarty wielomian Taylora uzyskujemy stosując do powyższego funkcję Normal:

Normal[Series[f[x],{x,a,4}]]

Uwaga!

Notacja ((O[x-a])^n) Mathematici oznacza coś innego od o((((x-a))^n)) w matematyce. Możemy jednak interpretować ((O[x-a])^n) jako  o((((x-a))^(n-1))).

Krótszy input

Zamiast pisać

Series[Sin[x],{x,Pi/2,3}]

możemy użyć skróconej formy

Sin[x]+O[x,Pi/2]^3

Jeśli potrzebujemy tylko współczynniki szeregu Taylora, możemy użyć funkcji

SeriesCoefficient[Sin[x],{x,0,11}]

Czasem (ale nie zawsze) Mathematica potrafi obliczyć ogólny (czyli n-ty) współczynnik

SeriesCoefficient[Sin[x],{x,0,n}]

Proszę zwrócić uwagę na użycie liczby zespolonej i mimo że współczynnik jest liczbą rzeczywistą (wymierną!).

Trochę dziwny przykład

Clear[f]

f[x_]:=Piecewise[{{0,x== 0}},Exp[-1/(x^2)]]

f'[0]

f''[0]

Derivative[20][f](0)

Limit[((f[x])/(x^n)),x->0,Assumptions->n>0]

Zauważmy że f jest o((x^n)) dla każdego n>0.

To oznacza że

f[x]=0 +0 x+ 0(x^2)+⋯+ 0(x^n)+ f[x]

i że każdy wielomian Taylora f ze środkiem w 0 jest zerowy a samo f jest resztą w postaci Peano.

Jeśli środek nie jest w 0 to otrzymujemy niezerowe wielomiany Taylora:

Exp[((-1)/(x^2))]+((O[x,1])^10)

SeriesCoefficient[Exp[((-1)/(x^2))],{x,1,20}]

Przybliżanie różnych funkcji wielomianami Taylora na przedziale

Manipulate[Module[{u},Plot[{f[x],Normal[f[u]+O[u,First[c]]^(n+1)]/.u->x},{x,First[c]-δ,First[c]+δ},PlotRange->{{First[c]-δ,First[c]+δ},{-v,v}}]],{{n,1,"stopień"},0,100,1,Appearance->"Labeled"},{{c,{0,0},"środek",Appearance->"Labeled"},{-10,0},{10,0},Locator,Appearance -> Style["▮",10,Red]},{{δ,1,"promień przedziału ekspansji"},0.1,50,Appearance->"Labeled"},{{v,10,"przedział wartości"},1,200,Appearance->"Labeled"},{{f,Exp,"funkcja"
},InputField},SaveDefinitions->True]

Szereg Taylora i Mathematica

Rozważmy przykładową funkcję:

f[x_]:=Sin[Cos[x]-1]

Plot[f[x],{x,-4Pi,3Pi}]

Series[f[x],{x,0,6}]

lub

f[x]+O[x]^7

ekspansja o środku w  π

Series[f[x],{x,Pi,6}]

Wielomian Taylora

Normal[Series[f[x],{x,Pi,6}]]

Współczynniki

SeriesCoefficient[f[x],{x,0,20}]

tym razem Mathematica nie potrafi znaleźć wyrażenia dla ogólnego współczynnika

SeriesCoefficient[f[x],{x,0,n}]

Ale w wielu innych przykładach potrafi, np.

SeriesCoefficient[Cos[1-3x],{x,0,n}]

SeriesCoefficient[(1/(1+2x+x^2)),{x,0,n}]

SeriesCoefficient[(1/(1+2x^2)),{x,0,n}]//FullSimplify

Granice

Limit[((1+((Sin[x])^2)-Exp[(x^2)])/(x^2/2+Sqrt[1-x^2]-Cos[x^2])),x->0]

1+((Sin[x])^2)-Exp[(x^2)] +((O[x])^6)

x^2/2+Sqrt[1-x^2]-Cos[x^2]+O[x]^6

((-((5 (x^4))/6)+O((x^6)))/(((3 (x^4))/8)+O((x^6)))) == ((-((5 (x^4))/6)+O((x^6)))/(((3 (x^4))/8)+O((x^6))))==((-((5 )/6)+((o((x^4)))/(x^4)))/(((3 )/8)+((o((x^4)))/(x^4))))->((-((5 )/6))/((3 )/8))== ((-20)/9)

1+((Sin[x])^2)-Exp[(x^2)]

1+(((x-((x^3)/6)+((O[x])^5)))^2)-(1+(x^2)+((x^4)/2)+((O[x])^8))==(x^2)(((1-((x^2)/6)+((O[x])^4)))^2)-((x^2)+((x^4)/2)+((O[x])^8))==((-1)/3)(x^4)-((x^4)/2)+((O[x])^6)== ((-5)/6)(x^4)+((O[x])^6)

((x^2)/2)+(Sqrt[1-(x^2)])-cos((x^2)) +((O[x])^5)

((x^2)/2)+(((1-(x^2)))^(1/2))-cos((x^2)) == ((x^2)/2) +(1-(1/2)(x^2) -(1/8)(x^4)+((O[x])^6))-(1-((x^4)/2)+((O[x])^8))==(3/8)(x^4)+((O[x])^8)

Reszta w formie Lagrange'a

Ponieważ Mathematica  potrafi obliczyć dokładnie  błąd przybliżenia wartości funkcji w punkcie i wartości jest wielomianu Taylora, formuły na resztę Taylora, takie jak formuła Lagrange's nie są pożyteczne w obliczeniach przy pomocy Mathematici. Na przykład, dla poniższej funkcji, możemy obliczyć błąd w przybliżeniu przez 4 wielomian Taylora.

f[x_]:=(E^x)Sin[x]

Normal[f[x]+((O[x])^5)]

Abs[N[f[1]-Normal[f[x]+((O[x])^5)]/.x->1]]

Przy pomocy Mathematici oczywiście łatwo znaleźć formułę na resztę w formie Lagrange'a, pamiętając o tym że jest to "następny wyrazu"  szeregy Taylora, z (n+1)-pochodną

SeriesCoefficient[f[x],{x,ξ,5}](x^5)/.x->1

gdzie 0<ξ<1.  Szacując ręcznie wartość bezwzgledną błędu:

N[(1/30) 3 2]

Co jest oczywiście dużo większe niż prawdziwy błąd 0.046. Możemy użyć Maximize do obliczenia maksymalnej wartości błędu Lagrange's:

Maximize[{(1/30) (E^ξ) (Cos[ξ]+Sin[ξ]),0≤ξ≤1},ξ]//N

Przybliżenie jest lepsze od "ręcznego" ale nadal dużo większe od prawdziwego błędu.

Zadania

Prawie wszystkie te zadania można rozwiązać obliczając  szereg Taylora w odpowiednim punkcie. Wyjątkiem są (a) i (e).

x Log[x]+((O[x])^5)

Nie otrzymaliśmy szeregu potęgowego.

(1/(Log[x]))-(1/(x-1)) +O[x,1]

czyli

Limit[(1/(Log[x]))-(1/(x-1)),x->1]

a)

Clear[x]

(E^x)+((O[x])^3)

Reszta w formie Lagrange' a  ((e^((1/2)((((1/2)))^(n+1))))/((n+1)!))≤ ((3*(((1/2))^(n+1)))/((n+1)!))

((3*(((1/2))^(n+1)))/((n+1)!))

Przy pomocy pętli While znajdujemy najmniejsze n dla którego reszta jest ≤ 0.001.

n=1;While[((3*(((1/2))^(n+1)))/((n+1)!))≥0.001,n++];n

Sprawdzamy:

N[E^(1/2)-Normal[E^x+O[x]^5]/.x->1/2]

Teraz zrobimy to samo dokładnie (bez pomocy formuły Lagrange'a)

n=1;While[(E^(1/2)-Normal[E^x+O[x]^n]/.x->0.5)≥0.001,n++];n

Co pokazuje że tym razem przybliżenie uzyskane przy pomocy reszty Lagrange'a jest najlepsze z możliwych.

FindRoot i metoda stycznych.

Reduce[x^2==Exp[x],x,Reals]

{res,{evx}}=Reap[FindRoot[x^2==Exp[x],{x,0},EvaluationMonitor:>Sow[x]]]

evx

g1=Plot[x^2-Exp[x],{x,-1,1},PlotStyle->Red];

f[x_]:=x^2-Exp[x]

y==f'[a](x-a)+f[a]

points=Graphics[Map[Point[{#,0}]&,evx]];

Show[points,g1,Plot[Map[f'[#](x-#)+f[#]&,evx],{x,-1,1}],Axes->True]

{res1,{evx1}}=Reap[FindRoot[x^2==Exp[x],{x,3},EvaluationMonitor:>Sow[x]]]

g2=Plot[x^2-Exp[x],{x,-1,4},PlotStyle->Red];

points1=Graphics[Map[Point[{#,0}]&,evx1]];

Show[points1,g2,Plot[Map[f'[#](x-#)+f[#]&,evx1],{x,-1,4}],Axes->True,PlotRange->{-10,.5}]