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

 Réponse acceptée

Mohammad Abouali
Mohammad Abouali le 27 Avr 2015
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 commentaires

lomesh rajyaguru
lomesh rajyaguru le 14 Juin 2018
good
Mike Frank
Mike Frank le 24 Oct 2019
Thank you for this answer. It was super helpful.
isamh
isamh le 5 Fév 2020
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?
Kai Lu
Kai Lu le 16 Mar 2021
@isamh F(3) is the third element. Meanwhile, the F(end-2) is the 2nd last element.
Javan See
Javan See le 28 Sep 2021
Modifié(e) : Javan See le 28 Sep 2021
if the code for forward and backward is the same wont they have the same set of answers?
John D'Errico
John D'Errico le 28 Sep 2021
@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.
Tan Bing Jiat
Tan Bing Jiat le 13 Avr 2022
for the xcentral
xCentral=x(2:end-1);
what does x(2:end-1); means?
Good work Mr.Abouali, inline with the numerical formulation

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by