forward, backward and central differences

hey please i was trying to differentiate this function: y(x)=e^(-x)*sin(3x), using forward, backward and central differences using 101 points from x=0 to x=4. and plot the estimates and the actual function derivatives. here is my code:
f = @(x) exp(-x)*sin(3*x); %actual derivative of function fprime = @(x) -exp(-x)*sin(3*x)+ 3*exp(-x)*cos(3*x);
%step size:
h=0.04;
%forward difference dfdx_forward = (f(2+h)-f(2))/h Error_forward = fprime(2)-dfdx_forward %error
%bacward difference
dfdx_backward = (f(2)-f(2-h))/h
Error_backward = fprime(2)-dfdx_backward %error
%central difference
dfdx_central = (f(2+h)-f(2-h))/(2*h)
Error_central = fprime(2)-dfdx_central %error
please let me know if this is right and where i made my mistakes

 采纳的回答

Fun = @(x) exp(-x).*sin(3*x);
dFun = @(x) -exp(-x).*sin(3*x)+ 3*exp(-x).*cos(3*x);
x=linspace(0,4,101);
F=Fun(x);
h=x(2)-x(1);
xCentral=x(2:end-1);
dFCenteral=(F(3:end)-F(1:end-2))/(2*h);
xForward=x(1:end-1);
dFForward=(F(2:end)-F(1:end-1))/h;
xBackward=x(2:end);
dFBackward=(F(2:end)-F(1:end-1))/h;
plot(x,dFun(x));
hold on
plot(xCentral,dFCenteral,'r')
plot(xForward,dFForward,'k');
plot(xBackward,dFBackward,'g');
legend('Analytic','Central','Forward','Backward')

8 个评论

Thank you for this answer. It was super helpful.
for the central difference
dFCenteral=(F(3:end)-F(1:end-2))/(2*h);
what does the 3 in (F(3:end) and what does the 2 in F(1:end-2) do?
@isamh F(3) is the third element. Meanwhile, the F(end-2) is the 2nd last element.
if the code for forward and backward is the same wont they have the same set of answers?
@Javan See - good question. But in fact, the result is subtly different. You can see they are plotted versus xForward and XBackward. And THOSE x vectors are in fact different, offset by the stride h. The point being that one of these derivative estimates at the point x, will be a function of the value at f(x) and f(x+h). But the other estimate at that point will be determined by f(x-h) and f(x).
The difference will be tiny most of the time, and will only be seen when you look carefully. But it is a difference.
for the xcentral
xCentral=x(2:end-1);
what does x(2:end-1); means?
Good work Mr.Abouali, inline with the numerical formulation

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 MATLAB 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by