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

 채택된 답변

Mohammad Abouali
Mohammad Abouali 2015년 4월 27일

18 개 추천

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

good
Mike Frank
Mike Frank 2019년 10월 24일
Thank you for this answer. It was super helpful.
isamh
isamh 2020년 2월 5일
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 2021년 3월 16일
@isamh F(3) is the third element. Meanwhile, the F(end-2) is the 2nd last element.
Javan See
Javan See 2021년 9월 28일
편집: Javan See 2021년 9월 28일
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

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

카테고리

도움말 센터File Exchange에서 MATLAB에 대해 자세히 알아보기

질문:

2015년 4월 27일

답변:

2025년 3월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by