Приближаване на производна на функция

Приближете производната на Exp[x] в интервала [0,10], като използвате

Формула с разлика напред

Δt=0.5;
f[t_]=Exp[t];
DerF[t_]=D[f[t],t];
plotd1 = Plot[{DerF[t],(f[t+Δt]-f[t])/Δt},{t,0,10}];

Формула с разлика назад

plotd2 = Plot[{DerF[t],(f[t]-f[t-Δt])/Δt},{t,0,10}];

Формула с централна разлика

plotd3 = Plot[{DerF[t],(f[t+Δt]-f[t-Δt])/(2Δt)},{t,0,10}];

GraphicsRow[{plotd1,plotd2,plotd3}]

Приближете на производна на Exp[x] в интервала [0,10], като използвате, като използвате формула с разлика напред за Δt=0.5, 0.001, 10^(-15)

Δt=0.5

plotStep5=Plot[{DerF[t],(f[t+0.5]-f[t])/0.5},{t,0,10}];

Δt=0.001

plotStep001=Plot[{DerF[t],(f[t+0.001]-f[t])/0.001},{t,0,10}];

Δt=10^(-15)

plotStepMin15=Plot[{DerF[t],(f[t+10^(-15)]-f[t])/10^(-15)},{t,0,10}];

GraphicsRow[{plotStep5,plotStep001,plotStepMin15}]

Грешки

Пресметнете  абсолютната и относителната грешка при приближаването на производната на (e^x) с

формула с разлика напред

Δt=0.001;
absErrorD1=Plot[DerF[t]-(f[t+Δt]-f[t])/Δt,{t,0,10}];
relErrorD1 = Plot[(DerF[t]-(f[t+Δt]-f[t])/Δt)/DerF[t],{t,0,10}];

формула с разлика назад

absErrorD2= Plot[DerF[t]-(f[t]-f[t-Δt])/Δt,{t,0,10}];
relErrorD2 = Plot[(DerF[t]-(f[t]-f[t-Δt])/Δt)/DerF[t],{t,0,10}];

формула с централна разлика

absErrorD3 = Plot[DerF[t]-(f[t+Δt]-f[t-Δt])/(2Δt),{t,0,10}];
relErrorD3 = Plot[(DerF[t]-(f[t+Δt]-f[t-Δt])/(2Δt))/DerF[t],{t,0,10}];

GraphicsRow[{absErrorD1, absErrorD2, absErrorD3}]

GraphicsRow[{relErrorD1, relErrorD2, relErrorD3}]

Ред на Тейлър:

Приближете функцията Sin[x]Cos[x]x в интервала [0,10], като използвате полином на Тейлър от степен 2, 3, 4. Начертайте функцията и приближенията на една графика.

f[x_]:= Sin[x]*Cos[x]*x
Df1[x_]=D[f[x],{x,1}];
Df2[x_]=D[f[x],{x,1}];
Df3[x_]=D[f[x],{x,1}];

p2[x_,x0_]:=f[x0]+f'[x0](x-x0)+f''[x0](x-x0)^2/2!
p3[x_,x0_]:=p2[x,x0]+f'''[x0](x-x0)^3/3!
p4[x_,x0_]:=p3[x,x0]+f''''[x0](x-x0)^4/4!

Plot[{p2[x,5],p3[x,5],p4[x,5],f[x]},{x,0,10},
	PlotLegends->{"p2(x)", "p3(x)","p4(x)", "f(x)"},
	PlotStyle->Table[Thickness[0.01],{i,4}]]

GraphicsRow[{Plot[{p2[x,2.5],f[x]},{x,0,10},PlotRange->{{0,10},{-20,20}}],
			Plot[{p2[x,5],f[x]},{x,0,10},PlotRange->{{0,10},{-20,20}}],
			Plot[{p2[x,7.5],f[x]},{x,0,10},PlotRange->{{0,10},{-20,20}}]}]

Анимация (вариант 2)

PlotDer[f_,start_, end_,step_]:=
(
minF = Min[Table[f[x],{x,start,end, step}]]-1;
maxF = Max[Table[f[x],{x,start,end, step}]]+1;
Manipulate[
	taylorSeries[x0_,x_] = f[x0]+Sum[ReplaceAll[D[f[y],{y,k}],y->x0]*(x-x0)^k/k!,{k,1,order}];
	Show[Plot[{f[x],taylorSeries [x0,x]},{x,start,end}, PlotRange->{{start,end},{minF,maxF}}],ListPlot[{{x0,f[x0]}},PlotStyle->Orange]],
	{x0,start,end, step},
	{order,1,20,1}]
)

p[x_]:=Sin[x]*Cos[x]*x
PlotDer[p,0,10,0.1]

Коя е минималната степен на полином на Тейлър, получен при развиване около (Subscript[x, 0])=5, при която абсолютна грешка по модул при приближаването на Sin[x]Cos[x]x във всяка точка от интервала [0,10] е по-малка от 0.1?

f[x_]:= Sin[x]*Cos[x]*x
taylorSeries[x_, order_] := f[5]+Sum[ReplaceAll[D[f[y],{y,k}],y->5.]*(x-5.)^k/k!,{k,1,order}];

For[order=1, order≤100,order++,
maxError = Maximize[{Abs[f[x]-taylorSeries[x, order]],0≤x≤10},x][[1]];
If[maxError≤0.1,
	Print[{order, maxError}];
	Break[]];
];

Plot[{f[x],taylorSeries[x, 28]},{x,-1,11}, PlotRange->All]

Пресметнете абсолютната грешка за апроксимацията на e^x с

разлика напред

f[x_]:=E^x
absErrorD1Step001=Plot[DerF[t]-(f[t+0.001]-f[t])/0.001,{t,0,10}];
absErrorD1Step0001=Plot[DerF[t]-(f[t+0.0001]-f[t])/0.0001,{t,0,10}];
absErrorD1Step000001=Plot[DerF[t]-(f[t+0.000001]-f[t])/0.000001,{t,0,10}];
GraphicsRow[{absErrorD1Step001, absErrorD1Step0001, absErrorD1Step000001}]

централна разлика

absErrorD3Step001=Plot[DerF[t]-(f[t+0.001]-f[t-0.001])/0.002,{t,0,10}];
absErrorD3Step0001=Plot[DerF[t]-(f[t+0.0001]-f[t-0.0001])/0.0002,{t,0,10}];
absErrorD3Step00001=Plot[DerF[t]-(f[t+0.00001]-f[t-0.00001])/0.00002,{t,0,10}];
GraphicsRow[{absErrorD3Step001, absErrorD3Step0001, absErrorD3Step00001}]